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