xref: /AOO41X/main/formula/source/ui/dlg/parawin.cxx (revision ffad8df045fe8db79e3e50f731c1fa6ab6501c83)
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