xref: /trunk/main/xmloff/source/forms/officeforms.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1*63bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*63bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*63bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*63bba73cSAndrew Rist  * distributed with this work for additional information
6*63bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*63bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*63bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
9*63bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*63bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*63bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*63bba73cSAndrew Rist  * software distributed under the License is distributed on an
15*63bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*63bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*63bba73cSAndrew Rist  * specific language governing permissions and limitations
18*63bba73cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*63bba73cSAndrew Rist  *************************************************************/
21*63bba73cSAndrew Rist 
22*63bba73cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir #include "officeforms.hxx"
27cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
28cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
29cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
30cdf0e10cSrcweir #include <xmloff/xmlexp.hxx>
31cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
32cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
33cdf0e10cSrcweir #include <comphelper/extract.hxx>
34cdf0e10cSrcweir #include "strings.hxx"
35cdf0e10cSrcweir #include <rtl/logfile.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir //.........................................................................
38cdf0e10cSrcweir namespace xmloff
39cdf0e10cSrcweir {
40cdf0e10cSrcweir //.........................................................................
41cdf0e10cSrcweir 
42cdf0e10cSrcweir     using namespace ::com::sun::star::uno;
43cdf0e10cSrcweir     using namespace ::com::sun::star::beans;
44cdf0e10cSrcweir     using namespace ::com::sun::star::frame;
45cdf0e10cSrcweir     using namespace ::com::sun::star::xml;
46cdf0e10cSrcweir     using ::xmloff::token::XML_FORMS;
47cdf0e10cSrcweir 
48cdf0e10cSrcweir     //=========================================================================
49cdf0e10cSrcweir     //= OFormsRootImport
50cdf0e10cSrcweir     //=========================================================================
51cdf0e10cSrcweir     TYPEINIT1(OFormsRootImport, SvXMLImportContext);
52cdf0e10cSrcweir     //-------------------------------------------------------------------------
OFormsRootImport(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLocalName)53cdf0e10cSrcweir     OFormsRootImport::OFormsRootImport( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName )
54cdf0e10cSrcweir         :SvXMLImportContext(rImport, nPrfx, rLocalName)
55cdf0e10cSrcweir     {
56cdf0e10cSrcweir     }
57cdf0e10cSrcweir 
58cdf0e10cSrcweir     //-------------------------------------------------------------------------
~OFormsRootImport()59cdf0e10cSrcweir     OFormsRootImport::~OFormsRootImport()
60cdf0e10cSrcweir     {
61cdf0e10cSrcweir     }
62cdf0e10cSrcweir 
63cdf0e10cSrcweir     //-------------------------------------------------------------------------
CreateChildContext(sal_uInt16 _nPrefix,const::rtl::OUString & _rLocalName,const Reference<sax::XAttributeList> & xAttrList)64cdf0e10cSrcweir     SvXMLImportContext* OFormsRootImport::CreateChildContext( sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName,
65cdf0e10cSrcweir             const Reference< sax::XAttributeList>& xAttrList )
66cdf0e10cSrcweir     {
67cdf0e10cSrcweir         return GetImport().GetFormImport()->createContext( _nPrefix, _rLocalName, xAttrList );
68cdf0e10cSrcweir     }
69cdf0e10cSrcweir 
70cdf0e10cSrcweir     //-------------------------------------------------------------------------
implImportBool(const Reference<sax::XAttributeList> & _rxAttributes,OfficeFormsAttributes _eAttribute,const Reference<XPropertySet> & _rxProps,const Reference<XPropertySetInfo> & _rxPropInfo,const::rtl::OUString & _rPropName,sal_Bool _bDefault)71cdf0e10cSrcweir     void OFormsRootImport::implImportBool(const Reference< sax::XAttributeList >& _rxAttributes, OfficeFormsAttributes _eAttribute,
72cdf0e10cSrcweir             const Reference< XPropertySet >& _rxProps, const Reference< XPropertySetInfo >& _rxPropInfo,
73cdf0e10cSrcweir             const ::rtl::OUString& _rPropName, sal_Bool _bDefault)
74cdf0e10cSrcweir     {
75cdf0e10cSrcweir         // the complete attribute name to look for
76cdf0e10cSrcweir         ::rtl::OUString sCompleteAttributeName = GetImport().GetNamespaceMap().GetQNameByIndex(
77cdf0e10cSrcweir             OAttributeMetaData::getOfficeFormsAttributeNamespace(_eAttribute),
78cdf0e10cSrcweir             ::rtl::OUString::createFromAscii(OAttributeMetaData::getOfficeFormsAttributeName(_eAttribute)));
79cdf0e10cSrcweir 
80cdf0e10cSrcweir         // get and convert the value
81cdf0e10cSrcweir         ::rtl::OUString sAttributeValue = _rxAttributes->getValueByName(sCompleteAttributeName);
82cdf0e10cSrcweir         sal_Bool bValue = _bDefault;
83cdf0e10cSrcweir         GetImport().GetMM100UnitConverter().convertBool(bValue, sAttributeValue);
84cdf0e10cSrcweir 
85cdf0e10cSrcweir         // set the property
86cdf0e10cSrcweir         if (_rxPropInfo->hasPropertyByName(_rPropName))
87cdf0e10cSrcweir             _rxProps->setPropertyValue(_rPropName, ::cppu::bool2any(bValue));
88cdf0e10cSrcweir     }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir     //-------------------------------------------------------------------------
StartElement(const Reference<sax::XAttributeList> & _rxAttrList)91cdf0e10cSrcweir     void OFormsRootImport::StartElement( const Reference< sax::XAttributeList >& _rxAttrList )
92cdf0e10cSrcweir     {
93cdf0e10cSrcweir         ENTER_LOG_CONTEXT( "xmloff::OFormsRootImport - importing the complete tree" );
94cdf0e10cSrcweir         SvXMLImportContext::StartElement( _rxAttrList );
95cdf0e10cSrcweir 
96cdf0e10cSrcweir         try
97cdf0e10cSrcweir         {
98cdf0e10cSrcweir             Reference< XPropertySet > xDocProperties(GetImport().GetModel(), UNO_QUERY);
99cdf0e10cSrcweir             if ( xDocProperties.is() )
100cdf0e10cSrcweir             {   // an empty model is allowed: when doing a copy'n'paste from e.g. Writer to Calc,
101cdf0e10cSrcweir                 // this is done via streaming the controls as XML.
102cdf0e10cSrcweir                 Reference< XPropertySetInfo > xDocPropInfo;
103cdf0e10cSrcweir                 if (xDocProperties.is())
104cdf0e10cSrcweir                     xDocPropInfo = xDocProperties->getPropertySetInfo();
105cdf0e10cSrcweir 
106cdf0e10cSrcweir                 implImportBool(_rxAttrList, ofaAutomaticFocus, xDocProperties, xDocPropInfo, PROPERTY_AUTOCONTROLFOCUS, sal_False);
107cdf0e10cSrcweir                 implImportBool(_rxAttrList, ofaApplyDesignMode, xDocProperties, xDocPropInfo, PROPERTY_APPLYDESIGNMODE, sal_True);
108cdf0e10cSrcweir             }
109cdf0e10cSrcweir         }
110cdf0e10cSrcweir         catch(Exception&)
111cdf0e10cSrcweir         {
112cdf0e10cSrcweir             OSL_ENSURE(sal_False, "OFormsRootImport::StartElement: caught an exception while setting the document properties!");
113cdf0e10cSrcweir         }
114cdf0e10cSrcweir     }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir     //-------------------------------------------------------------------------
EndElement()117cdf0e10cSrcweir     void OFormsRootImport::EndElement()
118cdf0e10cSrcweir     {
119cdf0e10cSrcweir         SvXMLImportContext::EndElement();
120cdf0e10cSrcweir         LEAVE_LOG_CONTEXT( );
121cdf0e10cSrcweir     }
122cdf0e10cSrcweir 
123cdf0e10cSrcweir     //=====================================================================
124cdf0e10cSrcweir     //= OFormsRootExport
125cdf0e10cSrcweir     //=====================================================================
126cdf0e10cSrcweir     //---------------------------------------------------------------------
OFormsRootExport(SvXMLExport & _rExp)127cdf0e10cSrcweir     OFormsRootExport::OFormsRootExport( SvXMLExport& _rExp )
128cdf0e10cSrcweir         :m_pImplElement(NULL)
129cdf0e10cSrcweir     {
130cdf0e10cSrcweir         addModelAttributes(_rExp);
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         m_pImplElement = new SvXMLElementExport(_rExp, XML_NAMESPACE_OFFICE, XML_FORMS, sal_True, sal_True);
133cdf0e10cSrcweir     }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir     //---------------------------------------------------------------------
~OFormsRootExport()136cdf0e10cSrcweir     OFormsRootExport::~OFormsRootExport( )
137cdf0e10cSrcweir     {
138cdf0e10cSrcweir         delete m_pImplElement;
139cdf0e10cSrcweir     }
140cdf0e10cSrcweir 
141cdf0e10cSrcweir     //-------------------------------------------------------------------------
implExportBool(SvXMLExport & _rExp,OfficeFormsAttributes _eAttribute,const Reference<XPropertySet> & _rxProps,const Reference<XPropertySetInfo> & _rxPropInfo,const::rtl::OUString & _rPropName,sal_Bool _bDefault)142cdf0e10cSrcweir     void OFormsRootExport::implExportBool(SvXMLExport& _rExp, OfficeFormsAttributes _eAttribute,
143cdf0e10cSrcweir         const Reference< XPropertySet >& _rxProps, const Reference< XPropertySetInfo >& _rxPropInfo,
144cdf0e10cSrcweir         const ::rtl::OUString& _rPropName, sal_Bool _bDefault)
145cdf0e10cSrcweir     {
146cdf0e10cSrcweir         // retrieve the property value
147cdf0e10cSrcweir         sal_Bool bValue = _bDefault;
148cdf0e10cSrcweir         if (_rxPropInfo->hasPropertyByName(_rPropName))
149cdf0e10cSrcweir             bValue = ::cppu::any2bool(_rxProps->getPropertyValue(_rPropName));
150cdf0e10cSrcweir 
151cdf0e10cSrcweir         // convert into a string
152cdf0e10cSrcweir         ::rtl::OUStringBuffer aValue;
153cdf0e10cSrcweir         _rExp.GetMM100UnitConverter().convertBool(aValue, bValue);
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         // add the attribute
156cdf0e10cSrcweir         _rExp.AddAttribute(
157cdf0e10cSrcweir             OAttributeMetaData::getOfficeFormsAttributeNamespace(_eAttribute),
158cdf0e10cSrcweir             OAttributeMetaData::getOfficeFormsAttributeName(_eAttribute),
159cdf0e10cSrcweir             aValue.makeStringAndClear());
160cdf0e10cSrcweir     }
161cdf0e10cSrcweir 
162cdf0e10cSrcweir     //-------------------------------------------------------------------------
addModelAttributes(SvXMLExport & _rExp)163cdf0e10cSrcweir     void OFormsRootExport::addModelAttributes(SvXMLExport& _rExp) SAL_THROW(())
164cdf0e10cSrcweir     {
165cdf0e10cSrcweir         try
166cdf0e10cSrcweir         {
167cdf0e10cSrcweir             Reference< XPropertySet > xDocProperties(_rExp.GetModel(), UNO_QUERY);
168cdf0e10cSrcweir             if ( xDocProperties.is() )
169cdf0e10cSrcweir             {   // an empty model is allowed: when doing a copy'n'paste from e.g. Writer to Calc,
170cdf0e10cSrcweir                 // this is done via streaming the controls as XML.
171cdf0e10cSrcweir                 Reference< XPropertySetInfo > xDocPropInfo;
172cdf0e10cSrcweir                 if (xDocProperties.is())
173cdf0e10cSrcweir                     xDocPropInfo = xDocProperties->getPropertySetInfo();
174cdf0e10cSrcweir 
175cdf0e10cSrcweir                 implExportBool(_rExp, ofaAutomaticFocus, xDocProperties, xDocPropInfo, PROPERTY_AUTOCONTROLFOCUS, sal_False);
176cdf0e10cSrcweir                 implExportBool(_rExp, ofaApplyDesignMode, xDocProperties, xDocPropInfo, PROPERTY_APPLYDESIGNMODE, sal_True);
177cdf0e10cSrcweir             }
178cdf0e10cSrcweir         }
179cdf0e10cSrcweir         catch(Exception&)
180cdf0e10cSrcweir         {
181cdf0e10cSrcweir             OSL_ENSURE(sal_False, "OFormsRootExport::addModelAttributes: caught an exception while retrieving the document properties!");
182cdf0e10cSrcweir         }
183cdf0e10cSrcweir     }
184cdf0e10cSrcweir 
185cdf0e10cSrcweir //.........................................................................
186cdf0e10cSrcweir }   // namespace xmloff
187cdf0e10cSrcweir //.........................................................................
188