Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <com/sun/star/uno/Any.hxx>
21 : #include <com/sun/star/uno/Sequence.hxx>
22 :
23 : #include "cfgids.hxx"
24 : #include "inputopt.hxx"
25 : #include "rechead.hxx"
26 : #include "scresid.hxx"
27 : #include "global.hxx"
28 : #include "sc.hrc"
29 : #include "miscuno.hxx"
30 :
31 : using namespace utl;
32 : using namespace com::sun::star::uno;
33 :
34 : // ScInputOptions - input options
35 :
36 49 : ScInputOptions::ScInputOptions()
37 : {
38 49 : SetDefaults();
39 49 : }
40 :
41 419 : ScInputOptions::ScInputOptions( const ScInputOptions& rCpy )
42 : {
43 419 : *this = rCpy;
44 419 : }
45 :
46 435 : ScInputOptions::~ScInputOptions()
47 : {
48 435 : }
49 :
50 49 : void ScInputOptions::SetDefaults()
51 : {
52 49 : nMoveDir = DIR_BOTTOM;
53 49 : bMoveSelection = true;
54 49 : bEnterEdit = false;
55 49 : bExtendFormat = false;
56 49 : bRangeFinder = true;
57 49 : bExpandRefs = false;
58 49 : mbSortRefUpdate = true;
59 49 : bMarkHeader = true;
60 49 : bUseTabCol = false;
61 49 : bTextWysiwyg = false;
62 49 : bReplCellsWarn = true;
63 49 : bLegacyCellSelection = false;
64 49 : }
65 :
66 515 : const ScInputOptions& ScInputOptions::operator=( const ScInputOptions& rCpy )
67 : {
68 515 : nMoveDir = rCpy.nMoveDir;
69 515 : bMoveSelection = rCpy.bMoveSelection;
70 515 : bEnterEdit = rCpy.bEnterEdit;
71 515 : bExtendFormat = rCpy.bExtendFormat;
72 515 : bRangeFinder = rCpy.bRangeFinder;
73 515 : bExpandRefs = rCpy.bExpandRefs;
74 515 : mbSortRefUpdate = rCpy.mbSortRefUpdate;
75 515 : bMarkHeader = rCpy.bMarkHeader;
76 515 : bUseTabCol = rCpy.bUseTabCol;
77 515 : bTextWysiwyg = rCpy.bTextWysiwyg;
78 515 : bReplCellsWarn = rCpy.bReplCellsWarn;
79 515 : bLegacyCellSelection = rCpy.bLegacyCellSelection;
80 :
81 515 : return *this;
82 : }
83 :
84 : // Config Item containing input options
85 :
86 : #define CFGPATH_INPUT "Office.Calc/Input"
87 :
88 : #define SCINPUTOPT_MOVEDIR 0
89 : #define SCINPUTOPT_MOVESEL 1
90 : #define SCINPUTOPT_EDTEREDIT 2
91 : #define SCINPUTOPT_EXTENDFMT 3
92 : #define SCINPUTOPT_RANGEFIND 4
93 : #define SCINPUTOPT_EXPANDREFS 5
94 : #define SCINPUTOPT_SORT_REF_UPDATE 6
95 : #define SCINPUTOPT_MARKHEADER 7
96 : #define SCINPUTOPT_USETABCOL 8
97 : #define SCINPUTOPT_TEXTWYSIWYG 9
98 : #define SCINPUTOPT_REPLCELLSWARN 10
99 : #define SCINPUTOPT_LEGACY_CELL_SELECTION 11
100 : #define SCINPUTOPT_COUNT 12
101 :
102 53 : Sequence<OUString> ScInputCfg::GetPropertyNames()
103 : {
104 : static const char* aPropNames[] =
105 : {
106 : "MoveSelectionDirection", // SCINPUTOPT_MOVEDIR
107 : "MoveSelection", // SCINPUTOPT_MOVESEL
108 : "SwitchToEditMode", // SCINPUTOPT_EDTEREDIT
109 : "ExpandFormatting", // SCINPUTOPT_EXTENDFMT
110 : "ShowReference", // SCINPUTOPT_RANGEFIND
111 : "ExpandReference", // SCINPUTOPT_EXPANDREFS
112 : "UpdateReferenceOnSort", // SCINPUTOPT_SORT_REF_UPDATE
113 : "HighlightSelection", // SCINPUTOPT_MARKHEADER
114 : "UseTabCol", // SCINPUTOPT_USETABCOL
115 : "UsePrinterMetrics", // SCINPUTOPT_TEXTWYSIWYG
116 : "ReplaceCellsWarning", // SCINPUTOPT_REPLCELLSWARN
117 : "LegacyCellSelection" // SCINPUTOPT_LEGACY_CELL_SELECTION
118 : };
119 53 : Sequence<OUString> aNames(SCINPUTOPT_COUNT);
120 53 : OUString* pNames = aNames.getArray();
121 689 : for(int i = 0; i < SCINPUTOPT_COUNT; i++)
122 636 : pNames[i] = OUString::createFromAscii(aPropNames[i]);
123 :
124 53 : return aNames;
125 : }
126 :
127 49 : ScInputCfg::ScInputCfg() :
128 49 : ConfigItem( OUString( CFGPATH_INPUT ) )
129 : {
130 49 : Sequence<OUString> aNames = GetPropertyNames();
131 98 : Sequence<Any> aValues = GetProperties(aNames);
132 49 : EnableNotification(aNames);
133 49 : const Any* pValues = aValues.getConstArray();
134 : OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
135 49 : if(aValues.getLength() == aNames.getLength())
136 : {
137 637 : for(int nProp = 0; nProp < aNames.getLength(); nProp++)
138 : {
139 : OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
140 588 : if(pValues[nProp].hasValue())
141 : {
142 588 : sal_Int32 nIntVal = 0;
143 588 : switch(nProp)
144 : {
145 : case SCINPUTOPT_MOVEDIR:
146 49 : if ( pValues[nProp] >>= nIntVal )
147 49 : SetMoveDir( (sal_uInt16)nIntVal );
148 49 : break;
149 : case SCINPUTOPT_MOVESEL:
150 49 : SetMoveSelection( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
151 49 : break;
152 : case SCINPUTOPT_EDTEREDIT:
153 49 : SetEnterEdit( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
154 49 : break;
155 : case SCINPUTOPT_EXTENDFMT:
156 49 : SetExtendFormat( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
157 49 : break;
158 : case SCINPUTOPT_RANGEFIND:
159 49 : SetRangeFinder( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
160 49 : break;
161 : case SCINPUTOPT_EXPANDREFS:
162 49 : SetExpandRefs( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
163 49 : break;
164 : case SCINPUTOPT_SORT_REF_UPDATE:
165 49 : SetSortRefUpdate(ScUnoHelpFunctions::GetBoolFromAny(pValues[nProp]));
166 49 : break;
167 : case SCINPUTOPT_MARKHEADER:
168 49 : SetMarkHeader( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
169 49 : break;
170 : case SCINPUTOPT_USETABCOL:
171 49 : SetUseTabCol( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
172 49 : break;
173 : case SCINPUTOPT_TEXTWYSIWYG:
174 49 : SetTextWysiwyg( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
175 49 : break;
176 : case SCINPUTOPT_REPLCELLSWARN:
177 49 : SetReplaceCellsWarn( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
178 49 : break;
179 : case SCINPUTOPT_LEGACY_CELL_SELECTION:
180 49 : SetLegacyCellSelection( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
181 49 : break;
182 : }
183 : }
184 : }
185 49 : }
186 49 : }
187 :
188 4 : void ScInputCfg::ImplCommit()
189 : {
190 4 : Sequence<OUString> aNames = GetPropertyNames();
191 8 : Sequence<Any> aValues(aNames.getLength());
192 4 : Any* pValues = aValues.getArray();
193 :
194 52 : for(int nProp = 0; nProp < aNames.getLength(); nProp++)
195 : {
196 48 : switch(nProp)
197 : {
198 : case SCINPUTOPT_MOVEDIR:
199 4 : pValues[nProp] <<= (sal_Int32) GetMoveDir();
200 4 : break;
201 : case SCINPUTOPT_MOVESEL:
202 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetMoveSelection() );
203 4 : break;
204 : case SCINPUTOPT_EDTEREDIT:
205 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetEnterEdit() );
206 4 : break;
207 : case SCINPUTOPT_EXTENDFMT:
208 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetExtendFormat() );
209 4 : break;
210 : case SCINPUTOPT_RANGEFIND:
211 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetRangeFinder() );
212 4 : break;
213 : case SCINPUTOPT_EXPANDREFS:
214 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetExpandRefs() );
215 4 : break;
216 : case SCINPUTOPT_SORT_REF_UPDATE:
217 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetSortRefUpdate() );
218 4 : break;
219 : case SCINPUTOPT_MARKHEADER:
220 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetMarkHeader() );
221 4 : break;
222 : case SCINPUTOPT_USETABCOL:
223 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetUseTabCol() );
224 4 : break;
225 : case SCINPUTOPT_TEXTWYSIWYG:
226 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetTextWysiwyg() );
227 4 : break;
228 : case SCINPUTOPT_REPLCELLSWARN:
229 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetReplaceCellsWarn() );
230 4 : break;
231 : case SCINPUTOPT_LEGACY_CELL_SELECTION:
232 4 : ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetLegacyCellSelection() );
233 4 : break;
234 : }
235 : }
236 8 : PutProperties(aNames, aValues);
237 4 : }
238 :
239 0 : void ScInputCfg::Notify( const Sequence<OUString>& /* aPropertyNames */ )
240 : {
241 : OSL_FAIL("properties have been changed");
242 0 : }
243 :
244 96 : void ScInputCfg::SetOptions( const ScInputOptions& rNew )
245 : {
246 96 : *static_cast<ScInputOptions*>(this) = rNew;
247 96 : SetModified();
248 96 : }
249 :
250 0 : void ScInputCfg::OptionsChanged()
251 : {
252 0 : SetModified();
253 156 : }
254 :
255 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|