| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_xmloff.hxx" |
| #include "officeforms.hxx" |
| #include <xmloff/xmluconv.hxx> |
| #include <xmloff/xmltoken.hxx> |
| #include "xmloff/xmlnmspe.hxx" |
| #include <xmloff/xmlexp.hxx> |
| #include <xmloff/xmlimp.hxx> |
| #include <xmloff/nmspmap.hxx> |
| #include <comphelper/extract.hxx> |
| #include "strings.hxx" |
| #include <rtl/logfile.hxx> |
| |
| //......................................................................... |
| namespace xmloff |
| { |
| //......................................................................... |
| |
| using namespace ::com::sun::star::uno; |
| using namespace ::com::sun::star::beans; |
| using namespace ::com::sun::star::frame; |
| using namespace ::com::sun::star::xml; |
| using ::xmloff::token::XML_FORMS; |
| |
| //========================================================================= |
| //= OFormsRootImport |
| //========================================================================= |
| TYPEINIT1(OFormsRootImport, SvXMLImportContext); |
| //------------------------------------------------------------------------- |
| OFormsRootImport::OFormsRootImport( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName ) |
| :SvXMLImportContext(rImport, nPrfx, rLocalName) |
| { |
| } |
| |
| //------------------------------------------------------------------------- |
| OFormsRootImport::~OFormsRootImport() |
| { |
| } |
| |
| //------------------------------------------------------------------------- |
| SvXMLImportContext* OFormsRootImport::CreateChildContext( sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, |
| const Reference< sax::XAttributeList>& xAttrList ) |
| { |
| return GetImport().GetFormImport()->createContext( _nPrefix, _rLocalName, xAttrList ); |
| } |
| |
| //------------------------------------------------------------------------- |
| void OFormsRootImport::implImportBool(const Reference< sax::XAttributeList >& _rxAttributes, OfficeFormsAttributes _eAttribute, |
| const Reference< XPropertySet >& _rxProps, const Reference< XPropertySetInfo >& _rxPropInfo, |
| const ::rtl::OUString& _rPropName, sal_Bool _bDefault) |
| { |
| // the complete attribute name to look for |
| ::rtl::OUString sCompleteAttributeName = GetImport().GetNamespaceMap().GetQNameByIndex( |
| OAttributeMetaData::getOfficeFormsAttributeNamespace(_eAttribute), |
| ::rtl::OUString::createFromAscii(OAttributeMetaData::getOfficeFormsAttributeName(_eAttribute))); |
| |
| // get and convert the value |
| ::rtl::OUString sAttributeValue = _rxAttributes->getValueByName(sCompleteAttributeName); |
| sal_Bool bValue = _bDefault; |
| GetImport().GetMM100UnitConverter().convertBool(bValue, sAttributeValue); |
| |
| // set the property |
| if (_rxPropInfo->hasPropertyByName(_rPropName)) |
| _rxProps->setPropertyValue(_rPropName, ::cppu::bool2any(bValue)); |
| } |
| |
| //------------------------------------------------------------------------- |
| void OFormsRootImport::StartElement( const Reference< sax::XAttributeList >& _rxAttrList ) |
| { |
| ENTER_LOG_CONTEXT( "xmloff::OFormsRootImport - importing the complete tree" ); |
| SvXMLImportContext::StartElement( _rxAttrList ); |
| |
| try |
| { |
| Reference< XPropertySet > xDocProperties(GetImport().GetModel(), UNO_QUERY); |
| if ( xDocProperties.is() ) |
| { // an empty model is allowed: when doing a copy'n'paste from e.g. Writer to Calc, |
| // this is done via streaming the controls as XML. |
| Reference< XPropertySetInfo > xDocPropInfo; |
| if (xDocProperties.is()) |
| xDocPropInfo = xDocProperties->getPropertySetInfo(); |
| |
| implImportBool(_rxAttrList, ofaAutomaticFocus, xDocProperties, xDocPropInfo, PROPERTY_AUTOCONTROLFOCUS, sal_False); |
| implImportBool(_rxAttrList, ofaApplyDesignMode, xDocProperties, xDocPropInfo, PROPERTY_APPLYDESIGNMODE, sal_True); |
| } |
| } |
| catch(Exception&) |
| { |
| OSL_ENSURE(sal_False, "OFormsRootImport::StartElement: caught an exception while setting the document properties!"); |
| } |
| } |
| |
| //------------------------------------------------------------------------- |
| void OFormsRootImport::EndElement() |
| { |
| SvXMLImportContext::EndElement(); |
| LEAVE_LOG_CONTEXT( ); |
| } |
| |
| //===================================================================== |
| //= OFormsRootExport |
| //===================================================================== |
| //--------------------------------------------------------------------- |
| OFormsRootExport::OFormsRootExport( SvXMLExport& _rExp ) |
| :m_pImplElement(NULL) |
| { |
| addModelAttributes(_rExp); |
| |
| m_pImplElement = new SvXMLElementExport(_rExp, XML_NAMESPACE_OFFICE, XML_FORMS, sal_True, sal_True); |
| } |
| |
| //--------------------------------------------------------------------- |
| OFormsRootExport::~OFormsRootExport( ) |
| { |
| delete m_pImplElement; |
| } |
| |
| //------------------------------------------------------------------------- |
| void OFormsRootExport::implExportBool(SvXMLExport& _rExp, OfficeFormsAttributes _eAttribute, |
| const Reference< XPropertySet >& _rxProps, const Reference< XPropertySetInfo >& _rxPropInfo, |
| const ::rtl::OUString& _rPropName, sal_Bool _bDefault) |
| { |
| // retrieve the property value |
| sal_Bool bValue = _bDefault; |
| if (_rxPropInfo->hasPropertyByName(_rPropName)) |
| bValue = ::cppu::any2bool(_rxProps->getPropertyValue(_rPropName)); |
| |
| // convert into a string |
| ::rtl::OUStringBuffer aValue; |
| _rExp.GetMM100UnitConverter().convertBool(aValue, bValue); |
| |
| // add the attribute |
| _rExp.AddAttribute( |
| OAttributeMetaData::getOfficeFormsAttributeNamespace(_eAttribute), |
| OAttributeMetaData::getOfficeFormsAttributeName(_eAttribute), |
| aValue.makeStringAndClear()); |
| } |
| |
| //------------------------------------------------------------------------- |
| void OFormsRootExport::addModelAttributes(SvXMLExport& _rExp) SAL_THROW(()) |
| { |
| try |
| { |
| Reference< XPropertySet > xDocProperties(_rExp.GetModel(), UNO_QUERY); |
| if ( xDocProperties.is() ) |
| { // an empty model is allowed: when doing a copy'n'paste from e.g. Writer to Calc, |
| // this is done via streaming the controls as XML. |
| Reference< XPropertySetInfo > xDocPropInfo; |
| if (xDocProperties.is()) |
| xDocPropInfo = xDocProperties->getPropertySetInfo(); |
| |
| implExportBool(_rExp, ofaAutomaticFocus, xDocProperties, xDocPropInfo, PROPERTY_AUTOCONTROLFOCUS, sal_False); |
| implExportBool(_rExp, ofaApplyDesignMode, xDocProperties, xDocPropInfo, PROPERTY_APPLYDESIGNMODE, sal_True); |
| } |
| } |
| catch(Exception&) |
| { |
| OSL_ENSURE(sal_False, "OFormsRootExport::addModelAttributes: caught an exception while retrieving the document properties!"); |
| } |
| } |
| |
| //......................................................................... |
| } // namespace xmloff |
| //......................................................................... |
| |
| |