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
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmloff.hxx"
26 #include <tools/debug.hxx>
27 #ifndef _COM_SUN_STAR_DOCUMENT_XEVENTSSUPPLIER_HPP
28 #include <com/sun/star/document/XEventsSupplier.hpp>
29 #endif
30 #include "xmloff/xmlnmspe.hxx"
31 #include <xmloff/xmltoken.hxx>
32 #include "XMLTextPropertySetContext.hxx"
33 #include <xmloff/xmlimp.hxx>
34 #include <xmloff/XMLEventsImportContext.hxx>
35 #include "XMLShapePropertySetContext.hxx"
36 #include "XMLTextColumnsContext.hxx"
37 #include "XMLBackgroundImageContext.hxx"
38 #ifndef _XMLOFF_TXTPRMAP_HXX
39 #include <xmloff/txtprmap.hxx>
40 #endif
41
42 #ifndef _XMLOFF_XMLTEXTSHAPESTYLECONTEXT_HXX
43 #include <xmloff/XMLTextShapeStyleContext.hxx>
44 #endif
45
46 using ::rtl::OUString;
47 using ::rtl::OUStringBuffer;
48
49 using namespace ::com::sun::star::document;
50 using namespace ::com::sun::star::uno;
51 using namespace ::com::sun::star::xml::sax;
52 using namespace ::com::sun::star::style;
53 using namespace ::com::sun::star::beans;
54 using namespace ::xmloff::token;
55
56 class XMLTextShapePropertySetContext_Impl : public XMLShapePropertySetContext
57 {
58 public:
59 XMLTextShapePropertySetContext_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx,
60 const OUString& rLName,
61 const Reference< XAttributeList >& xAttrList,
62 sal_uInt32 nFamily,
63 ::std::vector< XMLPropertyState > &rProps,
64 const UniReference < SvXMLImportPropertyMapper > &rMap );
65
66 virtual ~XMLTextShapePropertySetContext_Impl();
67
68 using SvXMLPropertySetContext::CreateChildContext;
69 virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
70 const OUString& rLocalName,
71 const Reference< XAttributeList >& xAttrList,
72 ::std::vector< XMLPropertyState > &rProperties,
73 const XMLPropertyState& rProp);
74 };
75
XMLTextShapePropertySetContext_Impl(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<XAttributeList> & xAttrList,sal_uInt32 nFamily,::std::vector<XMLPropertyState> & rProps,const UniReference<SvXMLImportPropertyMapper> & rMap)76 XMLTextShapePropertySetContext_Impl::XMLTextShapePropertySetContext_Impl(
77 SvXMLImport& rImport, sal_uInt16 nPrfx,
78 const OUString& rLName,
79 const Reference< XAttributeList > & xAttrList,
80 sal_uInt32 nFamily,
81 ::std::vector< XMLPropertyState > &rProps,
82 const UniReference < SvXMLImportPropertyMapper > &rMap ) :
83 XMLShapePropertySetContext( rImport, nPrfx, rLName, xAttrList, nFamily,
84 rProps, rMap )
85 {
86 }
87
~XMLTextShapePropertySetContext_Impl()88 XMLTextShapePropertySetContext_Impl::~XMLTextShapePropertySetContext_Impl()
89 {
90 }
91
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList,::std::vector<XMLPropertyState> & rProperties,const XMLPropertyState & rProp)92 SvXMLImportContext *XMLTextShapePropertySetContext_Impl::CreateChildContext(
93 sal_uInt16 nPrefix,
94 const OUString& rLocalName,
95 const Reference< XAttributeList > & xAttrList,
96 ::std::vector< XMLPropertyState > &rProperties,
97 const XMLPropertyState& rProp )
98 {
99 SvXMLImportContext *pContext = 0;
100
101 switch( mxMapper->getPropertySetMapper()
102 ->GetEntryContextId( rProp.mnIndex ) )
103 {
104 case CTF_TEXTCOLUMNS:
105 pContext = new XMLTextColumnsContext( GetImport(), nPrefix,
106 rLocalName, xAttrList, rProp,
107 rProperties );
108 break;
109
110 case CTF_BACKGROUND_URL:
111 DBG_ASSERT( rProp.mnIndex >= 3 &&
112 CTF_BACKGROUND_TRANSPARENCY ==
113 mxMapper->getPropertySetMapper()
114 ->GetEntryContextId( rProp.mnIndex-3 ) &&
115 CTF_BACKGROUND_POS == mxMapper->getPropertySetMapper()
116 ->GetEntryContextId( rProp.mnIndex-2 ) &&
117 CTF_BACKGROUND_FILTER == mxMapper->getPropertySetMapper()
118 ->GetEntryContextId( rProp.mnIndex-1 ),
119 "invalid property map!");
120 pContext =
121 new XMLBackgroundImageContext( GetImport(), nPrefix,
122 rLocalName, xAttrList,
123 rProp,
124 rProp.mnIndex-2,
125 rProp.mnIndex-1,
126 rProp.mnIndex-3,
127 rProperties );
128 break;
129 }
130
131 if( !pContext )
132 pContext = XMLShapePropertySetContext::CreateChildContext(
133 nPrefix, rLocalName, xAttrList, rProperties, rProp );
134
135 return pContext;
136 }
137
138 //-----------------------------------------------------------------------------
139
SetAttribute(sal_uInt16 nPrefixKey,const OUString & rLocalName,const OUString & rValue)140 void XMLTextShapeStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
141 const OUString& rLocalName,
142 const OUString& rValue )
143 {
144 if( XML_NAMESPACE_STYLE == nPrefixKey &&
145 IsXMLToken( rLocalName, XML_AUTO_UPDATE ) )
146 {
147 if( IsXMLToken( rValue, XML_TRUE ) )
148 bAutoUpdate = sal_True;
149 }
150 else
151 {
152 XMLShapeStyleContext::SetAttribute( nPrefixKey, rLocalName, rValue );
153 }
154 }
155
156 TYPEINIT1( XMLTextShapeStyleContext, XMLShapeStyleContext );
157
XMLTextShapeStyleContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<XAttributeList> & xAttrList,SvXMLStylesContext & rStyles,sal_uInt16 nFamily,sal_Bool)158 XMLTextShapeStyleContext::XMLTextShapeStyleContext( SvXMLImport& rImport,
159 sal_uInt16 nPrfx, const OUString& rLName,
160 const Reference< XAttributeList > & xAttrList,
161 SvXMLStylesContext& rStyles, sal_uInt16 nFamily,
162 sal_Bool /*bDefaultStyle*/ ) :
163 XMLShapeStyleContext( rImport, nPrfx, rLName, xAttrList, rStyles,
164 nFamily ),
165 sIsAutoUpdate( RTL_CONSTASCII_USTRINGPARAM( "IsAutoUpdate" ) ),
166 bAutoUpdate( sal_False )
167 {
168 }
169
~XMLTextShapeStyleContext()170 XMLTextShapeStyleContext::~XMLTextShapeStyleContext()
171 {
172 }
173
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)174 SvXMLImportContext *XMLTextShapeStyleContext::CreateChildContext(
175 sal_uInt16 nPrefix,
176 const OUString& rLocalName,
177 const Reference< XAttributeList > & xAttrList )
178 {
179 SvXMLImportContext *pContext = 0;
180
181 if( XML_NAMESPACE_STYLE == nPrefix )
182 {
183 sal_uInt32 nFamily = 0;
184 if( IsXMLToken( rLocalName, XML_TEXT_PROPERTIES ) )
185 nFamily = XML_TYPE_PROP_TEXT;
186 else if( IsXMLToken( rLocalName, XML_PARAGRAPH_PROPERTIES ) )
187 nFamily = XML_TYPE_PROP_PARAGRAPH;
188 else if( IsXMLToken( rLocalName, XML_GRAPHIC_PROPERTIES ) )
189 nFamily = XML_TYPE_PROP_GRAPHIC;
190 if( nFamily )
191 {
192 UniReference < SvXMLImportPropertyMapper > xImpPrMap =
193 GetStyles()->GetImportPropertyMapper( GetFamily() );
194 if( xImpPrMap.is() )
195 {
196 pContext = new XMLTextShapePropertySetContext_Impl(
197 GetImport(), nPrefix, rLocalName, xAttrList, nFamily,
198 GetProperties(), xImpPrMap );
199 }
200 }
201 }
202 else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
203 IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) )
204 {
205 // create and remember events import context
206 // (for delayed processing of events)
207 pContext = new XMLEventsImportContext( GetImport(), nPrefix,
208 rLocalName);
209 xEventContext = pContext;
210 }
211
212 if( !pContext )
213 pContext = XMLShapeStyleContext::CreateChildContext( nPrefix, rLocalName,
214 xAttrList );
215
216 return pContext;
217 }
218
CreateAndInsert(sal_Bool bOverwrite)219 void XMLTextShapeStyleContext::CreateAndInsert( sal_Bool bOverwrite )
220 {
221 XMLShapeStyleContext::CreateAndInsert( bOverwrite );
222 Reference < XStyle > xStyle = GetStyle();
223 if( !xStyle.is() || !(bOverwrite || IsNew()) )
224 return;
225
226 Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY );
227 Reference< XPropertySetInfo > xPropSetInfo =
228 xPropSet->getPropertySetInfo();
229 if( xPropSetInfo->hasPropertyByName( sIsAutoUpdate ) )
230 {
231 Any aAny;
232 sal_Bool bTmp = bAutoUpdate;
233 aAny.setValue( &bTmp, ::getBooleanCppuType() );
234 xPropSet->setPropertyValue( sIsAutoUpdate, aAny );
235 }
236
237 // tell the style about it's events (if applicable)
238 if( xEventContext.Is() )
239 {
240 // set event suppplier and release reference to context
241 Reference<XEventsSupplier> xEventsSupplier(xStyle, UNO_QUERY);
242 ((XMLEventsImportContext *)&xEventContext)->SetEvents(xEventsSupplier);
243 xEventContext = 0;
244 }
245 }
246
247
Finish(sal_Bool bOverwrite)248 void XMLTextShapeStyleContext::Finish( sal_Bool bOverwrite )
249 {
250 XMLPropStyleContext::Finish( bOverwrite );
251 }
252