xref: /AOO41X/main/xmloff/source/forms/officeforms.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 "officeforms.hxx"
27 #include <xmloff/xmluconv.hxx>
28 #include <xmloff/xmltoken.hxx>
29 #include "xmloff/xmlnmspe.hxx"
30 #include <xmloff/xmlexp.hxx>
31 #include <xmloff/xmlimp.hxx>
32 #include <xmloff/nmspmap.hxx>
33 #include <comphelper/extract.hxx>
34 #include "strings.hxx"
35 #include <rtl/logfile.hxx>
36 
37 //.........................................................................
38 namespace xmloff
39 {
40 //.........................................................................
41 
42     using namespace ::com::sun::star::uno;
43     using namespace ::com::sun::star::beans;
44     using namespace ::com::sun::star::frame;
45     using namespace ::com::sun::star::xml;
46     using ::xmloff::token::XML_FORMS;
47 
48     //=========================================================================
49     //= OFormsRootImport
50     //=========================================================================
51     TYPEINIT1(OFormsRootImport, SvXMLImportContext);
52     //-------------------------------------------------------------------------
OFormsRootImport(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLocalName)53     OFormsRootImport::OFormsRootImport( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName )
54         :SvXMLImportContext(rImport, nPrfx, rLocalName)
55     {
56     }
57 
58     //-------------------------------------------------------------------------
~OFormsRootImport()59     OFormsRootImport::~OFormsRootImport()
60     {
61     }
62 
63     //-------------------------------------------------------------------------
CreateChildContext(sal_uInt16 _nPrefix,const::rtl::OUString & _rLocalName,const Reference<sax::XAttributeList> & xAttrList)64     SvXMLImportContext* OFormsRootImport::CreateChildContext( sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName,
65             const Reference< sax::XAttributeList>& xAttrList )
66     {
67         return GetImport().GetFormImport()->createContext( _nPrefix, _rLocalName, xAttrList );
68     }
69 
70     //-------------------------------------------------------------------------
implImportBool(const Reference<sax::XAttributeList> & _rxAttributes,OfficeFormsAttributes _eAttribute,const Reference<XPropertySet> & _rxProps,const Reference<XPropertySetInfo> & _rxPropInfo,const::rtl::OUString & _rPropName,sal_Bool _bDefault)71     void OFormsRootImport::implImportBool(const Reference< sax::XAttributeList >& _rxAttributes, OfficeFormsAttributes _eAttribute,
72             const Reference< XPropertySet >& _rxProps, const Reference< XPropertySetInfo >& _rxPropInfo,
73             const ::rtl::OUString& _rPropName, sal_Bool _bDefault)
74     {
75         // the complete attribute name to look for
76         ::rtl::OUString sCompleteAttributeName = GetImport().GetNamespaceMap().GetQNameByIndex(
77             OAttributeMetaData::getOfficeFormsAttributeNamespace(_eAttribute),
78             ::rtl::OUString::createFromAscii(OAttributeMetaData::getOfficeFormsAttributeName(_eAttribute)));
79 
80         // get and convert the value
81         ::rtl::OUString sAttributeValue = _rxAttributes->getValueByName(sCompleteAttributeName);
82         sal_Bool bValue = _bDefault;
83         GetImport().GetMM100UnitConverter().convertBool(bValue, sAttributeValue);
84 
85         // set the property
86         if (_rxPropInfo->hasPropertyByName(_rPropName))
87             _rxProps->setPropertyValue(_rPropName, ::cppu::bool2any(bValue));
88     }
89 
90     //-------------------------------------------------------------------------
StartElement(const Reference<sax::XAttributeList> & _rxAttrList)91     void OFormsRootImport::StartElement( const Reference< sax::XAttributeList >& _rxAttrList )
92     {
93         ENTER_LOG_CONTEXT( "xmloff::OFormsRootImport - importing the complete tree" );
94         SvXMLImportContext::StartElement( _rxAttrList );
95 
96         try
97         {
98             Reference< XPropertySet > xDocProperties(GetImport().GetModel(), UNO_QUERY);
99             if ( xDocProperties.is() )
100             {   // an empty model is allowed: when doing a copy'n'paste from e.g. Writer to Calc,
101                 // this is done via streaming the controls as XML.
102                 Reference< XPropertySetInfo > xDocPropInfo;
103                 if (xDocProperties.is())
104                     xDocPropInfo = xDocProperties->getPropertySetInfo();
105 
106                 implImportBool(_rxAttrList, ofaAutomaticFocus, xDocProperties, xDocPropInfo, PROPERTY_AUTOCONTROLFOCUS, sal_False);
107                 implImportBool(_rxAttrList, ofaApplyDesignMode, xDocProperties, xDocPropInfo, PROPERTY_APPLYDESIGNMODE, sal_True);
108             }
109         }
110         catch(Exception&)
111         {
112             OSL_ENSURE(sal_False, "OFormsRootImport::StartElement: caught an exception while setting the document properties!");
113         }
114     }
115 
116     //-------------------------------------------------------------------------
EndElement()117     void OFormsRootImport::EndElement()
118     {
119         SvXMLImportContext::EndElement();
120         LEAVE_LOG_CONTEXT( );
121     }
122 
123     //=====================================================================
124     //= OFormsRootExport
125     //=====================================================================
126     //---------------------------------------------------------------------
OFormsRootExport(SvXMLExport & _rExp)127     OFormsRootExport::OFormsRootExport( SvXMLExport& _rExp )
128         :m_pImplElement(NULL)
129     {
130         addModelAttributes(_rExp);
131 
132         m_pImplElement = new SvXMLElementExport(_rExp, XML_NAMESPACE_OFFICE, XML_FORMS, sal_True, sal_True);
133     }
134 
135     //---------------------------------------------------------------------
~OFormsRootExport()136     OFormsRootExport::~OFormsRootExport( )
137     {
138         delete m_pImplElement;
139     }
140 
141     //-------------------------------------------------------------------------
implExportBool(SvXMLExport & _rExp,OfficeFormsAttributes _eAttribute,const Reference<XPropertySet> & _rxProps,const Reference<XPropertySetInfo> & _rxPropInfo,const::rtl::OUString & _rPropName,sal_Bool _bDefault)142     void OFormsRootExport::implExportBool(SvXMLExport& _rExp, OfficeFormsAttributes _eAttribute,
143         const Reference< XPropertySet >& _rxProps, const Reference< XPropertySetInfo >& _rxPropInfo,
144         const ::rtl::OUString& _rPropName, sal_Bool _bDefault)
145     {
146         // retrieve the property value
147         sal_Bool bValue = _bDefault;
148         if (_rxPropInfo->hasPropertyByName(_rPropName))
149             bValue = ::cppu::any2bool(_rxProps->getPropertyValue(_rPropName));
150 
151         // convert into a string
152         ::rtl::OUStringBuffer aValue;
153         _rExp.GetMM100UnitConverter().convertBool(aValue, bValue);
154 
155         // add the attribute
156         _rExp.AddAttribute(
157             OAttributeMetaData::getOfficeFormsAttributeNamespace(_eAttribute),
158             OAttributeMetaData::getOfficeFormsAttributeName(_eAttribute),
159             aValue.makeStringAndClear());
160     }
161 
162     //-------------------------------------------------------------------------
addModelAttributes(SvXMLExport & _rExp)163     void OFormsRootExport::addModelAttributes(SvXMLExport& _rExp) SAL_THROW(())
164     {
165         try
166         {
167             Reference< XPropertySet > xDocProperties(_rExp.GetModel(), UNO_QUERY);
168             if ( xDocProperties.is() )
169             {   // an empty model is allowed: when doing a copy'n'paste from e.g. Writer to Calc,
170                 // this is done via streaming the controls as XML.
171                 Reference< XPropertySetInfo > xDocPropInfo;
172                 if (xDocProperties.is())
173                     xDocPropInfo = xDocProperties->getPropertySetInfo();
174 
175                 implExportBool(_rExp, ofaAutomaticFocus, xDocProperties, xDocPropInfo, PROPERTY_AUTOCONTROLFOCUS, sal_False);
176                 implExportBool(_rExp, ofaApplyDesignMode, xDocProperties, xDocPropInfo, PROPERTY_APPLYDESIGNMODE, sal_True);
177             }
178         }
179         catch(Exception&)
180         {
181             OSL_ENSURE(sal_False, "OFormsRootExport::addModelAttributes: caught an exception while retrieving the document properties!");
182         }
183     }
184 
185 //.........................................................................
186 }   // namespace xmloff
187 //.........................................................................
188 
189 
190