/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef SC_PARAWIN_HXX
#define SC_PARAWIN_HXX

#include "funcutl.hxx"
#include "global.hxx"		// ScAddress
#include <svtools/stdctrl.hxx>
#ifndef _LSTBOX_HXX //autogen
#include <vcl/lstbox.hxx>
#endif
#include <vcl/group.hxx>
#include <svtools/svmedit.hxx>
#include <vcl/tabpage.hxx>

#ifndef _SVSTDARR_STRINGS

#define _SVSTDARR_STRINGS
#include <svl/svstdarr.hxx>

#endif
#include <vcl/tabctrl.hxx>

#include <vector>

class ScFuncDesc;

//============================================================================
#define	NOT_FOUND 0xffff
//============================================================================

class ScParaWin : public TabPage
{
private:

		Link			aScrollLink;
		Link			aFxLink;
		Link			aArgModifiedLink;

        ::std::vector<sal_uInt16>   aVisibleArgMapping;
		const ScFuncDesc*	pFuncDesc;
		ScAnyRefDlg*	pMyParent;
		sal_uInt16			nArgs;      // unsuppressed arguments
		Font			aFntBold;
		Font			aFntLight;

		FixedInfo		aFtEditDesc;
		FixedText		aFtArgName;
		FixedInfo		aFtArgDesc;

		ImageButton		aBtnFx1;
		FixedText		aFtArg1;
		ArgEdit			aEdArg1;
		formula::RefButton		aRefBtn1;
		ImageButton		aBtnFx2;
		FixedText		aFtArg2;
		ArgEdit			aEdArg2;
		formula::RefButton		aRefBtn2;
		ImageButton		aBtnFx3;
		FixedText		aFtArg3;
		ArgEdit			aEdArg3;
		formula::RefButton		aRefBtn3;
		ImageButton		aBtnFx4;
		FixedText		aFtArg4;
		ArgEdit			aEdArg4;
		formula::RefButton		aRefBtn4;
		ScrollBar		aSlider;
		sal_Bool			bRefMode;

		sal_uInt16			nEdFocus;
		sal_uInt16			nActiveLine;

		ArgInput		aArgInput[4];
		String			aDefaultString;
		SvStrings		aParaArray;
		DECL_LINK( ScrollHdl, ScrollBar* );
		DECL_LINK( ModifyHdl, ArgInput* );
		DECL_LINK( GetEdFocusHdl, ArgInput* );
		DECL_LINK( GetFxFocusHdl, ArgInput* );
		DECL_LINK( GetFxHdl, ArgInput* );

protected:

		virtual void	SliderMoved();
		virtual void	ArgumentModified();
		virtual void	FxClick();

		void			InitArgInput( sal_uInt16 nPos, FixedText& rFtArg, ImageButton& rBtnFx,
										ArgEdit& rEdArg, formula::RefButton& rRefBtn);

		void			DelParaArray();
		void			SetArgumentDesc(const String& aText);
		void			SetArgumentText(const String& aText);


		void			SetArgName		(sal_uInt16 no,const String &aArg);
		void			SetArgNameFont	(sal_uInt16 no,const Font&);
		void			SetArgVal		(sal_uInt16 no,const String &aArg);

		void			HideParaLine(sal_uInt16 no);
		void			ShowParaLine(sal_uInt16 no);
		void			UpdateArgDesc( sal_uInt16 nArg );
		void			UpdateArgInput( sal_uInt16 nOffset, sal_uInt16 i );

public:
						ScParaWin(ScAnyRefDlg* pParent,Point aPos);
						~ScParaWin();

		void			SetFunctionDesc(const ScFuncDesc* pFDesc);
		void			SetArgumentOffset(sal_uInt16 nOffset);
		void	    	SetEditDesc(const String& aText);
		void			UpdateParas();
		void			ClearAll();

		sal_Bool			IsRefMode() {return bRefMode;}
		void			SetRefMode(sal_Bool bFlag) {bRefMode=bFlag;}

		sal_uInt16	    	GetActiveLine();
		void			SetActiveLine(sal_uInt16 no);
		formula::RefEdit*		GetActiveEdit();
		String			GetActiveArgName();

		String			GetArgument(sal_uInt16 no);
		void			SetArgument(sal_uInt16 no, const String& aString);
		void			SetArgumentFonts(const Font&aBoldFont,const Font&aLightFont);

		void			SetEdFocus(sal_uInt16 nEditLine); //Sichtbare Editzeilen
		sal_uInt16			GetSliderPos();
		void			SetSliderPos(sal_uInt16 nSliderPos);

		void            SetScrollHdl( const Link& rLink ) { aScrollLink = rLink; }
		const Link&     GetScrollHdl() const { return aScrollLink; }

		void            SetArgModifiedHdl( const Link& rLink ) { aArgModifiedLink = rLink; }
		const Link&     GetArgModifiedHdl() const { return aArgModifiedLink; }

		void            SetFxHdl( const Link& rLink ) { aFxLink = rLink; }
		const Link&     GetFxHdl() const { return aFxLink; }
};





#endif // SC_PARAWIN_HXX

