diff options
-rw-r--r-- | xmloff/inc/XMLImageMapExport.hxx | 153 | ||||
-rw-r--r-- | xmloff/source/core/xmlexp.cxx | 23 | ||||
-rw-r--r-- | xmloff/source/core/xmlimp.cxx | 8 | ||||
-rw-r--r-- | xmloff/source/draw/XMLImageMapExport.cxx | 348 | ||||
-rw-r--r-- | xmloff/source/draw/makefile.mk | 5 |
5 files changed, 531 insertions, 6 deletions
diff --git a/xmloff/inc/XMLImageMapExport.hxx b/xmloff/inc/XMLImageMapExport.hxx new file mode 100644 index 000000000000..9db16b75a915 --- /dev/null +++ b/xmloff/inc/XMLImageMapExport.hxx @@ -0,0 +1,153 @@ +/************************************************************************* + * + * $RCSfile: XMLImageMapExport.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2001-03-28 10:28:15 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLIMAGEMAPEXPORT_HXX_ +#define _XMLOFF_XMLIMAGEMAPEXPORT_HXX_ + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +namespace com { namespace sun { namespace star { + namespace uno { template<class X> class Reference; } + namespace beans { class XPropertySet; } + namespace container { class XIndexContainer; } +} } } +class SvXMLExport; + + +/** + * Export an ImageMap as defined by service com.sun.star.image.ImageMap to XML. + */ +class XMLImageMapExport +{ + const ::rtl::OUString sBoundary; + const ::rtl::OUString sCenter; + const ::rtl::OUString sDescription; + const ::rtl::OUString sImageMap; + const ::rtl::OUString sIsActive; + const ::rtl::OUString sName; + const ::rtl::OUString sPolygon; + const ::rtl::OUString sRadius; + const ::rtl::OUString sTarget; + const ::rtl::OUString sURL; + + SvXMLExport& rExport; + + sal_Bool bWhiteSpace; /// use whitespace between image map elements? + +public: + XMLImageMapExport(SvXMLExport& rExport); + + ~XMLImageMapExport(); + + /** + * Get the ImageMap object from the "ImageMap" property and subsequently + * export the map (if present). + */ + void Export( + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropertySet ); + + /** + * Export an ImageMap (XIndexContainer). + */ + void Export( + const ::com::sun::star::uno::Reference< + ::com::sun::star::container::XIndexContainer> & rContainer ); + +protected: + + /** + * Export a single, named map entry. + * (as given by com.sun.star.image.ImageMapObject) + * Calls methods for specific image map entries. + */ + void ExportMapEntry( + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropertySet); + + /** + * Export the specifics of a rectangular image map entry. + * To be called by ExportMapEntry. + */ + void ExportRectangle( + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropertySet); + + /** + * Export the specifics of a circular image map entry. + * To be called by ExportMapEntry. + */ + void ExportCircle( + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropertySet); + + /** + * Export the specifics of a polygonal image map entry; + * To be called by ExportMapEntry. + */ + void ExportPolygon( + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropertySet); +}; + +#endif diff --git a/xmloff/source/core/xmlexp.cxx b/xmloff/source/core/xmlexp.cxx index cc76d25580a0..2b68e4328eb2 100644 --- a/xmloff/source/core/xmlexp.cxx +++ b/xmloff/source/core/xmlexp.cxx @@ -2,9 +2,9 @@ * * $RCSfile: xmlexp.cxx,v $ * - * $Revision: 1.50 $ + * $Revision: 1.51 $ * - * last change: $Author: sab $ $Date: 2001-03-23 06:56:35 $ + * last change: $Author: dvo $ $Date: 2001-03-28 10:28:16 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -158,6 +158,9 @@ #ifndef _XMLOFF_XMLFONTAUTOSTYLEPOOL_HXX #include "XMLFontAutoStylePool" #endif +#ifndef _XMLOFF_XMLIMAGEMAPEXPORT_HXX_ +#include "XMLImageMapExport.hxx" +#endif #ifndef _COM_SUN_STAR_LANG_SERVICENOTREGISTEREDEXCEPTION_HPP_ #include <com/sun/star/lang/ServiceNotRegisteredException.hpp> @@ -256,6 +259,7 @@ SvXMLExport::SvXMLExport( MapUnit eDfltUnit, const sal_Char * pClass, sal_uInt16 pNumExport(0L), pProgressBarHelper( NULL ), pEventExport( NULL ), + pImageMapExport( NULL ), bSaveLinkedSections(sal_True), mnExportFlags( nExportFlags ) { @@ -279,6 +283,7 @@ SvXMLExport::SvXMLExport( pNumExport(0L), pProgressBarHelper( NULL ), pEventExport( NULL ), + pImageMapExport( NULL ), bSaveLinkedSections(sal_True), mnExportFlags( EXPORT_ALL ) { @@ -308,6 +313,7 @@ SvXMLExport::SvXMLExport( xNumberFormatsSupplier (rModel, uno::UNO_QUERY), pProgressBarHelper( NULL ), pEventExport( NULL ), + pImageMapExport( NULL ), bSaveLinkedSections(sal_True), mnExportFlags( EXPORT_ALL ) { @@ -339,6 +345,7 @@ SvXMLExport::SvXMLExport( xNumberFormatsSupplier (rModel, uno::UNO_QUERY), pProgressBarHelper( NULL ), pEventExport( NULL ), + pImageMapExport( NULL ), bSaveLinkedSections(sal_True), mnExportFlags( EXPORT_ALL ) { @@ -350,6 +357,7 @@ SvXMLExport::SvXMLExport( SvXMLExport::~SvXMLExport() { + delete pImageMapExport; delete pEventExport; delete pNumExport; delete pNamespaceMap; @@ -1062,6 +1070,17 @@ XMLEventExport& SvXMLExport::GetEventExport() return *pEventExport; } +XMLImageMapExport& SvXMLExport::GetImageMapExport() +{ + // image map export, create on-demand + if( NULL == pImageMapExport ) + { + pImageMapExport = new XMLImageMapExport(*this); + } + + return *pImageMapExport; +} + // XUnoTunnel & co const uno::Sequence< sal_Int8 > & SvXMLExport::getUnoTunnelId() throw() { diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index e68233ac30c1..d3a9110902fe 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -2,9 +2,9 @@ * * $RCSfile: xmlimp.cxx,v $ * - * $Revision: 1.29 $ + * $Revision: 1.30 $ * - * last change: $Author: sab $ $Date: 2001-03-22 12:41:50 $ + * last change: $Author: dvo $ $Date: 2001-03-28 10:28:16 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -229,6 +229,7 @@ SvXMLImport::SvXMLImport( sal_uInt16 nImportFlags ) throw () : pNumImport( NULL ), pProgressBarHelper( NULL ), pEventImportHelper( NULL ), + pImageMapImportHelper( NULL ), mnImportFlags( nImportFlags ) { _InitCtor(); @@ -244,6 +245,7 @@ SvXMLImport::SvXMLImport( const Reference< XModel > & rModel ) throw () : xNumberFormatsSupplier (rModel, uno::UNO_QUERY), pProgressBarHelper( NULL ), pEventImportHelper( NULL ), + pImageMapImportHelper( NULL ), mnImportFlags( IMPORT_ALL ) { _InitCtor(); @@ -261,6 +263,7 @@ SvXMLImport::SvXMLImport( const Reference< XModel > & rModel, xNumberFormatsSupplier (rModel, uno::UNO_QUERY), pProgressBarHelper( NULL ), pEventImportHelper( NULL ), + pImageMapImportHelper( NULL ), mnImportFlags( IMPORT_ALL ) { _InitCtor(); @@ -272,6 +275,7 @@ SvXMLImport::~SvXMLImport() throw () delete pUnitConv; delete pContexts; delete pEventImportHelper; + delete pImageMapImportHelper; if (pNumImport) delete pNumImport; if (pProgressBarHelper) diff --git a/xmloff/source/draw/XMLImageMapExport.cxx b/xmloff/source/draw/XMLImageMapExport.cxx new file mode 100644 index 000000000000..e7c8d9ae6350 --- /dev/null +++ b/xmloff/source/draw/XMLImageMapExport.cxx @@ -0,0 +1,348 @@ +/************************************************************************* + * + * $RCSfile: XMLImageMapExport.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dvo $ $Date: 2001-03-28 10:28:15 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XMLOFF_XMLIMAGEMAPEXPORT_HXX_ +#include "XMLImageMapExport.hxx" +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include <com/sun/star/uno/Reference.h> +#endif + +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_H_ +#include <com/sun/star/uno/Sequence.h> +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif + +#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ +#include <com/sun/star/lang/XServiceInfo.hpp> +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXCONTAINER_HPP_ +#include <com/sun/star/container/XIndexContainer.hpp> +#endif + +#ifndef _COM_SUN_STAR_DOCUMENT_XEVENTSSUPPLIER_HPP +#include <com/sun/star/document/XEventsSupplier.hpp> +#endif + +#ifndef _XMLOFF_XMLEXP_HXX +#include "xmlexp.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLEVENTEXPORT_HXX +#include "XMLEventExport.hxx" +#endif + + + +using ::rtl::OUString; +using ::com::sun::star::uno::Any; +using ::com::sun::star::uno::UNO_QUERY; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::beans::XPropertySet; +using ::com::sun::star::container::XIndexContainer; +using ::com::sun::star::document::XEventsSupplier; +using ::com::sun::star::lang::XServiceInfo; + + +const sal_Char sAPI_ImageMapRectangleObject[] = "com.sun.star.image.ImageMapRectangleObject"; +const sal_Char sAPI_ImageMapCircleObject[] = "com.sun.star.image.ImageMapCircleObject"; +const sal_Char sAPI_ImageMapPolygonObject[] = "com.sun.star.image.ImageMapPolygonObject"; + +const sal_Char sXML_image_map[] = "image-map"; +const sal_Char sXML_area_rectangle[] = "area-rectangle"; +const sal_Char sXML_area_circle[] = "area-circle"; +const sal_Char sXML_area_polygon[] = "area-polygon"; + +XMLImageMapExport::XMLImageMapExport(SvXMLExport& rExp) : + rExport(rExp), + bWhiteSpace(sal_True), + sBoundary(RTL_CONSTASCII_USTRINGPARAM("Boundary")), + sCenter(RTL_CONSTASCII_USTRINGPARAM("Center")), + sDescription(RTL_CONSTASCII_USTRINGPARAM("Description")), + sImageMap(RTL_CONSTASCII_USTRINGPARAM("ImageMap")), + sIsActive(RTL_CONSTASCII_USTRINGPARAM("IsActive")), + sName(RTL_CONSTASCII_USTRINGPARAM("Name")), + sPolygon(RTL_CONSTASCII_USTRINGPARAM("Polygon")), + sRadius(RTL_CONSTASCII_USTRINGPARAM("Radius")), + sTarget(RTL_CONSTASCII_USTRINGPARAM("Target")), + sURL(RTL_CONSTASCII_USTRINGPARAM("URL")) +{ +} + +XMLImageMapExport::~XMLImageMapExport() +{ + +} + +void XMLImageMapExport::Export( + const Reference<XPropertySet> & rPropertySet ) +{ + if (rPropertySet->getPropertySetInfo()->hasPropertyByName(sImageMap)) + { + Any aAny = rPropertySet->getPropertyValue(sImageMap); + Reference<XIndexContainer> aContainer; + aAny >>= aContainer; + + Export(aContainer); + } + // else: no ImageMap property -> nothing to do +} + +void XMLImageMapExport::Export( + const Reference<XIndexContainer> & rContainer ) +{ + if (rContainer.is()) + { + if (rContainer->hasElements()) + { + // image map container element + SvXMLElementExport aImageMapElement( + rExport, + XML_NAMESPACE_DRAW, sXML_image_map, + bWhiteSpace, bWhiteSpace); + + // iterate over image map elements and call ExportMapEntry(...) + // for each + sal_Int32 nLength = rContainer->getCount(); + for(sal_Int32 i = 0; i < nLength; i++) + { + Any aAny = rContainer->getByIndex(i); + Reference<XPropertySet> rElement; + aAny >>= rElement; + + DBG_ASSERT(rElement.is(), "Image map element is empty!"); + if (rElement.is()) + { + ExportMapEntry(rElement); + } + } + } + // else: container is empty -> nothing to do + } + // else: no container -> nothign to do +} + + +enum MapEntryType +{ + RECTANGLE, + CIRCLE, + POLYGON, + INVALID +}; + +void XMLImageMapExport::ExportMapEntry( + const Reference<XPropertySet> & rPropertySet) +{ + OUString sAreaRectangle(RTL_CONSTASCII_USTRINGPARAM(sXML_area_rectangle)); + OUString sAreaCircle(RTL_CONSTASCII_USTRINGPARAM(sXML_area_circle)); + OUString sAreaPolygon(RTL_CONSTASCII_USTRINGPARAM(sXML_area_polygon)); + + + Reference<XServiceInfo> xServiceInfo(rPropertySet, UNO_QUERY); + if (xServiceInfo.is()) + { + enum MapEntryType eType = INVALID; + + // distinguish map entries by their service name + Sequence<OUString> sServiceNames = + xServiceInfo->getSupportedServiceNames(); + sal_Int32 nLength = sServiceNames.getLength(); + sal_Bool bFound = sal_False; + for( sal_Int32 i=0; i<nLength; i++ ) + { + OUString& rName = sServiceNames[i]; + + if ( rName.equalsAsciiL(sAPI_ImageMapRectangleObject, + sizeof(sAPI_ImageMapRectangleObject)-1) ) + { + eType = RECTANGLE; + break; + } + else if ( rName.equalsAsciiL(sAPI_ImageMapCircleObject, + sizeof(sAPI_ImageMapCircleObject)-1) ) + { + eType = CIRCLE; + break; + } + else if ( rName.equalsAsciiL(sAPI_ImageMapPolygonObject, + sizeof(sAPI_ImageMapPolygonObject)-1)) + { + eType = POLYGON; + break; + } + } + + // return from method if no proper service is found! + DBG_ASSERT(INVALID != eType, + "Image map element doesn't support appropriate service!"); + if (INVALID == eType) + return; + + // now: handle ImageMapObject properties (those for all types) + + // URL property + Any aAny = rPropertySet->getPropertyValue(sURL); + OUString sHref; + aAny >>= sHref; + if (sHref.getLength() > 0) + { + rExport.AddAttribute(XML_NAMESPACE_XLINK, sXML_href, sHref); + } + + // description property + aAny = rPropertySet->getPropertyValue(sDescription); + OUString sDescription; + aAny >>= sDescription; + if (sDescription.getLength() > 0) + { + rExport.AddAttribute(XML_NAMESPACE_DRAW, sXML_description, + sDescription); + } + + // handle name + aAny = rPropertySet->getPropertyValue(sName); + OUString sItemName; + aAny >>= sItemName; + if (sItemName.getLength() > 0) + { + rExport.AddAttribute(XML_NAMESPACE_DRAW, sXML_name, sItemName); + } + + // is-active + aAny = rPropertySet->getPropertyValue(sIsActive); + if (! *(sal_Bool*)aAny.getValue()) + { + rExport.AddAttributeASCII(XML_NAMESPACE_DRAW, sXML_active, + sXML_false); + } + + // call specific rectangle/circle/... method + // also prepare element name + OUString* pElementName = NULL; + switch (eType) + { + case RECTANGLE: + ExportRectangle(rPropertySet); + pElementName = &sAreaRectangle; + break; + case CIRCLE: + ExportCircle(rPropertySet); + pElementName = &sAreaCircle; + break; + case POLYGON: + ExportPolygon(rPropertySet); + pElementName = &sAreaPolygon; + break; + } + + // write element + DBG_ASSERT(NULL != pElementName, "No name?! How did this happen?"); + SvXMLElementExport aAreaElement(rExport, + XML_NAMESPACE_DRAW, *pElementName, + bWhiteSpace, bWhiteSpace); + + // export events attached to this + Reference<XEventsSupplier> xSupplier(rPropertySet, UNO_QUERY); + rExport.GetEventExport().Export(xSupplier, bWhiteSpace); + } + // else: no service info -> can't determine type -> ignore entry +} + +void XMLImageMapExport::ExportRectangle( + const Reference<XPropertySet> & rPropertySet) +{ + // TODO +} + +void XMLImageMapExport::ExportCircle( + const Reference<XPropertySet> & rPropertySet) +{ + // TODO +} + +void XMLImageMapExport::ExportPolygon( + const Reference<XPropertySet> & rPropertySet) +{ + // TODO +} diff --git a/xmloff/source/draw/makefile.mk b/xmloff/source/draw/makefile.mk index 24ba90b79729..3b31bf763f64 100644 --- a/xmloff/source/draw/makefile.mk +++ b/xmloff/source/draw/makefile.mk @@ -2,9 +2,9 @@ # # $RCSfile: makefile.mk,v $ # -# $Revision: 1.11 $ +# $Revision: 1.12 $ # -# last change: $Author: cl $ $Date: 2001-03-04 23:07:53 $ +# last change: $Author: dvo $ $Date: 2001-03-28 10:28:15 $ # # The Contents of this file are made available subject to the terms of # either of the following licenses @@ -100,6 +100,7 @@ SLOFILES = \ $(SLO)$/shapeexport2.obj \ $(SLO)$/shapeexport3.obj \ $(SLO)$/shapeimport.obj \ + $(SLO)$/XMLImageMapExport.obj \ $(SLO)$/XMLShapePropertySetContext.obj \ $(SLO)$/XMLShapeStyleContext.obj \ $(SLO)$/ximppage.obj |