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_sc.hxx" 26 27 28 29 #include <svl/itemprop.hxx> 30 31 #include <com/sun/star/util/Date.hpp> 32 33 #include "optuno.hxx" 34 #include "miscuno.hxx" 35 #include "unonames.hxx" 36 #include "docoptio.hxx" 37 #include "unoguard.hxx" 38 39 using namespace com::sun::star; 40 41 //------------------------------------------------------------------------ 42 // static 43 const SfxItemPropertyMapEntry* ScDocOptionsHelper::GetPropertyMap() 44 { 45 static SfxItemPropertyMapEntry aMap[] = 46 { 47 {MAP_CHAR_LEN(SC_UNO_CALCASSHOWN), PROP_UNO_CALCASSHOWN , &getBooleanCppuType(), 0, 0}, 48 {MAP_CHAR_LEN(SC_UNO_DEFTABSTOP), PROP_UNO_DEFTABSTOP , &getCppuType((sal_Int16*)0), 0, 0}, 49 {MAP_CHAR_LEN(SC_UNO_IGNORECASE), PROP_UNO_IGNORECASE , &getBooleanCppuType(), 0, 0}, 50 {MAP_CHAR_LEN(SC_UNO_ITERENABLED), PROP_UNO_ITERENABLED , &getBooleanCppuType(), 0, 0}, 51 {MAP_CHAR_LEN(SC_UNO_ITERCOUNT), PROP_UNO_ITERCOUNT , &getCppuType((sal_Int32*)0), 0, 0}, 52 {MAP_CHAR_LEN(SC_UNO_ITEREPSILON), PROP_UNO_ITEREPSILON , &getCppuType((double*)0), 0, 0}, 53 {MAP_CHAR_LEN(SC_UNO_LOOKUPLABELS), PROP_UNO_LOOKUPLABELS, &getBooleanCppuType(), 0, 0}, 54 {MAP_CHAR_LEN(SC_UNO_MATCHWHOLE), PROP_UNO_MATCHWHOLE , &getBooleanCppuType(), 0, 0}, 55 {MAP_CHAR_LEN(SC_UNO_NULLDATE), PROP_UNO_NULLDATE , &getCppuType((util::Date*)0), 0, 0}, 56 {MAP_CHAR_LEN(SC_UNO_SPELLONLINE), PROP_UNO_SPELLONLINE , &getBooleanCppuType(), 0, 0}, 57 {MAP_CHAR_LEN(SC_UNO_STANDARDDEC), PROP_UNO_STANDARDDEC , &getCppuType((sal_Int16*)0), 0, 0}, 58 {MAP_CHAR_LEN(SC_UNO_REGEXENABLED), PROP_UNO_REGEXENABLED, &getBooleanCppuType(), 0, 0}, 59 {0,0,0,0,0,0} 60 }; 61 return aMap; 62 } 63 64 // static 65 sal_Bool ScDocOptionsHelper::setPropertyValue( ScDocOptions& rOptions, 66 const SfxItemPropertyMap& rPropMap, 67 const rtl::OUString& aPropertyName, const uno::Any& aValue ) 68 { 69 //! use map (with new identifiers) 70 71 const SfxItemPropertySimpleEntry* pEntry = rPropMap.getByName(aPropertyName ); 72 if( !pEntry || !pEntry->nWID ) 73 return sal_False; 74 switch( pEntry->nWID ) 75 { 76 case PROP_UNO_CALCASSHOWN : 77 rOptions.SetCalcAsShown( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 78 break; 79 case PROP_UNO_DEFTABSTOP : 80 { 81 sal_Int16 nIntVal = 0; 82 if ( aValue >>= nIntVal ) 83 rOptions.SetTabDistance( nIntVal ); 84 } 85 break; 86 case PROP_UNO_IGNORECASE : 87 rOptions.SetIgnoreCase( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 88 break; 89 case PROP_UNO_ITERENABLED: 90 rOptions.SetIter( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 91 break; 92 case PROP_UNO_ITERCOUNT : 93 { 94 sal_Int32 nIntVal = 0; 95 if ( aValue >>= nIntVal ) 96 rOptions.SetIterCount( (sal_uInt16)nIntVal ); 97 } 98 break; 99 case PROP_UNO_ITEREPSILON : 100 { 101 double fDoubleVal = 0; 102 if ( aValue >>= fDoubleVal ) 103 rOptions.SetIterEps( fDoubleVal ); 104 } 105 break; 106 case PROP_UNO_LOOKUPLABELS : 107 rOptions.SetLookUpColRowNames( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 108 break; 109 case PROP_UNO_MATCHWHOLE : 110 rOptions.SetMatchWholeCell( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 111 break; 112 case PROP_UNO_NULLDATE: 113 { 114 util::Date aDate; 115 if ( aValue >>= aDate ) 116 rOptions.SetDate( aDate.Day, aDate.Month, aDate.Year ); 117 } 118 break; 119 case PROP_UNO_SPELLONLINE: 120 rOptions.SetAutoSpell( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 121 break; 122 case PROP_UNO_STANDARDDEC: 123 { 124 sal_Int16 nIntVal = 0; 125 if ( aValue >>= nIntVal ) 126 rOptions.SetStdPrecision( nIntVal ); 127 } 128 break; 129 case PROP_UNO_REGEXENABLED: 130 rOptions.SetFormulaRegexEnabled( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 131 break; 132 default:; 133 } 134 return sal_True; 135 } 136 137 // static 138 uno::Any ScDocOptionsHelper::getPropertyValue( 139 const ScDocOptions& rOptions, 140 const SfxItemPropertyMap& rPropMap, 141 const rtl::OUString& aPropertyName ) 142 { 143 uno::Any aRet; 144 const SfxItemPropertySimpleEntry* pEntry = rPropMap.getByName( aPropertyName ); 145 if( !pEntry || !pEntry->nWID ) 146 return aRet; 147 switch( pEntry->nWID ) 148 { 149 case PROP_UNO_CALCASSHOWN : 150 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsCalcAsShown() ); 151 break; 152 case PROP_UNO_DEFTABSTOP : 153 aRet <<= (sal_Int16)( rOptions.GetTabDistance() ); 154 break; 155 case PROP_UNO_IGNORECASE : 156 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsIgnoreCase() ); 157 break; 158 case PROP_UNO_ITERENABLED: 159 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsIter() ); 160 break; 161 case PROP_UNO_ITERCOUNT: 162 aRet <<= (sal_Int32)( rOptions.GetIterCount() ); 163 break; 164 case PROP_UNO_ITEREPSILON: 165 aRet <<= (double)( rOptions.GetIterEps() ); 166 break; 167 case PROP_UNO_LOOKUPLABELS: 168 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsLookUpColRowNames() ); 169 break; 170 case PROP_UNO_MATCHWHOLE: 171 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsMatchWholeCell() ); 172 break; 173 case PROP_UNO_NULLDATE: 174 { 175 sal_uInt16 nD, nM, nY; 176 rOptions.GetDate( nD, nM, nY ); 177 util::Date aDate( nD, nM, nY ); 178 aRet <<= aDate; 179 } 180 break; 181 case PROP_UNO_SPELLONLINE: 182 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsAutoSpell() ); 183 break; 184 case PROP_UNO_STANDARDDEC : 185 aRet <<= (sal_Int16)( rOptions.GetStdPrecision() ); 186 break; 187 case PROP_UNO_REGEXENABLED: 188 ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsFormulaRegexEnabled() ); 189 break; 190 default:; 191 } 192 return aRet; 193 } 194 195 //------------------------------------------------------------------------ 196 197 ScDocOptionsObj::ScDocOptionsObj( const ScDocOptions& rOpt ) : 198 ScModelObj( NULL ), 199 aOptions( rOpt ) 200 { 201 } 202 203 ScDocOptionsObj::~ScDocOptionsObj() 204 { 205 } 206 207 void SAL_CALL ScDocOptionsObj::setPropertyValue( 208 const rtl::OUString& aPropertyName, const uno::Any& aValue ) 209 throw(beans::UnknownPropertyException, beans::PropertyVetoException, 210 lang::IllegalArgumentException, lang::WrappedTargetException, 211 uno::RuntimeException) 212 { 213 ScUnoGuard aGuard; 214 215 sal_Bool bDone = ScDocOptionsHelper::setPropertyValue( aOptions, *GetPropertySet().getPropertyMap(), aPropertyName, aValue ); 216 217 if (!bDone) 218 ScModelObj::setPropertyValue( aPropertyName, aValue ); 219 } 220 221 uno::Any SAL_CALL ScDocOptionsObj::getPropertyValue( const rtl::OUString& aPropertyName ) 222 throw(beans::UnknownPropertyException, lang::WrappedTargetException, 223 uno::RuntimeException) 224 { 225 ScUnoGuard aGuard; 226 227 uno::Any aRet(ScDocOptionsHelper::getPropertyValue( aOptions, *GetPropertySet().getPropertyMap(), aPropertyName )); 228 if ( !aRet.hasValue() ) 229 aRet = ScModelObj::getPropertyValue( aPropertyName ); 230 231 return aRet; 232 } 233 234