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 "layerimport.hxx" 27cdf0e10cSrcweir #include "formenums.hxx" 28cdf0e10cSrcweir #include "elementimport.hxx" 29cdf0e10cSrcweir #include "officeforms.hxx" 30cdf0e10cSrcweir #include "strings.hxx" 31cdf0e10cSrcweir #include "formstyles.hxx" 32cdf0e10cSrcweir #include <xmloff/xmlictxt.hxx> 33cdf0e10cSrcweir #include <xmloff/xmlstyle.hxx> 34cdf0e10cSrcweir #include <xmloff/families.hxx> 35cdf0e10cSrcweir #include <xmloff/xmlprmap.hxx> 36cdf0e10cSrcweir #include <xmloff/prstylei.hxx> 37cdf0e10cSrcweir #include <xmloff/xmlimp.hxx> 38cdf0e10cSrcweir #include "XMLEventImportHelper.hxx" 39cdf0e10cSrcweir #include <xmloff/xmlimppr.hxx> 40cdf0e10cSrcweir #include <xmloff/xmlnumfi.hxx> 41cdf0e10cSrcweir #include <com/sun/star/util/XNumberFormatsSupplier.hpp> 42cdf0e10cSrcweir #include <com/sun/star/form/FormSubmitEncoding.hpp> 43cdf0e10cSrcweir #include <com/sun/star/form/FormSubmitMethod.hpp> 44cdf0e10cSrcweir #include <com/sun/star/sdb/CommandType.hpp> 45cdf0e10cSrcweir #include <com/sun/star/form/NavigationBarMode.hpp> 46cdf0e10cSrcweir #include <com/sun/star/form/TabulatorCycle.hpp> 47cdf0e10cSrcweir #include <com/sun/star/form/FormButtonType.hpp> 48cdf0e10cSrcweir #include <com/sun/star/awt/ScrollBarOrientation.hpp> 49cdf0e10cSrcweir #include <com/sun/star/awt/VisualEffect.hpp> 50cdf0e10cSrcweir #include <com/sun/star/form/ListSourceType.hpp> 51cdf0e10cSrcweir #include <tools/wintypes.hxx> // for check states 52cdf0e10cSrcweir #include <com/sun/star/lang/Locale.hpp> 53cdf0e10cSrcweir #include <xmloff/controlpropertyhdl.hxx> 54cdf0e10cSrcweir #include "controlpropertymap.hxx" 55cdf0e10cSrcweir #include "formevents.hxx" 56cdf0e10cSrcweir #include "formcellbinding.hxx" 57cdf0e10cSrcweir #include "xmloff/xformsimport.hxx" 58cdf0e10cSrcweir #include <xmloff/xmltoken.hxx> 59cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx" 60cdf0e10cSrcweir #include <rtl/logfile.hxx> 61cdf0e10cSrcweir #include <algorithm> 62cdf0e10cSrcweir 63cdf0e10cSrcweir SV_IMPL_REF( SvXMLStylesContext ); 64cdf0e10cSrcweir 65cdf0e10cSrcweir //......................................................................... 66cdf0e10cSrcweir namespace xmloff 67cdf0e10cSrcweir { 68cdf0e10cSrcweir //......................................................................... 69cdf0e10cSrcweir 70cdf0e10cSrcweir using namespace ::com::sun::star::uno; 71cdf0e10cSrcweir using namespace ::com::sun::star::awt; 72cdf0e10cSrcweir using namespace ::com::sun::star::lang; 73cdf0e10cSrcweir using namespace ::com::sun::star::beans; 74cdf0e10cSrcweir using namespace ::com::sun::star::container; 75cdf0e10cSrcweir using namespace ::com::sun::star::drawing; 76cdf0e10cSrcweir using namespace ::com::sun::star::xml; 77cdf0e10cSrcweir using namespace ::com::sun::star::util; 78cdf0e10cSrcweir using namespace ::com::sun::star::form; 79cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 80cdf0e10cSrcweir 81cdf0e10cSrcweir //===================================================================== 82cdf0e10cSrcweir //= OFormLayerXMLImport_Impl 83cdf0e10cSrcweir //===================================================================== 84cdf0e10cSrcweir //--------------------------------------------------------------------- 85cdf0e10cSrcweir OFormLayerXMLImport_Impl::OFormLayerXMLImport_Impl(SvXMLImport& _rImporter) 86cdf0e10cSrcweir :m_rImporter(_rImporter) 87cdf0e10cSrcweir ,m_pAutoStyles(NULL) 88cdf0e10cSrcweir { 89cdf0e10cSrcweir // build the attribute2property map 90cdf0e10cSrcweir // string properties which are exported as attributes 91cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 92cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_NAME), PROPERTY_NAME); 93cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 94cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_IMAGE_DATA), PROPERTY_IMAGEURL); 95cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 96cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_LABEL), PROPERTY_LABEL); 97cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 98cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_TARGET_LOCATION), PROPERTY_TARGETURL); 99cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 100cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_TITLE), PROPERTY_TITLE); 101cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 102cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_TARGET_FRAME), PROPERTY_TARGETFRAME, "_blank"); 103cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 104cdf0e10cSrcweir OAttributeMetaData::getDatabaseAttributeName(DA_DATA_FIELD), PROPERTY_DATAFIELD); 105cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 106cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faCommand), PROPERTY_COMMAND); 107cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 108cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faDatasource), PROPERTY_DATASOURCENAME); 109cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 110cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faFilter), PROPERTY_FILTER); 111cdf0e10cSrcweir m_aAttributeMetaData.addStringProperty( 112cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faOrder), PROPERTY_ORDER); 113cdf0e10cSrcweir 114cdf0e10cSrcweir // properties not added because they're already present in another form 115cdf0e10cSrcweir OSL_ENSURE( 116cdf0e10cSrcweir 0 == ::rtl::OUString::createFromAscii(OAttributeMetaData::getCommonControlAttributeName(CCA_TARGET_LOCATION)).compareToAscii( 117cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faAction)), 118cdf0e10cSrcweir "OFormLayerXMLImport_Impl::OFormLayerXMLImport_Impl: invalid attribute names (1)!"); 119cdf0e10cSrcweir // if this fails, we would have to add a translation from faAction->PROPERTY_TARGETURL 120cdf0e10cSrcweir // We did not because we already have one CCA_TARGET_LOCATION->PROPERTY_TARGETURL, 121cdf0e10cSrcweir // and CCA_TARGET_LOCATION and faAction should be represented by the same attribute 122cdf0e10cSrcweir 123cdf0e10cSrcweir OSL_ENSURE( 124cdf0e10cSrcweir 0 == ::rtl::OUString::createFromAscii(OAttributeMetaData::getCommonControlAttributeName(CCA_NAME)).compareToAscii( 125cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faName)), 126cdf0e10cSrcweir "OFormLayerXMLImport_Impl::OFormLayerXMLImport_Impl: invalid attribute names (2)!"); 127cdf0e10cSrcweir // the same for faName, CCA_NAME and PROPERTY_NAME 128cdf0e10cSrcweir 129cdf0e10cSrcweir // boolean properties which are exported as attributes 130cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 131cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_CURRENT_SELECTED), PROPERTY_STATE, sal_False); 132cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 133cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_DISABLED), PROPERTY_ENABLED, sal_False, sal_True); 134cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 135cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_DROPDOWN), PROPERTY_DROPDOWN, sal_False); 136cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 137cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_PRINTABLE), PROPERTY_PRINTABLE, sal_True); 138cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 139cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_READONLY), PROPERTY_READONLY, sal_False); 140cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 141cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_SELECTED), PROPERTY_DEFAULT_STATE, sal_False); 142cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 143cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_TAB_STOP), PROPERTY_TABSTOP, sal_True); 144cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 145cdf0e10cSrcweir OAttributeMetaData::getDatabaseAttributeName(DA_CONVERT_EMPTY), PROPERTY_EMPTY_IS_NULL, sal_False); 146cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 147cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_VALIDATION), PROPERTY_STRICTFORMAT, sal_False); 148cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 149cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_MULTI_LINE), PROPERTY_MULTILINE, sal_False); 150cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 151cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_AUTOMATIC_COMPLETION), PROPERTY_AUTOCOMPLETE, sal_False); 152cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 153cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_MULTIPLE), PROPERTY_MULTISELECTION, sal_False); 154cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 155cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_DEFAULT_BUTTON), PROPERTY_DEFAULTBUTTON, sal_False); 156cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 157cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_IS_TRISTATE), PROPERTY_TRISTATE, sal_False); 158cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 159cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faAllowDeletes), PROPERTY_ALLOWDELETES, sal_True); 160cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 161cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faAllowInserts), PROPERTY_ALLOWINSERTS, sal_True); 162cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 163cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faAllowUpdates), PROPERTY_ALLOWUPDATES, sal_True); 164cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 165cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faApplyFilter), PROPERTY_APPLYFILTER, sal_False); 166cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 167cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faEscapeProcessing), PROPERTY_ESCAPEPROCESSING, sal_True); 168cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 169cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faIgnoreResult), PROPERTY_IGNORERESULT, sal_False); 170cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 171cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName( SCA_TOGGLE ), PROPERTY_TOGGLE, sal_False ); 172cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 173cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName( SCA_FOCUS_ON_CLICK ), PROPERTY_FOCUS_ON_CLICK, sal_True ); 174cdf0e10cSrcweir m_aAttributeMetaData.addBooleanProperty( 175cdf0e10cSrcweir OAttributeMetaData::getDatabaseAttributeName( DA_INPUT_REQUIRED ), PROPERTY_INPUT_REQUIRED, sal_False ); 176cdf0e10cSrcweir 177cdf0e10cSrcweir // the int16 attributes 178cdf0e10cSrcweir m_aAttributeMetaData.addInt16Property( 179cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_MAX_LENGTH), PROPERTY_MAXTEXTLENGTH, 0); 180cdf0e10cSrcweir m_aAttributeMetaData.addInt16Property( 181cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_SIZE), PROPERTY_LINECOUNT, 5); 182cdf0e10cSrcweir m_aAttributeMetaData.addInt16Property( 183cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_TAB_INDEX), PROPERTY_TABINDEX, 0); 184cdf0e10cSrcweir m_aAttributeMetaData.addInt16Property( 185cdf0e10cSrcweir OAttributeMetaData::getDatabaseAttributeName(DA_BOUND_COLUMN), PROPERTY_BOUNDCOLUMN, 0); 186cdf0e10cSrcweir 187cdf0e10cSrcweir // the int32 attributes 188cdf0e10cSrcweir m_aAttributeMetaData.addInt32Property( 189cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName( SCA_PAGE_STEP_SIZE ), PROPERTY_BLOCK_INCREMENT, 10 ); 190cdf0e10cSrcweir 191cdf0e10cSrcweir // the enum attributes 192cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 193cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName( CCA_VISUAL_EFFECT ), PROPERTY_VISUAL_EFFECT, 194cdf0e10cSrcweir VisualEffect::LOOK3D, OEnumMapper::getEnumMap( OEnumMapper::epVisualEffect ), 195cdf0e10cSrcweir &::getCppuType( static_cast< sal_Int16* >( NULL ) ) ); 196cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 197cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName( CCA_ORIENTATION ), PROPERTY_ORIENTATION, 198cdf0e10cSrcweir ScrollBarOrientation::HORIZONTAL, OEnumMapper::getEnumMap( OEnumMapper::epOrientation ), 199cdf0e10cSrcweir &::getCppuType( static_cast< sal_Int32* >( NULL ) ) ); 200cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 201cdf0e10cSrcweir OAttributeMetaData::getCommonControlAttributeName(CCA_BUTTON_TYPE), PROPERTY_BUTTONTYPE, 202cdf0e10cSrcweir FormButtonType_PUSH, OEnumMapper::getEnumMap(OEnumMapper::epButtonType), 203cdf0e10cSrcweir &::getCppuType( static_cast<FormButtonType*>(NULL) )); 204cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 205cdf0e10cSrcweir OAttributeMetaData::getDatabaseAttributeName(DA_LIST_SOURCE_TYPE), PROPERTY_LISTSOURCETYPE, 206cdf0e10cSrcweir ListSourceType_VALUELIST, OEnumMapper::getEnumMap(OEnumMapper::epListSourceType), 207cdf0e10cSrcweir &::getCppuType( static_cast<ListSourceType*>(NULL) )); 208cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 209cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_STATE), PROPERTY_DEFAULT_STATE, STATE_NOCHECK, 210cdf0e10cSrcweir OEnumMapper::getEnumMap(OEnumMapper::epCheckState), 211cdf0e10cSrcweir &::getCppuType( static_cast< sal_Int16* >(NULL))); 212cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 213cdf0e10cSrcweir OAttributeMetaData::getSpecialAttributeName(SCA_CURRENT_STATE), PROPERTY_STATE, STATE_NOCHECK, 214cdf0e10cSrcweir OEnumMapper::getEnumMap(OEnumMapper::epCheckState), 215cdf0e10cSrcweir &::getCppuType( static_cast< sal_Int16* >(NULL))); 216cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 217cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faEnctype), PROPERTY_SUBMIT_ENCODING, 218cdf0e10cSrcweir FormSubmitEncoding_URL, OEnumMapper::getEnumMap(OEnumMapper::epSubmitEncoding), 219cdf0e10cSrcweir &::getCppuType( static_cast<FormSubmitEncoding*>(NULL) )); 220cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 221cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faMethod), PROPERTY_SUBMIT_METHOD, 222cdf0e10cSrcweir FormSubmitMethod_GET, OEnumMapper::getEnumMap(OEnumMapper::epSubmitMethod), 223cdf0e10cSrcweir &::getCppuType( static_cast<FormSubmitMethod*>(NULL) )); 224cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 225cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faCommandType), PROPERTY_COMMAND_TYPE, 226cdf0e10cSrcweir CommandType::COMMAND, OEnumMapper::getEnumMap(OEnumMapper::epCommandType)); 227cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 228cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faNavigationMode), PROPERTY_NAVIGATION, 229cdf0e10cSrcweir NavigationBarMode_NONE, OEnumMapper::getEnumMap(OEnumMapper::epNavigationType), 230cdf0e10cSrcweir &::getCppuType( static_cast<NavigationBarMode*>(NULL) )); 231cdf0e10cSrcweir m_aAttributeMetaData.addEnumProperty( 232cdf0e10cSrcweir OAttributeMetaData::getFormAttributeName(faTabbingCycle), PROPERTY_CYCLE, 233cdf0e10cSrcweir TabulatorCycle_RECORDS, OEnumMapper::getEnumMap(OEnumMapper::epTabCyle), 234cdf0e10cSrcweir &::getCppuType( static_cast<TabulatorCycle*>(NULL) )); 235cdf0e10cSrcweir 236cdf0e10cSrcweir // 'initialize' 237cdf0e10cSrcweir m_aCurrentPageIds = m_aControlIds.end(); 238cdf0e10cSrcweir } 239cdf0e10cSrcweir 240cdf0e10cSrcweir //--------------------------------------------------------------------- 241cdf0e10cSrcweir OFormLayerXMLImport_Impl::~OFormLayerXMLImport_Impl() 242cdf0e10cSrcweir { 243cdf0e10cSrcweir // outlined to allow forward declaration of OAttribute2Property in the header 244cdf0e10cSrcweir 245cdf0e10cSrcweir if (m_pAutoStyles) 246cdf0e10cSrcweir m_pAutoStyles->ReleaseRef(); 247cdf0e10cSrcweir } 248cdf0e10cSrcweir 249cdf0e10cSrcweir //--------------------------------------------------------------------- 250cdf0e10cSrcweir void OFormLayerXMLImport_Impl::setAutoStyleContext(SvXMLStylesContext* _pNewContext) 251cdf0e10cSrcweir { 252cdf0e10cSrcweir OSL_ENSURE(!m_pAutoStyles, "OFormLayerXMLImport_Impl::setAutoStyleContext: not to be called twice!"); 253cdf0e10cSrcweir m_pAutoStyles = _pNewContext; 254cdf0e10cSrcweir if (m_pAutoStyles) 255cdf0e10cSrcweir m_pAutoStyles->AddRef(); 256cdf0e10cSrcweir } 257cdf0e10cSrcweir 258cdf0e10cSrcweir //--------------------------------------------------------------------- 259cdf0e10cSrcweir void OFormLayerXMLImport_Impl::applyControlNumberStyle(const Reference< XPropertySet >& _rxControlModel, const ::rtl::OUString& _rControlNumerStyleName) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir OSL_ENSURE(_rxControlModel.is() && (0 != _rControlNumerStyleName.getLength()), 262cdf0e10cSrcweir "OFormLayerXMLImport_Impl::applyControlNumberStyle: invalid arguments (this will crash)!"); 263cdf0e10cSrcweir 264cdf0e10cSrcweir OSL_ENSURE(m_pAutoStyles, "OFormLayerXMLImport_Impl::applyControlNumberStyle: have no auto style context!"); 265cdf0e10cSrcweir if (!m_pAutoStyles) 266cdf0e10cSrcweir { 267cdf0e10cSrcweir m_pAutoStyles = m_rImporter.GetShapeImport()->GetAutoStylesContext(); 268cdf0e10cSrcweir if (m_pAutoStyles) 269cdf0e10cSrcweir m_pAutoStyles->AddRef(); 270cdf0e10cSrcweir } 271cdf0e10cSrcweir 272cdf0e10cSrcweir if (m_pAutoStyles) 273cdf0e10cSrcweir { 274cdf0e10cSrcweir const SvXMLStyleContext* pStyle = m_pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_DATA_STYLE, _rControlNumerStyleName); 275cdf0e10cSrcweir if (pStyle) 276cdf0e10cSrcweir { 277cdf0e10cSrcweir const SvXMLNumFormatContext* pDataStyle = static_cast<const SvXMLNumFormatContext*>(pStyle); 278cdf0e10cSrcweir 279cdf0e10cSrcweir // set this format at the control model 280cdf0e10cSrcweir try 281cdf0e10cSrcweir { 282cdf0e10cSrcweir // the models number format supplier and formats 283cdf0e10cSrcweir Reference< XNumberFormatsSupplier > xFormatsSupplier; 284cdf0e10cSrcweir _rxControlModel->getPropertyValue(PROPERTY_FORMATSSUPPLIER) >>= xFormatsSupplier; 285cdf0e10cSrcweir Reference< XNumberFormats > xFormats; 286cdf0e10cSrcweir if (xFormatsSupplier.is()) 287cdf0e10cSrcweir xFormats = xFormatsSupplier->getNumberFormats(); 288cdf0e10cSrcweir OSL_ENSURE(xFormats.is(), "OFormLayerXMLImport_Impl::applyControlNumberStyle: could not obtain the controls number formats!"); 289cdf0e10cSrcweir 290cdf0e10cSrcweir // obtain a key 291cdf0e10cSrcweir if (xFormats.is()) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir sal_Int32 nFormatKey = const_cast<SvXMLNumFormatContext*>(pDataStyle)->CreateAndInsert( xFormatsSupplier ); 294cdf0e10cSrcweir OSL_ENSURE(-1 != nFormatKey, "OFormLayerXMLImport_Impl::applyControlNumberStyle: could not obtain a format key!"); 295cdf0e10cSrcweir 296cdf0e10cSrcweir // set the format on the control model 297cdf0e10cSrcweir _rxControlModel->setPropertyValue(PROPERTY_FORMATKEY, makeAny(nFormatKey)); 298cdf0e10cSrcweir } 299cdf0e10cSrcweir } 300cdf0e10cSrcweir catch(const Exception&) 301cdf0e10cSrcweir { 302cdf0e10cSrcweir OSL_ENSURE(sal_False, "OFormLayerXMLImport_Impl::applyControlNumberStyle: couldn't set the format!"); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir } 305cdf0e10cSrcweir else 306cdf0e10cSrcweir OSL_ENSURE(sal_False, "OFormLayerXMLImport_Impl::applyControlNumberStyle: did not find the style with the given name!"); 307cdf0e10cSrcweir } 308cdf0e10cSrcweir } 309cdf0e10cSrcweir 310cdf0e10cSrcweir //--------------------------------------------------------------------- 311cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerCellValueBinding( const Reference< XPropertySet >& _rxControlModel, const ::rtl::OUString& _rCellAddress ) 312cdf0e10cSrcweir { 313cdf0e10cSrcweir OSL_ENSURE( _rxControlModel.is() && _rCellAddress.getLength(), 314cdf0e10cSrcweir "OFormLayerXMLImport_Impl::registerCellValueBinding: invalid arguments!" ); 315cdf0e10cSrcweir m_aCellValueBindings.push_back( ModelStringPair( _rxControlModel, _rCellAddress ) ); 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir //--------------------------------------------------------------------- 319cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerXFormsValueBinding( 320cdf0e10cSrcweir const Reference< XPropertySet >& _rxControlModel, 321cdf0e10cSrcweir const ::rtl::OUString& _rBindingID ) 322cdf0e10cSrcweir { 323cdf0e10cSrcweir // TODO: is an empty binding name allowed? 324cdf0e10cSrcweir OSL_ENSURE( _rxControlModel.is(), "need model" ); 325cdf0e10cSrcweir 326cdf0e10cSrcweir m_aXFormsValueBindings.push_back( 327cdf0e10cSrcweir ModelStringPair( _rxControlModel, _rBindingID ) ); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir //--------------------------------------------------------------------- 331cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerXFormsListBinding( 332cdf0e10cSrcweir const Reference< XPropertySet >& _rxControlModel, 333cdf0e10cSrcweir const ::rtl::OUString& _rBindingID ) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir // TODO: is an empty binding name allowed? 336cdf0e10cSrcweir OSL_ENSURE( _rxControlModel.is(), "need model" ); 337cdf0e10cSrcweir 338cdf0e10cSrcweir m_aXFormsListBindings.push_back( 339cdf0e10cSrcweir ModelStringPair( _rxControlModel, _rBindingID ) ); 340cdf0e10cSrcweir } 341cdf0e10cSrcweir 342cdf0e10cSrcweir //--------------------------------------------------------------------- 343cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerXFormsSubmission( 344cdf0e10cSrcweir const Reference< XPropertySet >& _rxControlModel, 345cdf0e10cSrcweir const ::rtl::OUString& _rSubmissionID ) 346cdf0e10cSrcweir { 347cdf0e10cSrcweir // TODO: is an empty binding name allowed? 348cdf0e10cSrcweir OSL_ENSURE( _rxControlModel.is(), "need model" ); 349cdf0e10cSrcweir 350cdf0e10cSrcweir m_aXFormsSubmissions.push_back( 351cdf0e10cSrcweir ModelStringPair( _rxControlModel, _rSubmissionID ) ); 352cdf0e10cSrcweir } 353cdf0e10cSrcweir 354cdf0e10cSrcweir //--------------------------------------------------------------------- 355cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerCellRangeListSource( const Reference< XPropertySet >& _rxControlModel, const ::rtl::OUString& _rCellRangeAddress ) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir OSL_ENSURE( _rxControlModel.is() && _rCellRangeAddress.getLength(), 358cdf0e10cSrcweir "OFormLayerXMLImport_Impl::registerCellRangeListSource: invalid arguments!" ); 359cdf0e10cSrcweir m_aCellRangeListSources.push_back( ModelStringPair( _rxControlModel, _rCellRangeAddress ) ); 360cdf0e10cSrcweir } 361cdf0e10cSrcweir //--------------------------------------------------------------------- 362cdf0e10cSrcweir const SvXMLStyleContext* OFormLayerXMLImport_Impl::getStyleElement(const ::rtl::OUString& _rStyleName) const 363cdf0e10cSrcweir { 364cdf0e10cSrcweir OSL_ENSURE( m_pAutoStyles, "OFormLayerXMLImport_Impl::getStyleElement: have no auto style context!" ); 365cdf0e10cSrcweir // did you use setAutoStyleContext? 366cdf0e10cSrcweir 367cdf0e10cSrcweir const SvXMLStyleContext* pControlStyle = 368cdf0e10cSrcweir m_pAutoStyles ? m_pAutoStyles->FindStyleChildContext( XML_STYLE_FAMILY_TEXT_PARAGRAPH, _rStyleName ) : NULL; 369cdf0e10cSrcweir OSL_ENSURE( pControlStyle || !m_pAutoStyles, 370cdf0e10cSrcweir ::rtl::OString( "OFormLayerXMLImport_Impl::getStyleElement: did not find the style named \"" ) 371cdf0e10cSrcweir += ::rtl::OString( _rStyleName.getStr(), _rStyleName.getLength(), RTL_TEXTENCODING_ASCII_US ) 372cdf0e10cSrcweir += ::rtl::OString( "\"!" ) ); 373cdf0e10cSrcweir return pControlStyle; 374cdf0e10cSrcweir } 375cdf0e10cSrcweir 376cdf0e10cSrcweir //--------------------------------------------------------------------- 377cdf0e10cSrcweir void OFormLayerXMLImport_Impl::enterEventContext() 378cdf0e10cSrcweir { 379cdf0e10cSrcweir // install our own translation table. We need to disable the other tables because of name conflicts. 380cdf0e10cSrcweir m_rImporter.GetEventImport().PushTranslationTable(); 381cdf0e10cSrcweir m_rImporter.GetEventImport().AddTranslationTable(g_pFormsEventTranslation); 382cdf0e10cSrcweir } 383cdf0e10cSrcweir 384cdf0e10cSrcweir //--------------------------------------------------------------------- 385cdf0e10cSrcweir void OFormLayerXMLImport_Impl::leaveEventContext() 386cdf0e10cSrcweir { 387cdf0e10cSrcweir // install the original event tables. 388cdf0e10cSrcweir m_rImporter.GetEventImport().PopTranslationTable(); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir 391cdf0e10cSrcweir //--------------------------------------------------------------------- 392cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerControlId(const Reference< XPropertySet >& _rxControl, const ::rtl::OUString& _rId) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir OSL_ENSURE(m_aCurrentPageIds != m_aControlIds.end(), "OFormLayerXMLImport_Impl::registerControlId: no current page!"); 395cdf0e10cSrcweir OSL_ENSURE(_rId.getLength(), "OFormLayerXMLImport_Impl::registerControlId: invalid (empty) control id!"); 396cdf0e10cSrcweir 397cdf0e10cSrcweir OSL_ENSURE(m_aCurrentPageIds->second.end() == m_aCurrentPageIds->second.find(_rId), "OFormLayerXMLImport_Impl::registerControlId: control id already used!"); 398cdf0e10cSrcweir m_aCurrentPageIds->second[_rId] = _rxControl; 399cdf0e10cSrcweir } 400cdf0e10cSrcweir 401cdf0e10cSrcweir //--------------------------------------------------------------------- 402cdf0e10cSrcweir void OFormLayerXMLImport_Impl::registerControlReferences(const Reference< XPropertySet >& _rxControl, const ::rtl::OUString& _rReferringControls) 403cdf0e10cSrcweir { 404cdf0e10cSrcweir OSL_ENSURE(_rReferringControls.getLength(), "OFormLayerXMLImport_Impl::registerControlReferences: invalid (empty) control id list!"); 405cdf0e10cSrcweir OSL_ENSURE(_rxControl.is(), "OFormLayerXMLImport_Impl::registerControlReferences: invalid (NULL) control!"); 406cdf0e10cSrcweir m_aControlReferences.push_back( ModelStringPair( _rxControl, _rReferringControls ) ); 407cdf0e10cSrcweir } 408cdf0e10cSrcweir 409cdf0e10cSrcweir //--------------------------------------------------------------------- 410cdf0e10cSrcweir void OFormLayerXMLImport_Impl::startPage(const Reference< XDrawPage >& _rxDrawPage) 411cdf0e10cSrcweir { 412cdf0e10cSrcweir m_xCurrentPageFormsSupp.clear(); 413cdf0e10cSrcweir 414cdf0e10cSrcweir OSL_ENSURE(_rxDrawPage.is(), "OFormLayerXMLImport_Impl::startPage: NULL page!"); 415cdf0e10cSrcweir m_xCurrentPageFormsSupp = m_xCurrentPageFormsSupp.query( _rxDrawPage ); 416cdf0e10cSrcweir OSL_ENSURE( m_xCurrentPageFormsSupp.is(), "OFormLayerXMLImport_Impl::startPage: invalid draw page (no XFormsSupplier)!" ); 417cdf0e10cSrcweir if ( !m_xCurrentPageFormsSupp.is() ) 418cdf0e10cSrcweir return; 419cdf0e10cSrcweir 420cdf0e10cSrcweir // add a new entry to our page map 421cdf0e10cSrcweir ::std::pair< MapDrawPage2MapIterator, bool > aPagePosition; 422cdf0e10cSrcweir aPagePosition = 423cdf0e10cSrcweir m_aControlIds.insert(MapDrawPage2Map::value_type(_rxDrawPage, MapString2PropertySet())); 424cdf0e10cSrcweir OSL_ENSURE(aPagePosition.second, "OFormLayerXMLImport_Impl::startPage: already imported this page!"); 425cdf0e10cSrcweir m_aCurrentPageIds = aPagePosition.first; 426cdf0e10cSrcweir } 427cdf0e10cSrcweir 428cdf0e10cSrcweir //--------------------------------------------------------------------- 429cdf0e10cSrcweir void OFormLayerXMLImport_Impl::endPage() 430cdf0e10cSrcweir { 431cdf0e10cSrcweir OSL_ENSURE( m_xCurrentPageFormsSupp.is(), "OFormLayerXMLImport_Impl::endPage: sure you called startPage before?" ); 432cdf0e10cSrcweir 433cdf0e10cSrcweir // do some knittings for the controls which are referring to each other 434cdf0e10cSrcweir try 435cdf0e10cSrcweir { 436cdf0e10cSrcweir static const sal_Unicode s_nSeparator = ','; 437cdf0e10cSrcweir ::rtl::OUString sReferring; 438cdf0e10cSrcweir ::rtl::OUString sCurrentReferring; 439cdf0e10cSrcweir ::rtl::OUString sSeparator(&s_nSeparator, 1); 440cdf0e10cSrcweir Reference< XPropertySet > xCurrentReferring; 441cdf0e10cSrcweir sal_Int32 nSeparator, nPrevSep; 442cdf0e10cSrcweir ::std::vector< ModelStringPair >::const_iterator aEnd = m_aControlReferences.end(); 443cdf0e10cSrcweir for ( ::std::vector< ModelStringPair >::const_iterator aReferences = m_aControlReferences.begin(); 444cdf0e10cSrcweir aReferences != aEnd; 445cdf0e10cSrcweir ++aReferences 446cdf0e10cSrcweir ) 447cdf0e10cSrcweir { 448cdf0e10cSrcweir // the list of control ids is comma separated 449cdf0e10cSrcweir 450cdf0e10cSrcweir // in a list of n ids there are only n-1 separators ... have to catch this last id 451cdf0e10cSrcweir // -> normalize the list 452cdf0e10cSrcweir sReferring = aReferences->second; 453cdf0e10cSrcweir sReferring += sSeparator; 454cdf0e10cSrcweir 455cdf0e10cSrcweir nPrevSep = -1; 456cdf0e10cSrcweir while (-1 != (nSeparator = sReferring.indexOf(s_nSeparator, nPrevSep + 1))) 457cdf0e10cSrcweir { 458cdf0e10cSrcweir sCurrentReferring = sReferring.copy(nPrevSep + 1, nSeparator - nPrevSep - 1); 459cdf0e10cSrcweir xCurrentReferring = lookupControlId(sCurrentReferring); 460cdf0e10cSrcweir if (xCurrentReferring.is()) 461cdf0e10cSrcweir // if this condition fails, this is an error, but lookupControlId should have asserted this ... 462cdf0e10cSrcweir xCurrentReferring->setPropertyValue( PROPERTY_CONTROLLABEL, makeAny( aReferences->first ) ); 463cdf0e10cSrcweir 464cdf0e10cSrcweir nPrevSep = nSeparator; 465cdf0e10cSrcweir } 466cdf0e10cSrcweir } 467cdf0e10cSrcweir } 468cdf0e10cSrcweir catch(Exception&) 469cdf0e10cSrcweir { 470cdf0e10cSrcweir OSL_ENSURE(sal_False, "OFormLayerXMLImport_Impl::endPage: unable to knit the control references (caught an exception)!"); 471cdf0e10cSrcweir } 472cdf0e10cSrcweir 473cdf0e10cSrcweir // now that we have all children of the forms collection, attach the events 474cdf0e10cSrcweir Reference< XIndexAccess > xIndexContainer; 475cdf0e10cSrcweir if ( m_xCurrentPageFormsSupp.is() && m_xCurrentPageFormsSupp->hasForms() ) 476cdf0e10cSrcweir xIndexContainer = xIndexContainer.query( m_xCurrentPageFormsSupp->getForms() ); 477cdf0e10cSrcweir if ( xIndexContainer.is() ) 478cdf0e10cSrcweir ODefaultEventAttacherManager::setEvents( xIndexContainer ); 479cdf0e10cSrcweir 480cdf0e10cSrcweir // clear the structures for the control references. 481cdf0e10cSrcweir m_aControlReferences.clear(); 482cdf0e10cSrcweir 483cdf0e10cSrcweir // and no we have no current page anymore 484cdf0e10cSrcweir m_aCurrentPageIds = m_aControlIds.end(); 485cdf0e10cSrcweir } 486cdf0e10cSrcweir 487cdf0e10cSrcweir //--------------------------------------------------------------------- 488cdf0e10cSrcweir Reference< XPropertySet > OFormLayerXMLImport_Impl::lookupControlId(const ::rtl::OUString& _rControlId) 489cdf0e10cSrcweir { 490cdf0e10cSrcweir OSL_ENSURE(m_aCurrentPageIds != m_aControlIds.end(), "OFormLayerXMLImport_Impl::lookupControlId: no current page!"); 491cdf0e10cSrcweir Reference< XPropertySet > xReturn; 492cdf0e10cSrcweir if (m_aCurrentPageIds != m_aControlIds.end()) 493cdf0e10cSrcweir { 494cdf0e10cSrcweir ConstMapString2PropertySetIterator aPos = m_aCurrentPageIds->second.find(_rControlId); 495cdf0e10cSrcweir if (m_aCurrentPageIds->second.end() != aPos) 496cdf0e10cSrcweir xReturn = aPos->second; 497cdf0e10cSrcweir else 498cdf0e10cSrcweir OSL_ENSURE(sal_False, "OFormLayerXMLImport_Impl::lookupControlId: invalid control id (did not find it)!"); 499cdf0e10cSrcweir } 500cdf0e10cSrcweir return xReturn; 501cdf0e10cSrcweir } 502cdf0e10cSrcweir 503cdf0e10cSrcweir //--------------------------------------------------------------------- 504cdf0e10cSrcweir SvXMLImportContext* OFormLayerXMLImport_Impl::createOfficeFormsContext( 505cdf0e10cSrcweir SvXMLImport& _rImport, 506cdf0e10cSrcweir sal_uInt16 _nPrefix, 507cdf0e10cSrcweir const rtl::OUString& _rLocalName) 508cdf0e10cSrcweir { 509cdf0e10cSrcweir return new OFormsRootImport( _rImport, _nPrefix, _rLocalName ); 510cdf0e10cSrcweir } 511cdf0e10cSrcweir 512cdf0e10cSrcweir //--------------------------------------------------------------------- 513cdf0e10cSrcweir SvXMLImportContext* OFormLayerXMLImport_Impl::createContext(const sal_uInt16 _nPrefix, const rtl::OUString& _rLocalName, 514cdf0e10cSrcweir const Reference< sax::XAttributeList >&) 515cdf0e10cSrcweir { 516cdf0e10cSrcweir SvXMLImportContext* pContext = NULL; 517cdf0e10cSrcweir if ( 0 == _rLocalName.compareToAscii( "form" ) ) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir if ( m_xCurrentPageFormsSupp.is() ) 520cdf0e10cSrcweir pContext = new OFormImport(*this, *this, _nPrefix, _rLocalName, m_xCurrentPageFormsSupp->getForms() ); 521cdf0e10cSrcweir } 522cdf0e10cSrcweir else if ( ( _nPrefix == XML_NAMESPACE_XFORMS 523cdf0e10cSrcweir && ( xmloff::token::IsXMLToken( _rLocalName, xmloff::token::XML_MODEL ) ) ) 524cdf0e10cSrcweir ) 525cdf0e10cSrcweir { 526cdf0e10cSrcweir pContext = createXFormsModelContext( m_rImporter, _nPrefix, _rLocalName ); 527cdf0e10cSrcweir } 528cdf0e10cSrcweir 529cdf0e10cSrcweir if ( !pContext ) 530cdf0e10cSrcweir { 531cdf0e10cSrcweir OSL_ENSURE( false, "unknown element" ); 532cdf0e10cSrcweir pContext = 533cdf0e10cSrcweir new SvXMLImportContext(m_rImporter, _nPrefix, _rLocalName); 534cdf0e10cSrcweir } 535cdf0e10cSrcweir 536cdf0e10cSrcweir return pContext; 537cdf0e10cSrcweir } 538cdf0e10cSrcweir 539cdf0e10cSrcweir //--------------------------------------------------------------------- 540cdf0e10cSrcweir void OFormLayerXMLImport_Impl::seekPage(const Reference< XDrawPage >& _rxDrawPage) 541cdf0e10cSrcweir { 542cdf0e10cSrcweir OSL_ENSURE(m_aCurrentPageIds == m_aControlIds.end(), "OFormLayerXMLImport_Impl::seekPage: importing another page currently! This will smash your import!"); 543cdf0e10cSrcweir m_aCurrentPageIds = m_aControlIds.find(_rxDrawPage); 544cdf0e10cSrcweir OSL_ENSURE(m_aCurrentPageIds != m_aControlIds.end(), "OFormLayerXMLImport_Impl::seekPage: did not find the given page (perhaps it has not been imported, yet?)!"); 545cdf0e10cSrcweir } 546cdf0e10cSrcweir 547cdf0e10cSrcweir //--------------------------------------------------------------------- 548cdf0e10cSrcweir void OFormLayerXMLImport_Impl::documentDone( ) 549cdf0e10cSrcweir { 550cdf0e10cSrcweir SvXMLImport& rImport = getGlobalContext(); 551cdf0e10cSrcweir if ( ( rImport.getImportFlags() & IMPORT_CONTENT ) == 0 ) 552cdf0e10cSrcweir return; 553cdf0e10cSrcweir 554cdf0e10cSrcweir // create (and bind) the spreadsheet cell bindings 555cdf0e10cSrcweir if ( !m_aCellValueBindings.empty() 556cdf0e10cSrcweir && FormCellBindingHelper::isCellBindingAllowed( rImport.GetModel() ) 557cdf0e10cSrcweir ) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir static ::rtl::OUString s_sIndex( RTL_CONSTASCII_USTRINGPARAM( ":index" ) ); 560cdf0e10cSrcweir ::std::vector< ModelStringPair >::const_iterator aEnd = m_aCellValueBindings.end(); 561cdf0e10cSrcweir for ( ::std::vector< ModelStringPair >::const_iterator aCellBindings = m_aCellValueBindings.begin(); 562cdf0e10cSrcweir aCellBindings != aEnd; 563cdf0e10cSrcweir ++aCellBindings 564cdf0e10cSrcweir ) 565cdf0e10cSrcweir { 566cdf0e10cSrcweir try 567cdf0e10cSrcweir { 568cdf0e10cSrcweir FormCellBindingHelper aHelper( aCellBindings->first, rImport.GetModel() ); 569cdf0e10cSrcweir OSL_ENSURE( aHelper.isCellBindingAllowed(), "OFormLayerXMLImport_Impl::documentDone: can't bind this control model!" ); 570cdf0e10cSrcweir if ( aHelper.isCellBindingAllowed() ) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir // There are special bindings for listboxes. See 573cdf0e10cSrcweir // OListAndComboImport::doRegisterCellValueBinding for a comment on this HACK. 574cdf0e10cSrcweir ::rtl::OUString sBoundCellAddress( aCellBindings->second ); 575cdf0e10cSrcweir sal_Int32 nIndicator = sBoundCellAddress.lastIndexOf( s_sIndex ); 576cdf0e10cSrcweir 577cdf0e10cSrcweir bool bUseIndexBinding = false; 578cdf0e10cSrcweir if ( nIndicator != -1 ) 579cdf0e10cSrcweir { 580cdf0e10cSrcweir sBoundCellAddress = sBoundCellAddress.copy( 0, nIndicator ); 581cdf0e10cSrcweir bUseIndexBinding = true; 582cdf0e10cSrcweir } 583cdf0e10cSrcweir 584cdf0e10cSrcweir aHelper.setBinding( aHelper.createCellBindingFromStringAddress( sBoundCellAddress, bUseIndexBinding ) ); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir } 587cdf0e10cSrcweir catch( const Exception& ) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir OSL_ENSURE( sal_False, "OFormLayerXMLImport_Impl::documentDone: caught an exception while binding to a cell!" ); 590cdf0e10cSrcweir } 591cdf0e10cSrcweir } 592cdf0e10cSrcweir m_aCellValueBindings.clear(); 593cdf0e10cSrcweir } 594cdf0e10cSrcweir 595cdf0e10cSrcweir // the same for the spreadsheet cell range list sources 596cdf0e10cSrcweir if ( !m_aCellRangeListSources.empty() 597cdf0e10cSrcweir && FormCellBindingHelper::isListCellRangeAllowed( rImport.GetModel() ) 598cdf0e10cSrcweir ) 599cdf0e10cSrcweir { 600cdf0e10cSrcweir for ( ::std::vector< ModelStringPair >::const_iterator aRangeBindings = m_aCellRangeListSources.begin(); 601cdf0e10cSrcweir aRangeBindings != m_aCellRangeListSources.end(); 602cdf0e10cSrcweir ++aRangeBindings 603cdf0e10cSrcweir ) 604cdf0e10cSrcweir { 605cdf0e10cSrcweir try 606cdf0e10cSrcweir { 607cdf0e10cSrcweir FormCellBindingHelper aHelper( aRangeBindings->first, rImport.GetModel() ); 608cdf0e10cSrcweir OSL_ENSURE( aHelper.isListCellRangeAllowed(), "OFormLayerXMLImport_Impl::documentDone: can't bind this control model!" ); 609cdf0e10cSrcweir if ( aHelper.isListCellRangeAllowed() ) 610cdf0e10cSrcweir { 611cdf0e10cSrcweir aHelper.setListSource( aHelper.createCellListSourceFromStringAddress( aRangeBindings->second ) ); 612cdf0e10cSrcweir } 613cdf0e10cSrcweir } 614cdf0e10cSrcweir catch( const Exception& ) 615cdf0e10cSrcweir { 616cdf0e10cSrcweir OSL_ENSURE( sal_False, "OFormLayerXMLImport_Impl::documentDone: caught an exception while binding to a cell range!" ); 617cdf0e10cSrcweir } 618cdf0e10cSrcweir } 619cdf0e10cSrcweir m_aCellRangeListSources.clear(); 620cdf0e10cSrcweir } 621cdf0e10cSrcweir 622cdf0e10cSrcweir // process XForms-bindings; call registerXFormsValueBinding for each 623cdf0e10cSrcweir std::for_each( m_aXFormsValueBindings.begin(), 624cdf0e10cSrcweir m_aXFormsValueBindings.end(), 625cdf0e10cSrcweir bind1st( ptr_fun( bindXFormsValueBinding ), 626cdf0e10cSrcweir rImport.GetModel() ) ); 627cdf0e10cSrcweir // same for list bindings 628cdf0e10cSrcweir std::for_each( m_aXFormsListBindings.begin(), 629cdf0e10cSrcweir m_aXFormsListBindings.end(), 630cdf0e10cSrcweir bind1st( ptr_fun( bindXFormsListBinding ), 631cdf0e10cSrcweir rImport.GetModel() ) ); 632cdf0e10cSrcweir // same for submissions 633cdf0e10cSrcweir std::for_each( m_aXFormsSubmissions.begin(), 634cdf0e10cSrcweir m_aXFormsSubmissions.end(), 635cdf0e10cSrcweir bind1st( ptr_fun( bindXFormsSubmission ), 636cdf0e10cSrcweir rImport.GetModel() ) ); 637cdf0e10cSrcweir } 638cdf0e10cSrcweir 639cdf0e10cSrcweir //......................................................................... 640cdf0e10cSrcweir } // namespace xmloff 641cdf0e10cSrcweir //......................................................................... 642cdf0e10cSrcweir 643