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 #undef SC_DLLIMPLEMENTATION
28
29
30
31 //------------------------------------------------------------------
32
33 #include "scitems.hxx"
34 #include <vcl/msgbox.hxx>
35
36 #include "global.hxx"
37 #include "globstr.hrc"
38 #include "uiitems.hxx"
39 #include "docsh.hxx"
40 #include "document.hxx"
41 #include "docoptio.hxx"
42 #include "scresid.hxx"
43 #include "sc.hrc" // -> Slot-IDs
44 #include "optdlg.hrc"
45
46 #define _TPCALC_CXX
47 #include "tpcalc.hxx"
48 #undef _TPCALC_CXX
49
50 #include <math.h>
51
52 // STATIC DATA -----------------------------------------------------------
53
54 static sal_uInt16 pCalcOptRanges[] =
55 {
56 SID_SCDOCOPTIONS,
57 SID_SCDOCOPTIONS,
58 0
59 };
60
61 //========================================================================
62
ScTpCalcOptions(Window * pParent,const SfxItemSet & rCoreAttrs)63 ScTpCalcOptions::ScTpCalcOptions( Window* pParent,
64 const SfxItemSet& rCoreAttrs )
65
66 : SfxTabPage ( pParent,
67 ScResId( RID_SCPAGE_CALC ),
68 rCoreAttrs ),
69
70 aGbZRefs ( this, ScResId( GB_ZREFS ) ),
71 aBtnIterate ( this, ScResId( BTN_ITERATE ) ),
72 aFtSteps ( this, ScResId( FT_STEPS ) ),
73 aEdSteps ( this, ScResId( ED_STEPS ) ),
74 aFtEps ( this, ScResId( FT_EPS ) ),
75 aEdEps ( this, ScResId( ED_EPS ) ),
76 aSeparatorFL ( this, ScResId( FL_SEPARATOR ) ),
77 aGbDate ( this, ScResId( GB_DATE ) ),
78 aBtnDateStd ( this, ScResId( BTN_DATESTD ) ),
79 aBtnDateSc10 ( this, ScResId( BTN_DATESC10 ) ),
80 aBtnDate1904 ( this, ScResId( BTN_DATE1904 ) ),
81 aHSeparatorFL ( this, ScResId( FL_H_SEPARATOR ) ),
82 aBtnCase ( this, ScResId( BTN_CASE ) ),
83 aBtnCalc ( this, ScResId( BTN_CALC ) ),
84 aBtnMatch ( this, ScResId( BTN_MATCH ) ),
85 aBtnRegex ( this, ScResId( BTN_REGEX ) ),
86 aBtnLookUp ( this, ScResId( BTN_LOOKUP ) ),
87 aBtnGeneralPrec ( this, ScResId( BTN_GENERAL_PREC ) ),
88 aFtPrec ( this, ScResId( FT_PREC ) ),
89 aEdPrec ( this, ScResId( ED_PREC ) ),
90 pOldOptions ( new ScDocOptions(
91 ((const ScTpCalcItem&)rCoreAttrs.Get(
92 GetWhich( SID_SCDOCOPTIONS ))).
93 GetDocOptions() ) ),
94 pLocalOptions ( new ScDocOptions ),
95 nWhichCalc ( GetWhich( SID_SCDOCOPTIONS ) )
96 {
97 aSeparatorFL.SetStyle( aSeparatorFL.GetStyle() | WB_VERT );
98 Init();
99 FreeResource();
100 SetExchangeSupport();
101 }
102
103 //-----------------------------------------------------------------------
104
~ScTpCalcOptions()105 __EXPORT ScTpCalcOptions::~ScTpCalcOptions()
106 {
107 delete pOldOptions;
108 delete pLocalOptions;
109 }
110
111 //-----------------------------------------------------------------------
112
Init()113 void ScTpCalcOptions::Init()
114 {
115 const Size a6Size = aFtPrec.LogicToPixel( Size( 6, 6 ), MAP_APPFONT );
116 const Size aMin = aFtPrec.CalcMinimumSize();
117 const Point aPos = aFtPrec.GetPosPixel();
118 const long nNewX = aPos.X() + aFtPrec.GetSizePixel().Width() - aMin.Width();
119
120 aFtPrec.SetPosPixel( Point( nNewX, aPos.Y() ) );
121 aFtPrec.SetSizePixel( aMin );
122 aBtnGeneralPrec.SetSizePixel( Size(
123 nNewX - a6Size.Width() - aBtnGeneralPrec.GetPosPixel().X(),
124 aBtnGeneralPrec.GetSizePixel().Height() ) );
125
126 aBtnIterate .SetClickHdl( LINK( this, ScTpCalcOptions, CheckClickHdl ) );
127 aBtnGeneralPrec.SetClickHdl( LINK(this, ScTpCalcOptions, CheckClickHdl) );
128 aBtnDateStd .SetClickHdl( LINK( this, ScTpCalcOptions, RadioClickHdl ) );
129 aBtnDateSc10.SetClickHdl( LINK( this, ScTpCalcOptions, RadioClickHdl ) );
130 aBtnDate1904.SetClickHdl( LINK( this, ScTpCalcOptions, RadioClickHdl ) );
131 }
132
133 //-----------------------------------------------------------------------
134
GetRanges()135 sal_uInt16* __EXPORT ScTpCalcOptions::GetRanges()
136 {
137 return pCalcOptRanges;
138 }
139
140 //-----------------------------------------------------------------------
141
Create(Window * pParent,const SfxItemSet & rAttrSet)142 SfxTabPage* __EXPORT ScTpCalcOptions::Create( Window* pParent, const SfxItemSet& rAttrSet )
143 {
144 return ( new ScTpCalcOptions( pParent, rAttrSet ) );
145 }
146
147 //-----------------------------------------------------------------------
148
Reset(const SfxItemSet &)149 void __EXPORT ScTpCalcOptions::Reset( const SfxItemSet& /* rCoreAttrs */ )
150 {
151 sal_uInt16 d,m,y;
152
153 *pLocalOptions = *pOldOptions;
154
155 aBtnCase .Check( !pLocalOptions->IsIgnoreCase() );
156 aBtnCalc .Check( pLocalOptions->IsCalcAsShown() );
157 aBtnMatch .Check( pLocalOptions->IsMatchWholeCell() );
158 aBtnRegex .Check( pLocalOptions->IsFormulaRegexEnabled() );
159 aBtnLookUp .Check( pLocalOptions->IsLookUpColRowNames() );
160 aBtnIterate.Check( pLocalOptions->IsIter() );
161 aEdSteps .SetValue( pLocalOptions->GetIterCount() );
162 aEdEps .SetValue( pLocalOptions->GetIterEps(), 6 );
163
164 pLocalOptions->GetDate( d, m, y );
165
166 switch ( y )
167 {
168 case 1899:
169 aBtnDateStd.Check();
170 break;
171 case 1900:
172 aBtnDateSc10.Check();
173 break;
174 case 1904:
175 aBtnDate1904.Check();
176 break;
177 }
178
179 sal_uInt16 nPrec = pLocalOptions->GetStdPrecision();
180 if (nPrec == SvNumberFormatter::UNLIMITED_PRECISION)
181 {
182 aFtPrec.Disable();
183 aEdPrec.Disable();
184 aBtnGeneralPrec.Check(false);
185 }
186 else
187 {
188 aBtnGeneralPrec.Check();
189 aFtPrec.Enable();
190 aEdPrec.Enable();
191 aEdPrec.SetValue(nPrec);
192 }
193
194 CheckClickHdl( &aBtnIterate );
195 }
196
197
198 //-----------------------------------------------------------------------
199
FillItemSet(SfxItemSet & rCoreAttrs)200 sal_Bool __EXPORT ScTpCalcOptions::FillItemSet( SfxItemSet& rCoreAttrs )
201 {
202 // alle weiteren Optionen werden in den Handlern aktualisiert
203 pLocalOptions->SetIterCount( (sal_uInt16)aEdSteps.GetValue() );
204 pLocalOptions->SetIgnoreCase( !aBtnCase.IsChecked() );
205 pLocalOptions->SetCalcAsShown( aBtnCalc.IsChecked() );
206 pLocalOptions->SetMatchWholeCell( aBtnMatch.IsChecked() );
207 pLocalOptions->SetFormulaRegexEnabled( aBtnRegex.IsChecked() );
208 pLocalOptions->SetLookUpColRowNames( aBtnLookUp.IsChecked() );
209
210 if (aBtnGeneralPrec.IsChecked())
211 pLocalOptions->SetStdPrecision(
212 static_cast<sal_uInt16>(aEdPrec.GetValue()) );
213 else
214 pLocalOptions->SetStdPrecision( SvNumberFormatter::UNLIMITED_PRECISION );
215
216 if ( *pLocalOptions != *pOldOptions )
217 {
218 rCoreAttrs.Put( ScTpCalcItem( nWhichCalc, *pLocalOptions ) );
219 return sal_True;
220 }
221 else
222 return sal_False;
223 }
224
225 //------------------------------------------------------------------------
226
DeactivatePage(SfxItemSet * pSetP)227 int __EXPORT ScTpCalcOptions::DeactivatePage( SfxItemSet* pSetP )
228 {
229 int nReturn = KEEP_PAGE;
230
231 double fEps;
232 if( aEdEps.GetValue( fEps ) && (fEps > 0.0) )
233 {
234 pLocalOptions->SetIterEps( fEps );
235 nReturn = LEAVE_PAGE;
236 }
237
238 if ( nReturn == KEEP_PAGE )
239 {
240 ErrorBox( this,
241 WinBits( WB_OK | WB_DEF_OK ),
242 ScGlobal::GetRscString( STR_INVALID_EPS )
243 ).Execute();
244
245 aEdEps.GrabFocus();
246 }
247 else if ( pSetP )
248 FillItemSet( *pSetP );
249
250 return nReturn;
251 }
252
253 //-----------------------------------------------------------------------
254 // Handler:
255
IMPL_LINK(ScTpCalcOptions,RadioClickHdl,RadioButton *,pBtn)256 IMPL_LINK( ScTpCalcOptions, RadioClickHdl, RadioButton*, pBtn )
257 {
258 if ( pBtn == &aBtnDateStd )
259 {
260 pLocalOptions->SetDate( 30, 12, 1899 );
261 }
262 else if ( pBtn == &aBtnDateSc10 )
263 {
264 pLocalOptions->SetDate( 1, 1, 1900 );
265 }
266 else if ( pBtn == &aBtnDate1904 )
267 {
268 pLocalOptions->SetDate( 1, 1, 1904 );
269 }
270
271 return 0;
272 }
273
274 //-----------------------------------------------------------------------
275
IMPL_LINK(ScTpCalcOptions,CheckClickHdl,CheckBox *,pBtn)276 IMPL_LINK( ScTpCalcOptions, CheckClickHdl, CheckBox*, pBtn )
277 {
278 if (pBtn == &aBtnGeneralPrec)
279 {
280 if (pBtn->IsChecked())
281 {
282 aEdPrec.Enable();
283 aFtPrec.Enable();
284 }
285 else
286 {
287 aEdPrec.Disable();
288 aFtPrec.Disable();
289 }
290 }
291 else if (pBtn == &aBtnIterate)
292 {
293 if ( pBtn->IsChecked() )
294 {
295 pLocalOptions->SetIter( sal_True );
296 aFtSteps.Enable(); aEdSteps.Enable();
297 aFtEps .Enable(); aEdEps .Enable();
298 }
299 else
300 {
301 pLocalOptions->SetIter( sal_False );
302 aFtSteps.Disable(); aEdSteps.Disable();
303 aFtEps .Disable(); aEdEps .Disable();
304 }
305 }
306
307 return 0;
308 }
309
310
311
312
313