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_formula.hxx"
26
27
28
29 //----------------------------------------------------------------------------
30
31 #include <svl/zforlist.hxx>
32 #include <svl/stritem.hxx>
33
34 #include "parawin.hxx"
35 #include "parawin.hrc"
36 #include "helpids.hrc"
37 #include "formula/formdata.hxx"
38 #include "formula/IFunctionDescription.hxx"
39 #include "ModuleHelper.hxx"
40 #include "ForResId.hrc"
41
42 #define VAR_ARGS 30
43 #define PAIRED_VAR_ARGS (VAR_ARGS + VAR_ARGS)
44 namespace formula
45 {
46 //============================================================================
47
ParaWin(Window * pParent,IControlReferenceHandler * _pDlg,Point aPos)48 ParaWin::ParaWin(Window* pParent,IControlReferenceHandler* _pDlg,Point aPos):
49 TabPage (pParent,ModuleRes(RID_FORMULATAB_PARAMETER)),
50 pFuncDesc ( NULL ),
51 pMyParent (_pDlg),
52 aFtEditDesc ( this, ModuleRes( FT_EDITDESC ) ),
53 aFtArgName ( this, ModuleRes( FT_PARNAME ) ),
54 aFtArgDesc ( this, ModuleRes( FT_PARDESC ) ),
55
56 aBtnFx1 ( this, ModuleRes( BTN_FX1 ) ),
57 aFtArg1 ( this, ModuleRes( FT_ARG1 ) ),
58 aEdArg1 ( this, ModuleRes( ED_ARG1 ) ),
59 aRefBtn1 ( this, ModuleRes( RB_ARG1 ) ),
60
61 aBtnFx2 ( this, ModuleRes( BTN_FX2 ) ),
62 aFtArg2 ( this, ModuleRes( FT_ARG2 ) ),
63 aEdArg2 ( this, ModuleRes( ED_ARG2 ) ),
64 aRefBtn2 ( this, ModuleRes( RB_ARG2 ) ),
65
66 aBtnFx3 ( this, ModuleRes( BTN_FX3 ) ),
67 aFtArg3 ( this, ModuleRes( FT_ARG3 ) ),
68 aEdArg3 ( this, ModuleRes( ED_ARG3 ) ),
69 aRefBtn3 ( this, ModuleRes( RB_ARG3 ) ),
70
71 aBtnFx4 ( this, ModuleRes( BTN_FX4 ) ),
72 aFtArg4 ( this, ModuleRes( FT_ARG4 ) ),
73 aEdArg4 ( this, ModuleRes( ED_ARG4 ) ),
74 aRefBtn4 ( this, ModuleRes( RB_ARG4 ) ),
75
76 aSlider ( this, ModuleRes( WND_SLIDER ) ),
77 m_sOptional ( ModuleRes( STR_OPTIONAL ) ),
78 m_sRequired ( ModuleRes( STR_REQUIRED ) ),
79 bRefMode (sal_False)
80 {
81 Image aFxHC( ModuleRes( IMG_FX_H ) );
82 FreeResource();
83 aDefaultString=aFtEditDesc.GetText();
84
85 SetPosPixel(aPos);
86 nEdFocus=NOT_FOUND;
87 nActiveLine=0;
88 Size aSize = aSlider.GetSizePixel();
89 aSize.Width() = GetSettings().GetStyleSettings().GetScrollBarSize();
90 aSlider.SetSizePixel( aSize );
91 aSlider.SetEndScrollHdl( LINK( this, ParaWin, ScrollHdl ) );
92 aSlider.SetScrollHdl( LINK( this, ParaWin, ScrollHdl ) );
93
94 aBtnFx1.SetModeImage( aFxHC, BMP_COLOR_HIGHCONTRAST );
95 aBtnFx2.SetModeImage( aFxHC, BMP_COLOR_HIGHCONTRAST );
96 aBtnFx3.SetModeImage( aFxHC, BMP_COLOR_HIGHCONTRAST );
97 aBtnFx4.SetModeImage( aFxHC, BMP_COLOR_HIGHCONTRAST );
98
99 InitArgInput( 0, aFtArg1, aBtnFx1, aEdArg1, aRefBtn1);
100 InitArgInput( 1, aFtArg2, aBtnFx2, aEdArg2, aRefBtn2);
101 InitArgInput( 2, aFtArg3, aBtnFx3, aEdArg3, aRefBtn3);
102 InitArgInput( 3, aFtArg4, aBtnFx4, aEdArg4, aRefBtn4);
103 ClearAll();
104 }
105
UpdateArgDesc(sal_uInt16 nArg)106 void ParaWin::UpdateArgDesc( sal_uInt16 nArg )
107 {
108 if (nArg==NOT_FOUND) return;
109
110 if ( nArgs > 4 )
111 nArg = sal::static_int_cast<sal_uInt16>( nArg + GetSliderPos() );
112 //@ nArg += (sal_uInt16)aSlider.GetThumbPos();
113
114 if ( (nArgs > 0) && (nArg<nArgs) )
115 {
116 String aArgDesc;
117 String aArgName;
118
119 SetArgumentDesc( String() );
120 SetArgumentText( String() );
121
122 if ( nArgs < VAR_ARGS )
123 {
124 sal_uInt16 nRealArg = (aVisibleArgMapping.size() < nArg) ? aVisibleArgMapping[nArg] : nArg;
125 aArgDesc = pFuncDesc->getParameterDescription(nRealArg);
126 aArgName = pFuncDesc->getParameterName(nRealArg);
127 aArgName += ' ';
128 aArgName += (pFuncDesc->isParameterOptional(nRealArg)) ? m_sOptional : m_sRequired ;
129 }
130 else if ( nArgs < PAIRED_VAR_ARGS )
131 {
132 sal_uInt16 nFix = nArgs - VAR_ARGS;
133 sal_uInt16 nPos = ( nArg < nFix ? nArg : nFix );
134 sal_uInt16 nRealArg = (nPos < aVisibleArgMapping.size() ?
135 aVisibleArgMapping[nPos] : aVisibleArgMapping.back());
136 aArgDesc = pFuncDesc->getParameterDescription(nRealArg);
137 aArgName = pFuncDesc->getParameterName(nRealArg);
138 if ( nArg >= nFix )
139 aArgName += String::CreateFromInt32(nArg-nFix+1);
140 aArgName += ' ';
141
142 aArgName += (nArg > nFix || pFuncDesc->isParameterOptional(nRealArg)) ? m_sOptional : m_sRequired ;
143 }
144 else
145 {
146 sal_uInt16 nFix = nArgs - PAIRED_VAR_ARGS;
147 sal_uInt16 nPos;
148 if ( nArg < nFix )
149 nPos = nArg;
150 else
151 nPos = nFix + ( (nArg-nFix) % 2);
152 sal_uInt16 nRealArg = (nPos < aVisibleArgMapping.size() ?
153 aVisibleArgMapping[nPos] : aVisibleArgMapping.back());
154 aArgDesc = pFuncDesc->getParameterDescription(nRealArg);
155 aArgName = pFuncDesc->getParameterName(nRealArg);
156 if ( nArg >= nFix )
157 aArgName += String::CreateFromInt32((nArg-nFix)/2 + 1);
158 aArgName += ' ';
159
160 aArgName += (nArg > (nFix+1) || pFuncDesc->isParameterOptional(nRealArg)) ? m_sOptional : m_sRequired ;
161 }
162
163 SetArgumentDesc(aArgDesc);
164 SetArgumentText(aArgName);
165 }
166 }
167
UpdateArgInput(sal_uInt16 nOffset,sal_uInt16 i)168 void ParaWin::UpdateArgInput( sal_uInt16 nOffset, sal_uInt16 i )
169 {
170 sal_uInt16 nArg = nOffset + i;
171 if ( nArgs < VAR_ARGS)
172 {
173 if(nArg<nArgs)
174 {
175 sal_uInt16 nRealArg = aVisibleArgMapping[nArg];
176 SetArgNameFont (i,(pFuncDesc->isParameterOptional(nRealArg))
177 ? aFntLight : aFntBold );
178 SetArgName (i,pFuncDesc->getParameterName(nRealArg));
179 }
180 }
181 else if ( nArgs < PAIRED_VAR_ARGS)
182 {
183 sal_uInt16 nFix = nArgs - VAR_ARGS;
184 sal_uInt16 nPos = ( nArg < nFix ? nArg : nFix );
185 sal_uInt16 nRealArg = (nPos < aVisibleArgMapping.size() ?
186 aVisibleArgMapping[nPos] : aVisibleArgMapping.back());
187 SetArgNameFont( i,
188 (nArg > nFix || pFuncDesc->isParameterOptional(nRealArg)) ?
189 aFntLight : aFntBold );
190 if ( nArg >= nFix )
191 {
192 String aArgName( pFuncDesc->getParameterName(nRealArg) );
193 aArgName += String::CreateFromInt32(nArg-nFix+1);
194 SetArgName( i, aArgName );
195 }
196 else
197 SetArgName( i, pFuncDesc->getParameterName(nRealArg) );
198 }
199 else
200 {
201 sal_uInt16 nFix = nArgs - PAIRED_VAR_ARGS;
202 sal_uInt16 nPos;
203 if ( nArg < nFix )
204 nPos = nArg;
205 else
206 nPos = nFix + ( (nArg-nFix) % 2);
207 sal_uInt16 nRealArg = (nPos < aVisibleArgMapping.size() ?
208 aVisibleArgMapping[nPos] : aVisibleArgMapping.back());
209 SetArgNameFont( i,
210 (nArg > (nFix+1) || pFuncDesc->isParameterOptional(nRealArg)) ?
211 aFntLight : aFntBold );
212 if ( nArg >= nFix )
213 {
214 String aArgName( pFuncDesc->getParameterName(nRealArg) );
215 aArgName += String::CreateFromInt32((nArg-nFix)/2 + 1);
216 SetArgName( i, aArgName );
217 }
218 else
219 SetArgName( i, pFuncDesc->getParameterName(nRealArg) );
220 }
221 if(nArg<nArgs) SetArgVal(i,aParaArray[nArg]);
222 //@ aArgInput[i].SetArgVal( *(pArgArr[nOffset+i]) );
223
224 }
225
~ParaWin()226 ParaWin::~ParaWin()
227 {
228 // #i66422# if the focus changes during destruction of the controls,
229 // don't call the focus handlers
230 Link aEmptyLink;
231 aBtnFx1.SetGetFocusHdl( aEmptyLink );
232 aBtnFx2.SetGetFocusHdl( aEmptyLink );
233 aBtnFx3.SetGetFocusHdl( aEmptyLink );
234 aBtnFx4.SetGetFocusHdl( aEmptyLink );
235 }
236
GetActiveLine()237 sal_uInt16 ParaWin::GetActiveLine()
238 {
239 return nActiveLine;
240 }
241
SetActiveLine(sal_uInt16 no)242 void ParaWin::SetActiveLine(sal_uInt16 no)
243 {
244 if(no<nArgs)
245 {
246 long nOffset = GetSliderPos();
247 nActiveLine=no;
248 long nNewEdPos=(long)nActiveLine-nOffset;
249 if(nNewEdPos<0 || nNewEdPos>3)
250 {
251 nOffset+=nNewEdPos;
252 SetSliderPos((sal_uInt16) nOffset);
253 nOffset=GetSliderPos();
254 }
255 nEdFocus=no-(sal_uInt16)nOffset;
256 UpdateArgDesc( nEdFocus );
257 }
258 }
259
GetActiveEdit()260 RefEdit* ParaWin::GetActiveEdit()
261 {
262 if(nArgs>0 && nEdFocus!=NOT_FOUND)
263 {
264 return aArgInput[nEdFocus].GetArgEdPtr();
265 }
266 else
267 {
268 return NULL;
269 }
270 }
271
272
GetArgument(sal_uInt16 no)273 String ParaWin::GetArgument(sal_uInt16 no)
274 {
275 String aStr;
276 if(no<aParaArray.size())
277 {
278 aStr=aParaArray[no];
279 if(no==nActiveLine && aStr.Len()==0)
280 aStr+=' ';
281 }
282 return aStr;
283 }
284
GetActiveArgName()285 String ParaWin::GetActiveArgName()
286 {
287 String aStr;
288 if(nArgs>0 && nEdFocus!=NOT_FOUND)
289 {
290 aStr=aArgInput[nEdFocus].GetArgName();
291 }
292 return aStr;
293 }
294
295
SetArgument(sal_uInt16 no,const String & aString)296 void ParaWin::SetArgument(sal_uInt16 no, const String& aString)
297 {
298 if(no<aParaArray.size())
299 {
300 aParaArray[no] = aString;
301 aParaArray[no].EraseLeadingChars();
302 }
303 }
304
DelParaArray()305 void ParaWin::DelParaArray()
306 {
307 ::std::vector<String>().swap(aParaArray);
308 }
309
SetArgumentFonts(const Font & aBoldFont,const Font & aLightFont)310 void ParaWin::SetArgumentFonts(const Font&aBoldFont,const Font&aLightFont)
311 {
312 aFntBold=aBoldFont;
313 aFntLight=aLightFont;
314 }
315
SetFunctionDesc(const IFunctionDescription * pFDesc)316 void ParaWin::SetFunctionDesc(const IFunctionDescription* pFDesc)
317 {
318 pFuncDesc=pFDesc;
319
320 SetArgumentDesc( String() );
321 SetArgumentText( String() );
322 SetEditDesc( String() );
323 nArgs = 0;
324 if ( pFuncDesc!=NULL)
325 {
326 if ( pFuncDesc->getDescription().getLength() )
327 {
328 SetEditDesc(pFuncDesc->getDescription());
329 }
330 else
331 {
332 SetEditDesc(aDefaultString);
333 }
334 nArgs = pFuncDesc->getSuppressedArgumentCount();
335 pFuncDesc->fillVisibleArgumentMapping(aVisibleArgMapping);
336 aSlider.Hide();
337 rtl::OString sHelpId = pFuncDesc->getHelpId();
338 SetHelpId( sHelpId );
339 aEdArg1.SetHelpId( sHelpId );
340 aEdArg2.SetHelpId( sHelpId );
341 aEdArg3.SetHelpId( sHelpId );
342 aEdArg4.SetHelpId( sHelpId );
343
344 // Unique-IDs muessen gleich bleiben fuer Automatisierung
345 SetUniqueId( HID_FORMULA_FAP_PAGE );
346 aEdArg1.SetUniqueId( HID_FORMULA_FAP_EDIT1 );
347 aEdArg2.SetUniqueId( HID_FORMULA_FAP_EDIT2 );
348 aEdArg3.SetUniqueId( HID_FORMULA_FAP_EDIT3 );
349 aEdArg4.SetUniqueId( HID_FORMULA_FAP_EDIT4 );
350 SetActiveLine(0);
351 }
352 else
353 {
354 nActiveLine=0;
355 }
356
357 }
358
SetArgumentText(const String & aText)359 void ParaWin::SetArgumentText(const String& aText)
360 {
361 aFtArgName.SetText(aText);
362 }
363
SetArgumentDesc(const String & aText)364 void ParaWin::SetArgumentDesc(const String& aText)
365 {
366 aFtArgDesc.SetText(aText);
367 }
368
SetEditDesc(const String & aText)369 void ParaWin::SetEditDesc(const String& aText)
370 {
371 aFtEditDesc.SetText(aText);
372 }
373
SetArgName(sal_uInt16 no,const String & aText)374 void ParaWin::SetArgName(sal_uInt16 no,const String& aText)
375 {
376 aArgInput[no].SetArgName(aText);
377 aArgInput[no].UpdateAccessibleNames();
378 }
379
SetArgNameFont(sal_uInt16 no,const Font & aFont)380 void ParaWin::SetArgNameFont(sal_uInt16 no,const Font& aFont)
381 {
382 aArgInput[no].SetArgNameFont(aFont);
383 }
384
SetArgVal(sal_uInt16 no,const String & aText)385 void ParaWin::SetArgVal(sal_uInt16 no,const String& aText)
386 {
387 aArgInput[no].SetArgVal(aText);
388 }
389
HideParaLine(sal_uInt16 no)390 void ParaWin::HideParaLine(sal_uInt16 no)
391 {
392 aArgInput[no].Hide();
393 }
394
ShowParaLine(sal_uInt16 no)395 void ParaWin::ShowParaLine(sal_uInt16 no)
396 {
397 aArgInput[no].Show();
398 }
399
SetEdFocus(sal_uInt16 no)400 void ParaWin::SetEdFocus(sal_uInt16 no)
401 {
402 UpdateArgDesc(no);
403 if(no<4 && no<aParaArray.size())
404 aArgInput[no].GetArgEdPtr()->GrabFocus();
405 }
406
407
InitArgInput(sal_uInt16 nPos,FixedText & rFtArg,ImageButton & rBtnFx,ArgEdit & rEdArg,RefButton & rRefBtn)408 void ParaWin::InitArgInput( sal_uInt16 nPos, FixedText& rFtArg, ImageButton& rBtnFx,
409 ArgEdit& rEdArg, RefButton& rRefBtn)
410 {
411
412 rRefBtn.SetReferences(pMyParent,&rEdArg);
413 rEdArg.SetRefDialog(pMyParent);
414
415 aArgInput[nPos].InitArgInput (&rFtArg,&rBtnFx,&rEdArg,&rRefBtn);
416
417 aArgInput[nPos].Hide();
418
419 aArgInput[nPos].SetFxClickHdl ( LINK( this, ParaWin, GetFxHdl ) );
420 aArgInput[nPos].SetFxFocusHdl ( LINK( this, ParaWin, GetFxFocusHdl ) );
421 aArgInput[nPos].SetEdFocusHdl ( LINK( this, ParaWin, GetEdFocusHdl ) );
422 aArgInput[nPos].SetEdModifyHdl ( LINK( this, ParaWin, ModifyHdl ) );
423 aArgInput[nPos].UpdateAccessibleNames();
424 }
425
ClearAll()426 void ParaWin::ClearAll()
427 {
428 SetFunctionDesc(NULL);
429 SetArgumentOffset(0);
430 }
431
SetArgumentOffset(sal_uInt16 nOffset)432 void ParaWin::SetArgumentOffset(sal_uInt16 nOffset)
433 {
434 DelParaArray();
435 aSlider.SetThumbPos(0);
436
437 aParaArray.resize(nArgs);
438
439 if ( nArgs > 0 )
440 {
441 for ( int i=0; i<4 && i<nArgs; i++ )
442 {
443 String aString;
444 aArgInput[i].SetArgVal(aString);
445 aArgInput[i].GetArgEdPtr()->Init(
446 (i==0) ? (ArgEdit *)NULL : aArgInput[i-1].GetArgEdPtr(),
447 (i==3 || i==nArgs-1) ? (ArgEdit *)NULL : aArgInput[i+1].GetArgEdPtr(),
448 aSlider, nArgs );
449 }
450 }
451
452 if ( nArgs < 5 )
453 {
454 aSlider.Hide();
455 }
456 else
457 {
458 //aSlider.SetEndScrollHdl( LINK( this, ScFormulaDlg, ScrollHdl ) );
459 aSlider.SetPageSize( 4 );
460 aSlider.SetVisibleSize( 4 );
461 aSlider.SetLineSize( 1 );
462 aSlider.SetRange( Range( 0, nArgs ) );
463 aSlider.SetThumbPos( nOffset );
464 aSlider.Show();
465 }
466
467 UpdateParas();
468 }
469
UpdateParas()470 void ParaWin::UpdateParas()
471 {
472 sal_uInt16 i;
473 sal_uInt16 nOffset = GetSliderPos();
474
475 if ( nArgs > 0 )
476 {
477 for ( i=0; (i<nArgs) && (i<4); i++ )
478 {
479 UpdateArgInput( nOffset, i );
480 ShowParaLine(i);
481 }
482 }
483
484 for ( i=nArgs; i<4; i++ ) HideParaLine(i);
485 }
486
487
GetSliderPos()488 sal_uInt16 ParaWin::GetSliderPos()
489 {
490 return (sal_uInt16) aSlider.GetThumbPos();
491 }
492
SetSliderPos(sal_uInt16 nSliderPos)493 void ParaWin::SetSliderPos(sal_uInt16 nSliderPos)
494 {
495 sal_uInt16 nOffset = GetSliderPos();
496
497 if(aSlider.IsVisible() && nOffset!=nSliderPos)
498 {
499 aSlider.SetThumbPos(nSliderPos);
500 for ( sal_uInt16 i=0; i<4; i++ )
501 {
502 UpdateArgInput( nSliderPos, i );
503 }
504 }
505 }
506
SliderMoved()507 void ParaWin::SliderMoved()
508 {
509 sal_uInt16 nOffset = GetSliderPos();
510
511 for ( sal_uInt16 i=0; i<4; i++ )
512 {
513 UpdateArgInput( nOffset, i );
514 }
515 if(nEdFocus!=NOT_FOUND)
516 {
517 UpdateArgDesc( nEdFocus );
518 aArgInput[nEdFocus].SetArgSelection(Selection(0,SELECTION_MAX ));
519 nActiveLine=nEdFocus+nOffset;
520 ArgumentModified();
521 aArgInput[nEdFocus].UpdateAccessibleNames();
522 }
523 aScrollLink.Call(this);
524 }
525
ArgumentModified()526 void ParaWin::ArgumentModified()
527 {
528 aArgModifiedLink.Call(this);
529 }
530
FxClick()531 void ParaWin::FxClick()
532 {
533 aFxLink.Call(this);
534 }
535
536
IMPL_LINK(ParaWin,GetFxHdl,ArgInput *,pPtr)537 IMPL_LINK( ParaWin, GetFxHdl, ArgInput*, pPtr )
538 {
539 sal_uInt16 nOffset = GetSliderPos();
540 nEdFocus=NOT_FOUND;
541 for ( sal_uInt16 nPos=0; nPos<5;nPos++)
542 {
543 if(pPtr == &aArgInput[nPos])
544 {
545 nEdFocus=nPos;
546 break;
547 }
548 }
549
550 if(nEdFocus!=NOT_FOUND)
551 {
552 aArgInput[nEdFocus].SetArgSelection(Selection(0,SELECTION_MAX ));
553 nActiveLine=nEdFocus+nOffset;
554 FxClick();
555 }
556 return 0;
557 }
558
IMPL_LINK(ParaWin,GetFxFocusHdl,ArgInput *,pPtr)559 IMPL_LINK( ParaWin, GetFxFocusHdl, ArgInput*, pPtr )
560 {
561 sal_uInt16 nOffset = GetSliderPos();
562 nEdFocus=NOT_FOUND;
563 for ( sal_uInt16 nPos=0; nPos<5;nPos++)
564 {
565 if(pPtr == &aArgInput[nPos])
566 {
567 nEdFocus=nPos;
568 break;
569 }
570 }
571
572 if(nEdFocus!=NOT_FOUND)
573 {
574 aArgInput[nEdFocus].SetArgSelection(Selection(0,SELECTION_MAX ));
575 UpdateArgDesc( nEdFocus );
576 nActiveLine=nEdFocus+nOffset;
577 }
578 return 0;
579 }
580
581
582
IMPL_LINK(ParaWin,GetEdFocusHdl,ArgInput *,pPtr)583 IMPL_LINK( ParaWin, GetEdFocusHdl, ArgInput*, pPtr )
584 {
585 sal_uInt16 nOffset = GetSliderPos();
586 nEdFocus=NOT_FOUND;
587 for ( sal_uInt16 nPos=0; nPos<5;nPos++)
588 {
589 if(pPtr == &aArgInput[nPos])
590 {
591 nEdFocus=nPos;
592 break;
593 }
594 }
595
596 if(nEdFocus!=NOT_FOUND)
597 {
598 aArgInput[nEdFocus].SetArgSelection(Selection(0,SELECTION_MAX ));
599 UpdateArgDesc( nEdFocus );
600 nActiveLine=nEdFocus+nOffset;
601 ArgumentModified();
602 aArgInput[nEdFocus].UpdateAccessibleNames();
603 }
604
605 return 0;
606 }
607
608
IMPL_LINK(ParaWin,ScrollHdl,ScrollBar *,EMPTYARG)609 IMPL_LINK( ParaWin, ScrollHdl, ScrollBar*, EMPTYARG )
610 {
611 SliderMoved();
612
613 return 0;
614 }
615
IMPL_LINK(ParaWin,ModifyHdl,ArgInput *,pPtr)616 IMPL_LINK( ParaWin, ModifyHdl, ArgInput*, pPtr )
617 {
618 sal_uInt16 nOffset = GetSliderPos();
619 nEdFocus=NOT_FOUND;
620 for ( sal_uInt16 nPos=0; nPos<5;nPos++)
621 {
622 if(pPtr == &aArgInput[nPos])
623 {
624 nEdFocus=nPos;
625 break;
626 }
627 }
628 if(nEdFocus!=NOT_FOUND)
629 {
630 aParaArray[nEdFocus+nOffset] = aArgInput[nEdFocus].GetArgVal();
631 UpdateArgDesc( nEdFocus);
632 nActiveLine=nEdFocus+nOffset;
633 }
634
635 ArgumentModified();
636 return 0;
637 }
638
639
640
641 } // formula
642