xref: /AOO41X/main/xmloff/source/text/XMLTextShapeStyleContext.cxx (revision 63bba73cc51e0afb45f8a8d578158724bb5afee8)
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