diff options
Diffstat (limited to 'sw/source/filter/html/SwAppletImpl.cxx')
-rw-r--r-- | sw/source/filter/html/SwAppletImpl.cxx | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/sw/source/filter/html/SwAppletImpl.cxx b/sw/source/filter/html/SwAppletImpl.cxx new file mode 100644 index 000000000000..5891531d53c1 --- /dev/null +++ b/sw/source/filter/html/SwAppletImpl.cxx @@ -0,0 +1,210 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: 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_sw.hxx" +#include <SwAppletImpl.hxx> +#include <svtools/htmlkywd.hxx> +#include <svl/urihelper.hxx> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/embed/EmbedStates.hpp> + +#include <comphelper/embeddedobjectcontainer.hxx> +#include <sot/clsids.hxx> +#include <com/sun/star/uno/Any.hxx> +#include <svtools/embedhlp.hxx> + +using namespace com::sun::star; + +namespace { + +static char const sHTML_O_archive[] = "ARCHIVE"; +static char const sHTML_O_Archives[] = "ARCHIVES"; +static char const sHTML_O_Object[] = "OBJECT"; + +} + +sal_uInt16 SwApplet_Impl::GetOptionType( const String& rName, sal_Bool bApplet ) +{ + sal_uInt16 nType = bApplet ? SWHTML_OPTTYPE_PARAM : SWHTML_OPTTYPE_TAG; + + switch( rName.GetChar(0) ) + { + case 'A': + case 'a': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_align ) || + rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_alt ) ) + nType = SWHTML_OPTTYPE_IGNORE; + else if( bApplet && + (rName.EqualsIgnoreCaseAscii( sHTML_O_archive ) || + rName.EqualsIgnoreCaseAscii( sHTML_O_Archives )) ) + nType = SWHTML_OPTTYPE_TAG; + break; + case 'C': + case 'c': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_class ) || + (bApplet && (rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_code ) || + rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_codebase ))) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'H': + case 'h': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_height ) ) + nType = SWHTML_OPTTYPE_SIZE; + else if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_hspace ) || + (!bApplet && rName.EqualsIgnoreCaseAscii( OOO_STRING_SW_HTML_O_Hidden )) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'I': + case 'i': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_id ) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'M': + case 'm': + if( bApplet && rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_mayscript ) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'N': + case 'n': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_name ) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'O': + case 'o': + if( bApplet && rName.EqualsIgnoreCaseAscii( sHTML_O_Object ) ) + nType = SWHTML_OPTTYPE_TAG; + break; + case 'S': + case 's': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_style ) || + (!bApplet && rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_src )) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'T': + case 't': + if( !bApplet && rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_type ) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'V': + case 'v': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_vspace ) ) + nType = SWHTML_OPTTYPE_IGNORE; + break; + case 'W': + case 'w': + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_width ) ) + nType = SWHTML_OPTTYPE_SIZE; + break; + } + + return nType; +} +SwApplet_Impl::SwApplet_Impl( SfxItemPool& rPool, sal_uInt16 nWhich1, sal_uInt16 nWhich2 ) : + aItemSet( rPool, nWhich1, nWhich2 ) +{ +} + +void SwApplet_Impl::CreateApplet( const String& rCode, const String& rName, + sal_Bool bMayScript, const String& rCodeBase, + const String& rDocumentBaseURL ) +{ + comphelper::EmbeddedObjectContainer aCnt; + ::rtl::OUString aName; + + // create Applet; it will be in running state + xApplet = aCnt.CreateEmbeddedObject( SvGlobalName( SO3_APPLET_CLASSID ).GetByteSequence(), aName ); + ::svt::EmbeddedObjectRef::TryRunningState( xApplet ); + + INetURLObject aUrlBase(rDocumentBaseURL); + aUrlBase.removeSegment(); + + String sDocBase = aUrlBase.GetMainURL(INetURLObject::NO_DECODE); + uno::Reference < beans::XPropertySet > xSet( xApplet->getComponent(), uno::UNO_QUERY ); + if ( xSet.is() ) + { + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCode")), uno::makeAny( ::rtl::OUString( rCode ) ) ); + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletName")), uno::makeAny( ::rtl::OUString( rName ) ) ); + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletIsScript")), uno::makeAny( sal_Bool(bMayScript) ) ); + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletDocBase")), uno::makeAny( ::rtl::OUString(sDocBase) ) ); + if ( rCodeBase.Len() ) + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCodeBase")), uno::makeAny( ::rtl::OUString( rCodeBase ) ) ); + else + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCodeBase")), uno::makeAny( ::rtl::OUString( sDocBase ) ) ); + } +} +#ifdef SOLAR_JAVA +sal_Bool SwApplet_Impl::CreateApplet( const String& rBaseURL ) +{ + String aCode, aName, aCodeBase; + sal_Bool bMayScript = sal_False; + + sal_uInt32 nArgCount = aCommandList.Count(); + for( sal_uInt32 i=0; i<nArgCount; i++ ) + { + const SvCommand& rArg = aCommandList[i]; + const String& rName = rArg.GetCommand(); + if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_code ) ) + aCode = rArg.GetArgument(); + else if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_codebase ) ) + aCodeBase = INetURLObject::GetAbsURL( rBaseURL, rArg.GetArgument() ); + else if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_name ) ) + aName = rArg.GetArgument(); + else if( rName.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_O_mayscript ) ) + bMayScript = sal_True; + } + + if( !aCode.Len() ) + return sal_False; + CreateApplet( aCode, aName, bMayScript, aCodeBase, rBaseURL ); + return sal_True; +} +#endif + +SwApplet_Impl::~SwApplet_Impl() +{ +} +void SwApplet_Impl::FinishApplet() +{ + uno::Reference < beans::XPropertySet > xSet( xApplet->getComponent(), uno::UNO_QUERY ); + if ( xSet.is() ) + { + uno::Sequence < beans::PropertyValue > aProps; + aCommandList.FillSequence( aProps ); + xSet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AppletCommands")), uno::makeAny( aProps ) ); + } +} + +#ifdef SOLAR_JAVA +void SwApplet_Impl::AppendParam( const String& rName, const String& rValue ) +{ + aCommandList.Append( rName, rValue ); +} +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |