1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_xmloff.hxx" 30 #include "formattributes.hxx" 31 #include "xmloff/xmlnmspe.hxx" 32 #include <xmloff/xmluconv.hxx> 33 #include <rtl/ustrbuf.hxx> 34 #include <rtl/logfile.hxx> 35 //......................................................................... 36 namespace xmloff 37 { 38 //......................................................................... 39 40 using namespace ::com::sun::star::uno; 41 using namespace ::com::sun::star::lang; 42 using namespace ::com::sun::star::beans; 43 44 45 //===================================================================== 46 //= OAttributeMetaData 47 //===================================================================== 48 //--------------------------------------------------------------------- 49 const sal_Char* OAttributeMetaData::getCommonControlAttributeName(sal_Int32 _nId) 50 { 51 switch (_nId) 52 { 53 case CCA_NAME: return "name"; 54 case CCA_SERVICE_NAME: return "control-implementation"; 55 case CCA_BUTTON_TYPE: return "button-type"; 56 // disabled(AddAttributeIdLegacy) case CCA_CONTROL_ID: return "id"; 57 case CCA_CURRENT_SELECTED: return "current-selected"; 58 case CCA_CURRENT_VALUE: return "current-value"; 59 case CCA_DISABLED: return "disabled"; 60 case CCA_ENABLEVISIBLE: return "visible"; 61 case CCA_DROPDOWN: return "dropdown"; 62 case CCA_FOR: return "for"; 63 case CCA_IMAGE_DATA: return "image-data"; 64 case CCA_LABEL: return "label"; 65 case CCA_MAX_LENGTH: return "max-length"; 66 case CCA_PRINTABLE: return "printable"; 67 case CCA_READONLY: return "readonly"; 68 case CCA_SELECTED: return "selected"; 69 case CCA_SIZE: return "size"; 70 case CCA_TAB_INDEX: return "tab-index"; 71 case CCA_TARGET_FRAME: return "target-frame"; 72 case CCA_TARGET_LOCATION: return "href"; // the only special thing here: TargetLocation is represented by an xlink:href attribute 73 case CCA_TAB_STOP: return "tab-stop"; 74 case CCA_TITLE: return "title"; 75 case CCA_VALUE: return "value"; 76 case CCA_ORIENTATION: return "orientation"; 77 case CCA_VISUAL_EFFECT: return "visual-effect"; 78 default: 79 OSL_ENSURE(sal_False, "OAttributeMetaData::getCommonControlAttributeName: invalid id (maybe you or-ed two flags?)!"); 80 } 81 return ""; 82 } 83 84 //--------------------------------------------------------------------- 85 sal_uInt16 OAttributeMetaData::getCommonControlAttributeNamespace(sal_Int32 _nId) 86 { 87 if (CCA_TARGET_LOCATION == _nId) 88 return XML_NAMESPACE_XLINK; 89 90 if (CCA_TARGET_FRAME == _nId) 91 return XML_NAMESPACE_OFFICE; 92 93 return XML_NAMESPACE_FORM; 94 } 95 96 //--------------------------------------------------------------------- 97 const sal_Char* OAttributeMetaData::getFormAttributeName(FormAttributes _eAttrib) 98 { 99 switch (_eAttrib) 100 { 101 case faName: return "name"; 102 case faServiceName: return "service-name"; 103 case faAction: return "href"; // the only special thing here: Action is represented by an xlink:href attribute 104 case faEnctype: return "enctype"; 105 case faMethod: return "method"; 106 case faTargetFrame: return "target-frame"; 107 case faAllowDeletes: return "allow-deletes"; 108 case faAllowInserts: return "allow-inserts"; 109 case faAllowUpdates: return "allow-updates"; 110 case faApplyFilter: return "apply-filter"; 111 case faCommand: return "command"; 112 case faCommandType: return "command-type"; 113 case faEscapeProcessing: return "escape-processing"; 114 case faDatasource: return "datasource"; 115 case faConnectionResource: return "connection-resource"; 116 case faDetailFiels: return "detail-fields"; 117 case faFilter: return "filter"; 118 case faIgnoreResult: return "ignore-result"; 119 case faMasterFields: return "master-fields"; 120 case faNavigationMode: return "navigation-mode"; 121 case faOrder: return "order"; 122 case faTabbingCycle: return "tab-cycle"; 123 default: 124 OSL_ENSURE(sal_False, "OAttributeMetaData::getFormAttributeName: invalid id!"); 125 } 126 return ""; 127 } 128 129 //--------------------------------------------------------------------- 130 sal_uInt16 OAttributeMetaData::getFormAttributeNamespace(FormAttributes _eAttrib) 131 { 132 if (faAction == _eAttrib) 133 return XML_NAMESPACE_XLINK; 134 135 if (faTargetFrame == _eAttrib) 136 return XML_NAMESPACE_OFFICE; 137 138 return XML_NAMESPACE_FORM; 139 } 140 141 //--------------------------------------------------------------------- 142 const sal_Char* OAttributeMetaData::getDatabaseAttributeName(sal_Int32 _nId) 143 { 144 switch (_nId) 145 { 146 case DA_BOUND_COLUMN: return "bound-column"; 147 case DA_CONVERT_EMPTY: return "convert-empty-to-null"; 148 case DA_DATA_FIELD: return "data-field"; 149 case DA_LIST_SOURCE: return "list-source"; 150 case DA_LIST_SOURCE_TYPE: return "list-source-type"; 151 case DA_INPUT_REQUIRED: return "input-required"; 152 default: 153 OSL_ENSURE(sal_False, "OAttributeMetaData::getDatabaseAttributeName: invalid id (maybe you or-ed two flags?)!"); 154 } 155 return ""; 156 } 157 158 //--------------------------------------------------------------------- 159 sal_uInt16 OAttributeMetaData::getDatabaseAttributeNamespace(sal_Int32 /*_nId*/) 160 { 161 // nothing special here 162 return XML_NAMESPACE_FORM; 163 } 164 165 //--------------------------------------------------------------------- 166 const sal_Char* OAttributeMetaData::getBindingAttributeName(sal_Int32 _nId) 167 { 168 switch (_nId) 169 { 170 case BA_LINKED_CELL: return "linked-cell"; 171 case BA_LIST_LINKING_TYPE: return "list-linkage-type"; 172 case BA_LIST_CELL_RANGE: return "source-cell-range"; 173 default: 174 OSL_ENSURE(sal_False, "OAttributeMetaData::getBindingAttributeName: invalid id (maybe you or-ed two flags?)!"); 175 } 176 return ""; 177 } 178 179 //--------------------------------------------------------------------- 180 sal_uInt16 OAttributeMetaData::getBindingAttributeNamespace(sal_Int32) 181 { 182 // nothing special here 183 return XML_NAMESPACE_FORM; 184 } 185 186 //--------------------------------------------------------------------- 187 const sal_Char* OAttributeMetaData::getSpecialAttributeName(sal_Int32 _nId) 188 { 189 switch (_nId) 190 { 191 case SCA_ECHO_CHAR: return "echo-char"; 192 case SCA_MAX_VALUE: return "max-value"; 193 case SCA_MIN_VALUE: return "min-value"; 194 case SCA_VALIDATION: return "validation"; 195 case SCA_MULTI_LINE: return "multi-line"; 196 case SCA_AUTOMATIC_COMPLETION: return "auto-complete"; 197 case SCA_MULTIPLE: return "multiple"; 198 case SCA_DEFAULT_BUTTON: return "default-button"; 199 case SCA_CURRENT_STATE: return "current-state"; 200 case SCA_IS_TRISTATE: return "is-tristate"; 201 case SCA_STATE: return "state"; 202 case SCA_COLUMN_STYLE_NAME: return "text-style-name"; 203 case SCA_STEP_SIZE: return "step-size"; 204 case SCA_PAGE_STEP_SIZE: return "page-step-size"; 205 case SCA_REPEAT_DELAY: return "delay-for-repeat"; 206 case SCA_TOGGLE: return "toggle"; 207 case SCA_FOCUS_ON_CLICK: return "focus-on-click"; 208 default: 209 OSL_ENSURE(sal_False, "OAttributeMetaData::getSpecialAttributeName: invalid id (maybe you or-ed two flags?)!"); 210 } 211 return ""; 212 } 213 214 //--------------------------------------------------------------------- 215 sal_uInt16 OAttributeMetaData::getSpecialAttributeNamespace(sal_Int32 /*_nId*/) 216 { 217 // nothing special here 218 return XML_NAMESPACE_FORM; 219 } 220 221 //--------------------------------------------------------------------- 222 const sal_Char* OAttributeMetaData::getOfficeFormsAttributeName(OfficeFormsAttributes _eAttrib) 223 { 224 switch (_eAttrib) 225 { 226 case ofaAutomaticFocus: return "automatic-focus"; 227 case ofaApplyDesignMode: return "apply-design-mode"; 228 default: 229 OSL_ENSURE(sal_False, "OAttributeMetaData::getOfficeFormsAttributeName: invalid id!"); 230 } 231 return ""; 232 } 233 234 //--------------------------------------------------------------------- 235 sal_uInt16 OAttributeMetaData::getOfficeFormsAttributeNamespace(OfficeFormsAttributes /* _eAttrib */) 236 { 237 // nothing special here 238 return XML_NAMESPACE_FORM; 239 } 240 241 //===================================================================== 242 //= OAttribute2Property 243 //===================================================================== 244 //--------------------------------------------------------------------- 245 OAttribute2Property::OAttribute2Property() 246 { 247 } 248 249 //--------------------------------------------------------------------- 250 OAttribute2Property::~OAttribute2Property() 251 { 252 } 253 254 //--------------------------------------------------------------------- 255 const OAttribute2Property::AttributeAssignment* OAttribute2Property::getAttributeTranslation( 256 const ::rtl::OUString& _rAttribName) 257 { 258 ConstAttributeAssignmentsIterator aPos = m_aKnownProperties.find(_rAttribName); 259 if (m_aKnownProperties.end() != aPos) 260 return &aPos->second; 261 return NULL; 262 } 263 264 //--------------------------------------------------------------------- 265 void OAttribute2Property::addStringProperty( 266 const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, 267 const sal_Char* _pAttributeDefault) 268 { 269 implAdd(_pAttributeName, _rPropertyName, ::getCppuType( static_cast< ::rtl::OUString* >(NULL) ), 270 _pAttributeDefault ? ::rtl::OUString::createFromAscii(_pAttributeDefault) : ::rtl::OUString()); 271 } 272 273 //--------------------------------------------------------------------- 274 void OAttribute2Property::addBooleanProperty( 275 const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, 276 const sal_Bool _bAttributeDefault, const sal_Bool _bInverseSemantics) 277 { 278 ::rtl::OUStringBuffer aDefault; 279 SvXMLUnitConverter::convertBool(aDefault, _bAttributeDefault); 280 AttributeAssignment& aAssignment = implAdd(_pAttributeName, _rPropertyName, ::getBooleanCppuType(), aDefault.makeStringAndClear()); 281 aAssignment.bInverseSemantics = _bInverseSemantics; 282 } 283 284 //--------------------------------------------------------------------- 285 void OAttribute2Property::addInt16Property( 286 const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, 287 const sal_Int16 _nAttributeDefault) 288 { 289 ::rtl::OUStringBuffer aDefault; 290 SvXMLUnitConverter::convertNumber(aDefault, (sal_Int32)_nAttributeDefault); 291 implAdd(_pAttributeName, _rPropertyName, ::getCppuType( static_cast< sal_Int16* >(NULL) ), aDefault.makeStringAndClear()); 292 } 293 294 //--------------------------------------------------------------------- 295 void OAttribute2Property::addInt32Property( 296 const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, 297 const sal_Int32 _nAttributeDefault) 298 { 299 ::rtl::OUStringBuffer aDefault; 300 SvXMLUnitConverter::convertNumber( aDefault, _nAttributeDefault ); 301 implAdd( _pAttributeName, _rPropertyName, ::getCppuType( static_cast< sal_Int32* >(NULL) ), aDefault.makeStringAndClear() ); 302 } 303 304 //--------------------------------------------------------------------- 305 void OAttribute2Property::addEnumProperty( 306 const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, 307 const sal_uInt16 _nAttributeDefault, const SvXMLEnumMapEntry* _pValueMap, 308 const ::com::sun::star::uno::Type* _pType) 309 { 310 ::rtl::OUStringBuffer aDefault; 311 SvXMLUnitConverter::convertEnum(aDefault, _nAttributeDefault, _pValueMap); 312 AttributeAssignment& aAssignment = implAdd(_pAttributeName, _rPropertyName, 313 _pType ? *_pType : ::getCppuType( static_cast< sal_Int32* >(NULL) ), 314 // this assumes that the setPropertyValue for enums can handle int32's .... 315 aDefault.makeStringAndClear()); 316 aAssignment.pEnumMap = _pValueMap; 317 } 318 319 //--------------------------------------------------------------------- 320 OAttribute2Property::AttributeAssignment& OAttribute2Property::implAdd( 321 const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, 322 const ::com::sun::star::uno::Type& _rType, const ::rtl::OUString& /*_rDefaultString*/) 323 { 324 OSL_ENSURE(m_aKnownProperties.end() == m_aKnownProperties.find(::rtl::OUString::createFromAscii(_pAttributeName)), 325 "OAttribute2Property::implAdd: already have this attribute!"); 326 327 ::rtl::OUString sAttributeName = ::rtl::OUString::createFromAscii(_pAttributeName); 328 329 AttributeAssignment aAssignment; 330 aAssignment.sAttributeName = sAttributeName; 331 aAssignment.sPropertyName = _rPropertyName; 332 aAssignment.aPropertyType = _rType; 333 334 // redundance, the accessor is stored in aAssignment.sAttributeName, too 335 return m_aKnownProperties[sAttributeName] = aAssignment; 336 } 337 338 //......................................................................... 339 } // namespace xmloff 340 //......................................................................... 341 342