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_sc.hxx" 30 31 32 33 //------------------------------------------------------------------ 34 35 #include <tools/debug.hxx> 36 37 #include <com/sun/star/uno/Any.hxx> 38 #include <com/sun/star/uno/Sequence.hxx> 39 40 #include "cfgids.hxx" 41 #include "inputopt.hxx" 42 #include "rechead.hxx" 43 #include "scresid.hxx" 44 #include "global.hxx" 45 #include "sc.hrc" 46 #include "miscuno.hxx" 47 48 using namespace utl; 49 using namespace rtl; 50 using namespace com::sun::star::uno; 51 52 //------------------------------------------------------------------ 53 54 // Version, ab der das Item kompatibel ist 55 #define SC_VERSION ((sal_uInt16)351) 56 57 58 //======================================================================== 59 // ScInputOptions - Eingabe-Optionen 60 //======================================================================== 61 62 ScInputOptions::ScInputOptions() 63 { 64 SetDefaults(); 65 } 66 67 //------------------------------------------------------------------------ 68 69 ScInputOptions::ScInputOptions( const ScInputOptions& rCpy ) 70 { 71 *this = rCpy; 72 } 73 74 //------------------------------------------------------------------------ 75 76 ScInputOptions::~ScInputOptions() 77 { 78 } 79 80 //------------------------------------------------------------------------ 81 82 void ScInputOptions::SetDefaults() 83 { 84 nMoveDir = DIR_BOTTOM; 85 bMoveSelection = sal_True; 86 bEnterEdit = sal_False; 87 bExtendFormat = sal_False; 88 bRangeFinder = sal_True; 89 bExpandRefs = sal_False; 90 bMarkHeader = sal_True; 91 bUseTabCol = sal_False; 92 bTextWysiwyg = sal_False; 93 bReplCellsWarn = sal_True; 94 } 95 96 //------------------------------------------------------------------------ 97 98 const ScInputOptions& ScInputOptions::operator=( const ScInputOptions& rCpy ) 99 { 100 nMoveDir = rCpy.nMoveDir; 101 bMoveSelection = rCpy.bMoveSelection; 102 bEnterEdit = rCpy.bEnterEdit; 103 bExtendFormat = rCpy.bExtendFormat; 104 bRangeFinder = rCpy.bRangeFinder; 105 bExpandRefs = rCpy.bExpandRefs; 106 bMarkHeader = rCpy.bMarkHeader; 107 bUseTabCol = rCpy.bUseTabCol; 108 bTextWysiwyg = rCpy.bTextWysiwyg; 109 bReplCellsWarn = rCpy.bReplCellsWarn; 110 111 return *this; 112 } 113 114 115 //================================================================== 116 // Config Item containing input options 117 //================================================================== 118 119 #define CFGPATH_INPUT "Office.Calc/Input" 120 121 #define SCINPUTOPT_MOVEDIR 0 122 #define SCINPUTOPT_MOVESEL 1 123 #define SCINPUTOPT_EDTEREDIT 2 124 #define SCINPUTOPT_EXTENDFMT 3 125 #define SCINPUTOPT_RANGEFIND 4 126 #define SCINPUTOPT_EXPANDREFS 5 127 #define SCINPUTOPT_MARKHEADER 6 128 #define SCINPUTOPT_USETABCOL 7 129 #define SCINPUTOPT_TEXTWYSIWYG 8 130 #define SCINPUTOPT_REPLCELLSWARN 9 131 #define SCINPUTOPT_COUNT 10 132 133 Sequence<OUString> ScInputCfg::GetPropertyNames() 134 { 135 static const char* aPropNames[] = 136 { 137 "MoveSelectionDirection", // SCINPUTOPT_MOVEDIR 138 "MoveSelection", // SCINPUTOPT_MOVESEL 139 "SwitchToEditMode", // SCINPUTOPT_EDTEREDIT 140 "ExpandFormatting", // SCINPUTOPT_EXTENDFMT 141 "ShowReference", // SCINPUTOPT_RANGEFIND 142 "ExpandReference", // SCINPUTOPT_EXPANDREFS 143 "HighlightSelection", // SCINPUTOPT_MARKHEADER 144 "UseTabCol", // SCINPUTOPT_USETABCOL 145 "UsePrinterMetrics", // SCINPUTOPT_TEXTWYSIWYG 146 "ReplaceCellsWarning" // SCINPUTOPT_REPLCELLSWARN 147 }; 148 Sequence<OUString> aNames(SCINPUTOPT_COUNT); 149 OUString* pNames = aNames.getArray(); 150 for(int i = 0; i < SCINPUTOPT_COUNT; i++) 151 pNames[i] = OUString::createFromAscii(aPropNames[i]); 152 153 return aNames; 154 } 155 156 ScInputCfg::ScInputCfg() : 157 ConfigItem( OUString::createFromAscii( CFGPATH_INPUT ) ) 158 { 159 sal_Int32 nIntVal = 0; 160 161 Sequence<OUString> aNames = GetPropertyNames(); 162 Sequence<Any> aValues = GetProperties(aNames); 163 EnableNotification(aNames); 164 const Any* pValues = aValues.getConstArray(); 165 DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed"); 166 if(aValues.getLength() == aNames.getLength()) 167 { 168 for(int nProp = 0; nProp < aNames.getLength(); nProp++) 169 { 170 DBG_ASSERT(pValues[nProp].hasValue(), "property value missing"); 171 if(pValues[nProp].hasValue()) 172 { 173 switch(nProp) 174 { 175 case SCINPUTOPT_MOVEDIR: 176 if ( pValues[nProp] >>= nIntVal ) 177 SetMoveDir( (sal_uInt16)nIntVal ); 178 break; 179 case SCINPUTOPT_MOVESEL: 180 SetMoveSelection( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 181 break; 182 case SCINPUTOPT_EDTEREDIT: 183 SetEnterEdit( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 184 break; 185 case SCINPUTOPT_EXTENDFMT: 186 SetExtendFormat( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 187 break; 188 case SCINPUTOPT_RANGEFIND: 189 SetRangeFinder( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 190 break; 191 case SCINPUTOPT_EXPANDREFS: 192 SetExpandRefs( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 193 break; 194 case SCINPUTOPT_MARKHEADER: 195 SetMarkHeader( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 196 break; 197 case SCINPUTOPT_USETABCOL: 198 SetUseTabCol( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 199 break; 200 case SCINPUTOPT_TEXTWYSIWYG: 201 SetTextWysiwyg( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 202 break; 203 case SCINPUTOPT_REPLCELLSWARN: 204 SetReplaceCellsWarn( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); 205 break; 206 } 207 } 208 } 209 } 210 } 211 212 213 void ScInputCfg::Commit() 214 { 215 Sequence<OUString> aNames = GetPropertyNames(); 216 Sequence<Any> aValues(aNames.getLength()); 217 Any* pValues = aValues.getArray(); 218 219 for(int nProp = 0; nProp < aNames.getLength(); nProp++) 220 { 221 switch(nProp) 222 { 223 case SCINPUTOPT_MOVEDIR: 224 pValues[nProp] <<= (sal_Int32) GetMoveDir(); 225 break; 226 case SCINPUTOPT_MOVESEL: 227 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetMoveSelection() ); 228 break; 229 case SCINPUTOPT_EDTEREDIT: 230 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetEnterEdit() ); 231 break; 232 case SCINPUTOPT_EXTENDFMT: 233 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetExtendFormat() ); 234 break; 235 case SCINPUTOPT_RANGEFIND: 236 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetRangeFinder() ); 237 break; 238 case SCINPUTOPT_EXPANDREFS: 239 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetExpandRefs() ); 240 break; 241 case SCINPUTOPT_MARKHEADER: 242 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetMarkHeader() ); 243 break; 244 case SCINPUTOPT_USETABCOL: 245 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetUseTabCol() ); 246 break; 247 case SCINPUTOPT_TEXTWYSIWYG: 248 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetTextWysiwyg() ); 249 break; 250 case SCINPUTOPT_REPLCELLSWARN: 251 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetReplaceCellsWarn() ); 252 break; 253 } 254 } 255 PutProperties(aNames, aValues); 256 } 257 258 void ScInputCfg::Notify( const Sequence<rtl::OUString>& /* aPropertyNames */ ) 259 { 260 DBG_ERROR("properties have been changed"); 261 } 262 263 void ScInputCfg::SetOptions( const ScInputOptions& rNew ) 264 { 265 *(ScInputOptions*)this = rNew; 266 SetModified(); 267 } 268 269 void ScInputCfg::OptionsChanged() 270 { 271 SetModified(); 272 } 273 274 275