1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #include "precompiled_rptxml.hxx"
24 #include "xmlHelper.hxx"
25 #include <xmloff/xmlnmspe.hxx>
26 #include <xmloff/xmltoken.hxx>
27 #include <xmloff/families.hxx>
28 #include <xmloff/controlpropertyhdl.hxx>
29 #include <connectivity/dbtools.hxx>
30 #include <comphelper/propertysethelper.hxx>
31 #include <comphelper/mediadescriptor.hxx>
32 #include <comphelper/genericpropertyset.hxx>
33 #include <com/sun/star/style/ParagraphAdjust.hpp>
34 #include <com/sun/star/awt/TextAlign.hpp>
35 #include <com/sun/star/beans/PropertyAttribute.hpp>
36 #include <com/sun/star/awt/FontDescriptor.hpp>
37 #include <com/sun/star/awt/TextAlign.hpp>
38 #include <com/sun/star/awt/ImagePosition.hpp>
39 #include <com/sun/star/awt/ImageScaleMode.hpp>
40 #include <xmloff/prstylei.hxx>
41 #include "xmlstrings.hrc"
42 #include "xmlEnums.hxx"
43 #include <xmloff/contextid.hxx>
44 #include <xmloff/txtprmap.hxx>
45 #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
46 #include <com/sun/star/table/BorderLine.hpp>
47 #include <xmloff/XMLConstantsPropertyHandler.hxx>
48 #include <com/sun/star/report/ForceNewPage.hpp>
49 #include <com/sun/star/report/ReportPrintOption.hpp>
50 #include <com/sun/star/report/GroupOn.hpp>
51 #include <com/sun/star/report/KeepTogether.hpp>
52 #include <xmloff/xmlement.hxx>
53 #include <com/sun/star/report/XReportControlFormat.hpp>
54 #include <com/sun/star/form/ListSourceType.hpp>
55 #include <com/sun/star/sdb/CommandType.hpp>
56 #include <com/sun/star/style/VerticalAlignment.hpp>
57 #include <xmloff/EnumPropertyHdl.hxx>
58 
59 #define XML_RPT_ALGINMENT   (XML_DB_TYPES_START+1)
60 namespace rptxml
61 {
62 	using namespace ::xmloff::token;
63 	using namespace ::com::sun::star::awt;
64 	using namespace ::com::sun::star;
65 	using namespace ::com::sun::star::sdb;
66 	using namespace ::com::sun::star::form;
67     using namespace ::com::sun::star::beans;
DBG_NAME(rpt_OPropertyHandlerFactory)68 DBG_NAME(rpt_OPropertyHandlerFactory)
69 OPropertyHandlerFactory::OPropertyHandlerFactory()
70 {
71     DBG_CTOR(rpt_OPropertyHandlerFactory,NULL);
72 }
73 // -----------------------------------------------------------------------------
~OPropertyHandlerFactory()74 OPropertyHandlerFactory::~OPropertyHandlerFactory()
75 {
76     DBG_DTOR(rpt_OPropertyHandlerFactory,NULL);
77 }
78 // -----------------------------------------------------------------------------
GetPropertyHandler(sal_Int32 _nType) const79 const XMLPropertyHandler* OPropertyHandlerFactory::GetPropertyHandler(sal_Int32 _nType) const
80 {
81 	const XMLPropertyHandler* pHandler = NULL;
82     sal_Int32 nType = _nType;
83     nType &= MID_FLAG_MASK;
84 
85     switch(nType)
86     {
87         case XML_RPT_ALGINMENT:
88             {
89                 static SvXMLEnumMapEntry __READONLY_DATA pXML_VerticalAlign_Enum[] =
90                 {
91 	                { XML_TOP,			style::VerticalAlignment_TOP },
92 	                { XML_MIDDLE,		style::VerticalAlignment_MIDDLE },
93 	                { XML_BOTTOM,		style::VerticalAlignment_BOTTOM },
94 	                { XML_TOKEN_INVALID, 0 }
95                 };
96 
97 			    pHandler = new XMLEnumPropertyHdl( pXML_VerticalAlign_Enum, ::getCppuType((const com::sun::star::style::VerticalAlignment*)0) );
98             }
99 			break;
100         case (XML_SD_TYPES_START+34):
101             pHandler = new xmloff::ImageScaleModeHandler();
102         default:
103             ;
104     }
105 
106 	if ( !pHandler )
107 		pHandler = OControlPropertyHandlerFactory::GetPropertyHandler(_nType);
108     else
109         PutHdlCache(nType, pHandler);
110 	return pHandler;
111 }
112 // -----------------------------------------------------------------------------
113 #define MAP_CONST( name, prefix, token, type, context )  { name.ascii, name.length,	    XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_TEXT,       context, SvtSaveOptions::ODFVER_010 }
114 #define MAP_CONST_T( name, prefix, token, type, context )  { name.ascii, name.length,	XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_TABLE,      context, SvtSaveOptions::ODFVER_010 }
115 #define MAP_CONST_ASCII_T( name, prefix, token, type, context )  { name, sizeof(name)-1,XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_TABLE,      context, SvtSaveOptions::ODFVER_010 }
116 #define MAP_CONST_P( name, prefix, token, type, context )  { name.ascii, name.length,	XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_PARAGRAPH,  context, SvtSaveOptions::ODFVER_010 }
117 #define MAP_CONST_S( name, prefix, token, type, context )  { name, sizeof(name)-1,	    XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_SECTION,    context, SvtSaveOptions::ODFVER_010 }
118 #define MAP_CONST_ASCII( name, prefix, token, type, context )  { name, sizeof(name)-1,	XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_TEXT,       context, SvtSaveOptions::ODFVER_010 }
119 #define GMAP( name, prefix, token, type, context )  { name.ascii, name.length,	        XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_GRAPHIC,    context, SvtSaveOptions::ODFVER_010 }
120 #define MAP_CONST_C_ASCII( name, prefix, token, type, context ) { name, sizeof(name)-1,	XML_NAMESPACE_##prefix, XML_##token, type|XML_TYPE_PROP_TABLE_CELL, context, SvtSaveOptions::ODFVER_010 }
121 #define MAP_CONST_C( name, prefix, token, type, context )  { name, name.length,	        XML_NAMESPACE_##prefix, XML_##token, static_cast<sal_Int32>(type|XML_TYPE_PROP_TABLE_CELL), context, SvtSaveOptions::ODFVER_010 }
122 #define MAP_END() { NULL, 0, 0, XML_TOKEN_INVALID, 0 ,0, SvtSaveOptions::ODFVER_010}
123 // -----------------------------------------------------------------------------
GetCellStylePropertyMap(bool _bOldFormat)124 UniReference < XMLPropertySetMapper > OXMLHelper::GetCellStylePropertyMap(bool _bOldFormat)
125 {
126     if ( _bOldFormat )
127     {
128         static const XMLPropertyMapEntry s_aXMLCellStylesProperties[] =
129         {
130             MAP_CONST_C(      PROPERTY_FORMATKEY,      STYLE,     DATA_STYLE_NAME,        XML_TYPE_NUMBER | MID_FLAG_SPECIAL_ITEM, CTF_RPT_NUMBERFORMAT ),
131 
132             MAP_CONST_C(      PROPERTY_CONTROLBACKGROUND,
133                                                 FO,	  BACKGROUND_COLOR,		XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
134             MAP_CONST_C(      PROPERTY_VERTICALALIGN,   STYLE,	  VERTICAL_ALIGN,	    XML_RPT_ALGINMENT, 0 ),
135             MAP_CONST_C(      PROPERTY_CONTROLBACKGROUNDTRANSPARENT,
136                                                 FO,	  BACKGROUND_COLOR,		XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
137             MAP_CONST_P(      PROPERTY_CONTROLBACKGROUND,
138                                                 FO,	  BACKGROUND_COLOR,		XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
139             MAP_CONST_P(      PROPERTY_CONTROLBACKGROUNDTRANSPARENT,
140                                                 FO,	  BACKGROUND_COLOR,		XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
141             MAP_CONST_C_ASCII(      "BorderLeft",       FO,     BORDER_LEFT,           XML_TYPE_BORDER, 0 ),
142             MAP_CONST_C_ASCII(      "BorderRight",      FO,     BORDER_RIGHT,          XML_TYPE_BORDER, 0 ),
143             MAP_CONST_C_ASCII(      "BorderTop",        FO,     BORDER_TOP,            XML_TYPE_BORDER, 0 ),
144             MAP_CONST_C_ASCII(      "BorderBottom",     FO,     BORDER_BOTTOM,         XML_TYPE_BORDER, 0 ),
145             MAP_END()
146         };
147         return new XMLPropertySetMapper((XMLPropertyMapEntry*)s_aXMLCellStylesProperties,new OPropertyHandlerFactory());
148     }
149     else
150     {
151         static const XMLPropertyMapEntry s_aXMLCellStylesProperties[] =
152         {
153             MAP_CONST_C(      PROPERTY_FORMATKEY,      STYLE,     DATA_STYLE_NAME,        XML_TYPE_NUMBER | MID_FLAG_SPECIAL_ITEM, CTF_RPT_NUMBERFORMAT ),
154 
155             MAP_CONST_C(      PROPERTY_CONTROLBACKGROUND,
156                                                 FO,	  BACKGROUND_COLOR,		XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
157             MAP_CONST_C(      PROPERTY_CONTROLBACKGROUNDTRANSPARENT,
158                                                 FO,	  BACKGROUND_COLOR,		XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
159             MAP_CONST_C(      PROPERTY_VERTICALALIGN,
160                                                 STYLE,	  VERTICAL_ALIGN,		XML_RPT_ALGINMENT, 0 ),
161             MAP_CONST_C_ASCII(      "BorderLeft",       FO,     BORDER_LEFT,           XML_TYPE_BORDER, 0 ),
162             MAP_CONST_C_ASCII(      "BorderRight",      FO,     BORDER_RIGHT,          XML_TYPE_BORDER, 0 ),
163             MAP_CONST_C_ASCII(      "BorderTop",        FO,     BORDER_TOP,            XML_TYPE_BORDER, 0 ),
164             MAP_CONST_C_ASCII(      "BorderBottom",     FO,     BORDER_BOTTOM,         XML_TYPE_BORDER, 0 ),
165             MAP_END()
166         };
167         return new XMLPropertySetMapper((XMLPropertyMapEntry*)s_aXMLCellStylesProperties,new OPropertyHandlerFactory());
168     }
169 }
170 // -----------------------------------------------------------------------------
GetTableStyleProps()171 const XMLPropertyMapEntry* OXMLHelper::GetTableStyleProps()
172 {
173     static const XMLPropertyMapEntry aXMLTableStylesProperties[] =
174     {
175         MAP_CONST_T(  PROPERTY_BACKCOLOR,      FO,     BACKGROUND_COLOR,        XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
176         MAP_CONST_T(  PROPERTY_BACKTRANSPARENT,FO,     BACKGROUND_COLOR,        XML_TYPE_ISTRANSPARENT | MID_FLAG_MERGE_ATTRIBUTE, 0 ),
177         // MAP_CONST_T(  PROPERTY_KEEPTOGETHER,   STYLE,  MAY_BREAK_BETWEEN_ROWS,  XML_TYPE_BOOL     , 0 ),
178         MAP_END()
179     };
180     return aXMLTableStylesProperties;
181 }
182 // -----------------------------------------------------------------------------
GetRowStyleProps()183 const XMLPropertyMapEntry* OXMLHelper::GetRowStyleProps()
184 {
185     static const XMLPropertyMapEntry aXMLStylesProperties[] =
186     {
187         MAP_CONST_S( "Height", STYLE, ROW_HEIGHT, XML_TYPE_PROP_TABLE_ROW|XML_TYPE_MEASURE, 0),
188         MAP_END()
189     };
190     return aXMLStylesProperties;
191 }
192 // -----------------------------------------------------------------------------
GetColumnStyleProps()193 const XMLPropertyMapEntry* OXMLHelper::GetColumnStyleProps()
194 {
195     static const XMLPropertyMapEntry aXMLColumnStylesProperties[] =
196     {
197 	    //MAP( "IsManualPageBreak", XML_NAMESPACE_FO, XML_BREAK_BEFORE, XML_TYPE_PROP_TABLE_COLUMN|XML_SC_TYPE_BREAKBEFORE, 0),
198 	    //MAP( "IsVisible", XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TYPE_PROP_TABLE_COLUMN|XML_SC_TYPE_EQUAL|MID_FLAG_SPECIAL_ITEM, CTF_SC_ISVISIBLE ),
199 	    MAP_CONST_S(    "Width",                 STYLE,     COLUMN_WIDTH,           XML_TYPE_PROP_TABLE_COLUMN|XML_TYPE_MEASURE, 0 ),
200     //	MAP( "OptimalWidth", XML_NAMESPACE_STYLE, XML_USE_OPTIMAL_COLUMN_WIDTH, XML_TYPE_PROP_TABLE_COLUMN|XML_TYPE_BOOL, 0),
201         MAP_END()
202     };
203     return aXMLColumnStylesProperties;
204 }
205 // -----------------------------------------------------------------------------
GetReportPrintOptions()206 const SvXMLEnumMapEntry* OXMLHelper::GetReportPrintOptions()
207 {
208 	static SvXMLEnumMapEntry s_aXML_EnumMap[] =
209 	{
210 		 // { XML_ALL_PAGES,							report::ReportPrintOption::ALL_PAGES }, // default
211 		{ XML_NOT_WITH_REPORT_HEADER,				report::ReportPrintOption::NOT_WITH_REPORT_HEADER },
212 		{ XML_NOT_WITH_REPORT_FOOTER,				report::ReportPrintOption::NOT_WITH_REPORT_FOOTER },
213 		{ XML_NOT_WITH_REPORT_HEADER_NOR_FOOTER,	report::ReportPrintOption::NOT_WITH_REPORT_HEADER_FOOTER },
214 		{ XML_TOKEN_INVALID, 0 }
215 	};
216 	return s_aXML_EnumMap;
217 }
218 // -----------------------------------------------------------------------------
GetForceNewPageOptions()219 const SvXMLEnumMapEntry* OXMLHelper::GetForceNewPageOptions()
220 {
221 	static SvXMLEnumMapEntry s_aXML_EnumMap[] =
222 	{
223 		// { XML_NONE,					report::ForceNewPage::NONE }, // default
224 		{ XML_BEFORE_SECTION,		report::ForceNewPage::BEFORE_SECTION },
225 		{ XML_AFTER_SECTION,		report::ForceNewPage::AFTER_SECTION },
226 		{ XML_BEFORE_AFTER_SECTION,	report::ForceNewPage::BEFORE_AFTER_SECTION },
227 		{ XML_TOKEN_INVALID, 0 }
228 	};
229 	return s_aXML_EnumMap;
230 }
231 // -----------------------------------------------------------------------------
GetKeepTogetherOptions()232 const SvXMLEnumMapEntry* OXMLHelper::GetKeepTogetherOptions()
233 {
234 	static SvXMLEnumMapEntry s_aXML_EnumMap[] =
235 	{
236 		// { XML_NO,					report::KeepTogether::NO }, // default
237 		{ XML_WHOLE_GROUP,			report::KeepTogether::WHOLE_GROUP },
238 		{ XML_WITH_FIRST_DETAIL,	report::KeepTogether::WITH_FIRST_DETAIL },
239 		{ XML_TOKEN_INVALID, 0 }
240 	};
241 	return s_aXML_EnumMap;
242 }
243 // -----------------------------------------------------------------------------
GetCommandTypeOptions()244 const SvXMLEnumMapEntry* OXMLHelper::GetCommandTypeOptions()
245 {
246 	static SvXMLEnumMapEntry s_aXML_EnumMap[] =
247 	{
248 		{ XML_TABLE, CommandType::TABLE },
249 		{ XML_QUERY, CommandType::QUERY },
250 		// { XML_COMMAND, CommandType::COMMAND }, // default
251 		{ XML_TOKEN_INVALID, 0 }
252 	};
253 	return s_aXML_EnumMap;
254 }
255 // -----------------------------------------------------------------------------
256 #define PROPERTY_ID_FONTNAME  		 1
257 #define PROPERTY_ID_FONTHEIGHT  	 2
258 #define PROPERTY_ID_FONTWIDTH  		 3
259 #define PROPERTY_ID_FONTSTYLENAME  	 4
260 #define PROPERTY_ID_FONTFAMILY  	 5
261 #define PROPERTY_ID_FONTCHARSET  	 6
262 #define PROPERTY_ID_FONTPITCH  		 7
263 #define PROPERTY_ID_FONTCHARWIDTH  	 8
264 #define PROPERTY_ID_FONTWEIGHT  	 9
265 #define PROPERTY_ID_FONTSLANT  	 	 10
266 #define PROPERTY_ID_FONTUNDERLINE  	 11
267 #define PROPERTY_ID_FONTSTRIKEOUT  	 12
268 #define PROPERTY_ID_FONTORIENTATION  13
269 #define PROPERTY_ID_FONTKERNING  	 14
270 #define PROPERTY_ID_FONTWORDLINEMODE 15
271 #define PROPERTY_ID_FONTTYPE  		 16
copyStyleElements(const bool _bOld,const::rtl::OUString & _sStyleName,const SvXMLStylesContext * _pAutoStyles,const uno::Reference<beans::XPropertySet> & _xProp)272 void OXMLHelper::copyStyleElements(const bool _bOld,const ::rtl::OUString& _sStyleName,const SvXMLStylesContext* _pAutoStyles,const uno::Reference<beans::XPropertySet>& _xProp)
273 {
274     if ( !_xProp.is() || !_sStyleName.getLength() || !_pAutoStyles )
275         return;
276     XMLPropStyleContext* pAutoStyle = PTR_CAST(XMLPropStyleContext,_pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_TABLE_CELL,_sStyleName));
277 	if ( pAutoStyle )
278 	{
279 		::com::sun::star::awt::FontDescriptor aFont;
280         static comphelper::PropertyMapEntry pMap[] =
281 		{
282 			{PROPERTY_FONTNAME,			static_cast<sal_uInt16>(PROPERTY_FONTNAME.length),			PROPERTY_ID_FONTNAME,			&::getCppuType(&aFont.Name)			,PropertyAttribute::BOUND,0},
283 			{PROPERTY_CHARFONTHEIGHT,	static_cast<sal_uInt16>(PROPERTY_CHARFONTHEIGHT.length),	PROPERTY_ID_FONTHEIGHT,			&::getCppuType(&aFont.Height)		,PropertyAttribute::BOUND,0},
284 			{PROPERTY_FONTWIDTH,		static_cast<sal_uInt16>(PROPERTY_FONTWIDTH.length),			PROPERTY_ID_FONTWIDTH,		 	&::getCppuType(&aFont.Width)		,PropertyAttribute::BOUND,0},
285 			{PROPERTY_FONTSTYLENAME,	static_cast<sal_uInt16>(PROPERTY_FONTSTYLENAME.length),		PROPERTY_ID_FONTSTYLENAME,	 	&::getCppuType(&aFont.StyleName)	,PropertyAttribute::BOUND,0},
286 			{PROPERTY_FONTFAMILY,		static_cast<sal_uInt16>(PROPERTY_FONTFAMILY.length),		PROPERTY_ID_FONTFAMILY,			&::getCppuType(&aFont.Family)		,PropertyAttribute::BOUND,0},
287 			{PROPERTY_FONTCHARSET,		static_cast<sal_uInt16>(PROPERTY_FONTCHARSET.length),		PROPERTY_ID_FONTCHARSET,	 	&::getCppuType(&aFont.CharSet)		,PropertyAttribute::BOUND,0},
288 			{PROPERTY_FONTPITCH,		static_cast<sal_uInt16>(PROPERTY_FONTPITCH.length),			PROPERTY_ID_FONTPITCH,		 	&::getCppuType(&aFont.Pitch)		,PropertyAttribute::BOUND,0},
289 			{PROPERTY_FONTCHARWIDTH,	static_cast<sal_uInt16>(PROPERTY_FONTCHARWIDTH.length),		PROPERTY_ID_FONTCHARWIDTH,	 	&::getCppuType(&aFont.CharacterWidth),PropertyAttribute::BOUND,0},
290 			{PROPERTY_FONTWEIGHT,		static_cast<sal_uInt16>(PROPERTY_FONTWEIGHT.length),		PROPERTY_ID_FONTWEIGHT,			&::getCppuType(&aFont.Weight)		,PropertyAttribute::BOUND,0},
291 			{PROPERTY_CHARPOSTURE,		static_cast<sal_uInt16>(PROPERTY_CHARPOSTURE.length),		PROPERTY_ID_FONTSLANT,  	 	&::getCppuType(&aFont.Slant)		,PropertyAttribute::BOUND,0},
292 			{PROPERTY_FONTUNDERLINE,	static_cast<sal_uInt16>(PROPERTY_FONTUNDERLINE.length),		PROPERTY_ID_FONTUNDERLINE,	 	&::getCppuType(&aFont.Underline)	,PropertyAttribute::BOUND,0},
293 			{PROPERTY_CHARSTRIKEOUT,	static_cast<sal_uInt16>(PROPERTY_CHARSTRIKEOUT.length),		PROPERTY_ID_FONTSTRIKEOUT,	 	&::getCppuType(&aFont.Strikeout)	,PropertyAttribute::BOUND,0},
294 			{PROPERTY_FONTORIENTATION,	static_cast<sal_uInt16>(PROPERTY_FONTORIENTATION.length),	PROPERTY_ID_FONTORIENTATION,	&::getCppuType(&aFont.Orientation)	,PropertyAttribute::BOUND,0},
295 			{PROPERTY_FONTKERNING,		static_cast<sal_uInt16>(PROPERTY_FONTKERNING.length),		PROPERTY_ID_FONTKERNING,		&::getCppuType(&aFont.Kerning)		,PropertyAttribute::BOUND,0},
296 			{PROPERTY_CHARWORDMODE,     static_cast<sal_uInt16>(PROPERTY_CHARWORDMODE.length),	    PROPERTY_ID_FONTWORDLINEMODE,	&::getCppuType(&aFont.WordLineMode)	,PropertyAttribute::BOUND,0},
297 			{PROPERTY_FONTTYPE,			static_cast<sal_uInt16>(PROPERTY_FONTTYPE.length),			PROPERTY_ID_FONTTYPE,			&::getCppuType(&aFont.Type)			,PropertyAttribute::BOUND,0},
298 			//{PROPERTY_BACKGROUNDCOLOR,	static_cast<sal_uInt16>(PROPERTY_BACKGROUNDCOLOR.length),	PROPERTY_ID_BACKGROUNDCOLOR,	&::getCppuType(&nBackgroundColor)	,PropertyAttribute::BOUND,0},,
299 			//{PROPERTY_PARAADJUST,			static_cast<sal_uInt16>(PROPERTY_PARAADJUST.length),				PROPERTY_ID_ALIGN,				&::getCppuType(&nAlign)				,PropertyAttribute::BOUND,0},,
300 			//{PROPERTY_CONTROLBORDER,			static_cast<sal_uInt16>(PROPERTY_CONTROLBORDER.length),			PROPERTY_ID_BORDER,				&::getCppuType(&aFont.Type)			,PropertyAttribute::BOUND,0},,
301 			//{PROPERTY_CONTROLBORDERCOLOR,		static_cast<sal_uInt16>(PROPERTY_CONTROLBORDERCOLOR.length),		PROPERTY_ID_BORDERCOLOR,		&::getCppuType(&aFont.Type)			,PropertyAttribute::BOUND,0},,
302 			//{PROPERTY_CHARCOLOR,		static_cast<sal_uInt16>(PROPERTY_TEXTCOLOR.length),			PROPERTY_ID_TEXTCOLOR,			&::getCppuType(&aFont.Type)			,PropertyAttribute::BOUND,0},,
303 			//{PROPERTY_FORMATKEY,		static_cast<sal_uInt16>(PROPERTY_FORMATKEY.length),			PROPERTY_ID_FORMATKEY,			&::getCppuType(&aFont.Type)			,PropertyAttribute::BOUND,0},,
304 			//{PROPERTY_CHARUNDERLINECOLOR,	static_cast<sal_uInt16>(PROPERTY_CHARUNDERLINECOLOR.length),		PROPERTY_ID_TEXTLINECOLOR,		&::getCppuType(&aFont.Type)			,PropertyAttribute::BOUND,0},,
305 			{ NULL, 0, 0, NULL, 0, 0 }
306 		};
307         try
308 	    {
309             pAutoStyle->FillPropertySet(_xProp);
310             if ( _bOld && _xProp->getPropertySetInfo()->hasPropertyByName(PROPERTY_CHARHIDDEN) )
311                 _xProp->setPropertyValue(PROPERTY_CHARHIDDEN,uno::makeAny(sal_False));
312 
313             uno::Reference<beans::XPropertySet> xProp = comphelper::GenericPropertySet_CreateInstance(new comphelper::PropertySetInfo(pMap));
314 		    pAutoStyle->FillPropertySet(xProp);
315 		    xProp->getPropertyValue(PROPERTY_FONTNAME) >>= 			aFont.Name;
316 		    xProp->getPropertyValue(PROPERTY_CHARFONTHEIGHT) >>= 		aFont.Height;
317 		    xProp->getPropertyValue(PROPERTY_FONTWIDTH) >>= 			aFont.Width;
318 		    xProp->getPropertyValue(PROPERTY_FONTSTYLENAME) >>= 		aFont.StyleName;
319 		    xProp->getPropertyValue(PROPERTY_FONTFAMILY) >>= 		aFont.Family;
320 		    xProp->getPropertyValue(PROPERTY_FONTCHARSET) >>= 		aFont.CharSet;
321 		    xProp->getPropertyValue(PROPERTY_FONTPITCH) >>= 			aFont.Pitch;
322 		    xProp->getPropertyValue(PROPERTY_FONTCHARWIDTH) >>= 		aFont.CharacterWidth;
323 		    xProp->getPropertyValue(PROPERTY_FONTWEIGHT) >>= 		aFont.Weight;
324 		    xProp->getPropertyValue(PROPERTY_CHARPOSTURE) >>= 			aFont.Slant;
325 		    xProp->getPropertyValue(PROPERTY_FONTUNDERLINE) >>= 		aFont.Underline;
326 		    xProp->getPropertyValue(PROPERTY_CHARSTRIKEOUT) >>= 		aFont.Strikeout;
327 		    xProp->getPropertyValue(PROPERTY_FONTORIENTATION) >>= 	aFont.Orientation;
328 		    xProp->getPropertyValue(PROPERTY_FONTKERNING) >>= 		aFont.Kerning;
329 		    xProp->getPropertyValue(PROPERTY_CHARWORDMODE) >>= 	aFont.WordLineMode;
330 		    xProp->getPropertyValue(PROPERTY_FONTTYPE) >>= 			aFont.Type;
331             uno::Reference<report::XReportControlFormat> xReportControlModel(_xProp,uno::UNO_QUERY);
332 		    if ( xReportControlModel.is() && aFont.Name.getLength() )
333             {
334 			    try
335 			    {
336 				    xReportControlModel->setFontDescriptor(aFont);
337 			    }
338 			    catch(beans::UnknownPropertyException){}
339             }
340        	}
341         catch(uno::Exception&)
342 	    {
343 		    OSL_ENSURE(0,"OXMLHelper::copyStyleElements -> exception catched");
344 	    }
345 	}
346 }
347 // -----------------------------------------------------------------------------
createBorderPropertySet()348 uno::Reference<beans::XPropertySet> OXMLHelper::createBorderPropertySet()
349 {
350     static comphelper::PropertyMapEntry pMap[] =
351 	{
352 		{PROPERTY_BORDERLEFT,  	static_cast<sal_uInt16>(PROPERTY_BORDERLEFT.length),		0,			&::getCppuType((const table::BorderLine*)0)			,PropertyAttribute::BOUND,0},
353 		{PROPERTY_BORDERRIGHT, 	static_cast<sal_uInt16>(PROPERTY_BORDERRIGHT.length),		1,			&::getCppuType((const table::BorderLine*)0)			,PropertyAttribute::BOUND,0},
354         {PROPERTY_BORDERTOP,   	static_cast<sal_uInt16>(PROPERTY_BORDERTOP.length),		    2,			&::getCppuType((const table::BorderLine*)0)			,PropertyAttribute::BOUND,0},
355         {PROPERTY_BORDERBOTTOM,	static_cast<sal_uInt16>(PROPERTY_BORDERBOTTOM.length),		3,			&::getCppuType((const table::BorderLine*)0)			,PropertyAttribute::BOUND,0},
356         { NULL, 0, 0, NULL, 0, 0 }
357     };
358     return comphelper::GenericPropertySet_CreateInstance(new comphelper::PropertySetInfo(pMap));
359 }
360 // -----------------------------------------------------------------------------
GetReportElemTokenMap()361 SvXMLTokenMap* OXMLHelper::GetReportElemTokenMap()
362 {
363 	static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
364 	{
365 		{ XML_NAMESPACE_REPORT,	XML_REPORT_HEADER,				XML_TOK_REPORT_HEADER	        },
366 		{ XML_NAMESPACE_REPORT,	XML_PAGE_HEADER	,				XML_TOK_PAGE_HEADER		        },
367         { XML_NAMESPACE_REPORT,	XML_GROUP,	                    XML_TOK_GROUP                   },
368 		{ XML_NAMESPACE_REPORT,	XML_DETAIL		,				XML_TOK_DETAIL			        },
369 		{ XML_NAMESPACE_REPORT,	XML_PAGE_FOOTER	,				XML_TOK_PAGE_FOOTER		        },
370 		{ XML_NAMESPACE_REPORT,	XML_REPORT_FOOTER,				XML_TOK_REPORT_FOOTER	        },
371 		{ XML_NAMESPACE_REPORT,	XML_HEADER_ON_NEW_PAGE,			XML_TOK_HEADER_ON_NEW_PAGE		},
372 		{ XML_NAMESPACE_REPORT,	XML_FOOTER_ON_NEW_PAGE,			XML_TOK_FOOTER_ON_NEW_PAGE		},
373 		{ XML_NAMESPACE_REPORT,	XML_COMMAND_TYPE,				XML_TOK_COMMAND_TYPE			},
374 		{ XML_NAMESPACE_REPORT,	XML_COMMAND,					XML_TOK_COMMAND					},
375 		{ XML_NAMESPACE_REPORT,	XML_FILTER,				        XML_TOK_FILTER			        },
376         { XML_NAMESPACE_REPORT,	XML_CAPTION,				    XML_TOK_CAPTION			        },
377 		{ XML_NAMESPACE_REPORT,	XML_ESCAPE_PROCESSING,			XML_TOK_ESCAPE_PROCESSING		},
378         { XML_NAMESPACE_REPORT,	XML_FUNCTION,			        XML_TOK_REPORT_FUNCTION 		},
379         { XML_NAMESPACE_OFFICE,	XML_MIMETYPE,			        XML_TOK_REPORT_MIMETYPE 		},
380         { XML_NAMESPACE_DRAW,	XML_NAME,			            XML_TOK_REPORT_NAME 		    },
381         { XML_NAMESPACE_REPORT,	XML_MASTER_DETAIL_FIELDS,	    XML_TOK_MASTER_DETAIL_FIELDS    },
382         { XML_NAMESPACE_DRAW,	XML_FRAME,	                    XML_TOK_SUB_FRAME               },
383 		XML_TOKEN_MAP_END
384 	};
385     return new SvXMLTokenMap( aElemTokenMap );
386 }
387 // -----------------------------------------------------------------------------
GetSubDocumentElemTokenMap()388 SvXMLTokenMap* OXMLHelper::GetSubDocumentElemTokenMap()
389 {
390 	static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
391 	{
392         { XML_NAMESPACE_REPORT,	XML_MASTER_DETAIL_FIELD,	XML_TOK_MASTER_DETAIL_FIELD},
393         { XML_NAMESPACE_REPORT,	XML_MASTER,	                XML_TOK_MASTER},
394         { XML_NAMESPACE_REPORT,	XML_DETAIL,	                XML_TOK_SUB_DETAIL},
395 		XML_TOKEN_MAP_END
396 	};
397 	return new SvXMLTokenMap( aElemTokenMap );
398 }
399 // -----------------------------------------------------------------------------
GetImageScaleOptions()400 const SvXMLEnumMapEntry* OXMLHelper::GetImageScaleOptions()
401 {
402        static SvXMLEnumMapEntry s_aXML_EnumMap[] =
403        {
404                // { XML_NONE,          awt::ImageScaleMode::NONE }, // default
405                { XML_ISOTROPIC,        awt::ImageScaleMode::ISOTROPIC },
406                { XML_ANISOTROPIC,      awt::ImageScaleMode::ANISOTROPIC },
407                { XML_TOKEN_INVALID, 0 }
408        };
409        return s_aXML_EnumMap;
410 }
411 // -----------------------------------------------------------------------------
412 // -----------------------------------------------------------------------------
413 } // rptxml
414 // -----------------------------------------------------------------------------
415