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