From c99c85df83ece883bd957eb144b06f5ee90d1938 Mon Sep 17 00:00:00 2001 From: Daniel Vogelheim Date: Wed, 28 Mar 2001 09:28:16 +0000 Subject: - added: image map export (preliminary; not completed yet) - added: member at SvXMLExport (image map export) - added: member at SvXMLImport (image map import; not implemented yet) --- xmloff/source/core/xmlexp.cxx | 23 +- xmloff/source/core/xmlimp.cxx | 8 +- xmloff/source/draw/XMLImageMapExport.cxx | 348 +++++++++++++++++++++++++++++++ xmloff/source/draw/makefile.mk | 5 +- 4 files changed, 378 insertions(+), 6 deletions(-) create mode 100644 xmloff/source/draw/XMLImageMapExport.cxx (limited to 'xmloff/source') 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 @@ -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 +#endif + +#ifndef _TOOLS_DEBUG_HXX +#include +#endif + +#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_ +#include +#endif + +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_H_ +#include +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XINDEXCONTAINER_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_DOCUMENT_XEVENTSSUPPLIER_HPP +#include +#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 & rPropertySet ) +{ + if (rPropertySet->getPropertySetInfo()->hasPropertyByName(sImageMap)) + { + Any aAny = rPropertySet->getPropertyValue(sImageMap); + Reference aContainer; + aAny >>= aContainer; + + Export(aContainer); + } + // else: no ImageMap property -> nothing to do +} + +void XMLImageMapExport::Export( + const Reference & 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 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 & 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(rPropertySet, UNO_QUERY); + if (xServiceInfo.is()) + { + enum MapEntryType eType = INVALID; + + // distinguish map entries by their service name + Sequence sServiceNames = + xServiceInfo->getSupportedServiceNames(); + sal_Int32 nLength = sServiceNames.getLength(); + sal_Bool bFound = sal_False; + for( sal_Int32 i=0; igetPropertyValue(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 xSupplier(rPropertySet, UNO_QUERY); + rExport.GetEventExport().Export(xSupplier, bWhiteSpace); + } + // else: no service info -> can't determine type -> ignore entry +} + +void XMLImageMapExport::ExportRectangle( + const Reference & rPropertySet) +{ + // TODO +} + +void XMLImageMapExport::ExportCircle( + const Reference & rPropertySet) +{ + // TODO +} + +void XMLImageMapExport::ExportPolygon( + const Reference & 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 -- cgit