/**************************************************************
 *
 * 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 _SVX_NUMFMT_HXX
#define _SVX_NUMFMT_HXX

//------------------------------------------------------------------------

#include <vcl/window.hxx>
#include <tools/color.hxx>
#include <tools/string.hxx>
#include <sfx2/tabdlg.hxx>
#include <vcl/fixed.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/edit.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/field.hxx>
#include <svx/langbox.hxx>
#include <svx/fontlb.hxx>

//CHINA001 #define SVX_NUMVAL_STANDARD		-1234.12345678901234
//CHINA001 #define SVX_NUMVAL_CURRENCY		-1234
//CHINA001 #define SVX_NUMVAL_PERCENT		-0.1295
//CHINA001 #define SVX_NUMVAL_TIME 		36525.5678935185
//CHINA001 #define SVX_NUMVAL_DATE 		36525.5678935185
//CHINA001 #define SVX_NUMVAL_BOOLEAN 		1

//------------------------------------------------------------------------

class SvxNumberFormatShell;
class SvxNumberInfoItem;

//------------------------------------------------------------------------

class SvxNumberPreviewImpl : public Window
{
private:
	String			aPrevStr;
	Color			aPrevCol;

	void			InitSettings( sal_Bool bForeground, sal_Bool bBackground );

protected:
	virtual void	Paint( const Rectangle& rRect );
	virtual void	StateChanged( StateChangedType nStateChange );
	virtual void	DataChanged( const DataChangedEvent& rDCEvt );

public:
	SvxNumberPreviewImpl( Window* pParent, const ResId& rResId );
	~SvxNumberPreviewImpl();

    void            NotifyChange( const String& rPrevStr, const Color* pColor = NULL );
};

// -----------------------------------------------------------------------

#include <sfx2/layout.hxx>
#include <layout/layout-pre.hxx>

class SvxNumberFormatTabPage : public SfxTabPage
{
	using SfxTabPage::DeactivatePage;

public:
	~SvxNumberFormatTabPage();

	static SfxTabPage*		Create( Window* pParent,
									const SfxItemSet& rAttrSet );
	static sal_uInt16*			GetRanges();

	virtual	sal_Bool 			FillItemSet( SfxItemSet& rSet );
	virtual	void 			Reset( const SfxItemSet& rSet );
	virtual int 			DeactivatePage	( SfxItemSet* pSet = NULL );

	void					SetInfoItem( const SvxNumberInfoItem& rItem );
	void					SetNumberFormatList( const SvxNumberInfoItem& rItem )
								{ SetInfoItem( rItem ); }

	void					SetOkHdl( const Link& rOkHandler );
	void					HideLanguage(sal_Bool nFlag=sal_True);
	virtual long			PreNotify( NotifyEvent& rNEvt );
	virtual void			PageCreated (SfxAllItemSet aSet); //add CHINA001
private:
	SvxNumberFormatTabPage( Window*	pParent,
							const SfxItemSet& rCoreAttrs );
	FixedText				aFtCategory;
	ListBox					aLbCategory;
	FixedText				aFtFormat;
	ListBox					aLbCurrency;
	SvxFontListBox			aLbFormat;
	FixedText				aFtLanguage;
	SvxLanguageBox			aLbLanguage;
    CheckBox                aCbSourceFormat;
	SvxNumberPreviewImpl	aWndPreview;
	FixedLine               aFlOptions;
	FixedText				aFtDecimals;
	NumericField			aEdDecimals;
	CheckBox				aBtnNegRed;
	FixedText				aFtLeadZeroes;
	NumericField			aEdLeadZeroes;
	CheckBox				aBtnThousand;

	FixedText				aFtEdFormat;
	Edit					aEdFormat;
	ImageButton				aIbAdd;
	ImageButton				aIbInfo;
	ImageButton				aIbRemove;

	FixedText				aFtComment;
	Edit					aEdComment;
	Timer					aResetWinTimer;


	SvxNumberInfoItem*		pNumItem;
	SvxNumberFormatShell* 	pNumFmtShell;
	sal_uLong					nInitFormat;
	Link					fnOkHdl;

	sal_Bool					bNumItemFlag; //Fuer Handling mit DocShell
	sal_Bool					bOneAreaFlag;
	short					nFixedCategory;

	long					nCatHeight;

	long					nCurFormatY;
	long					nCurFormatHeight;
	long					nStdFormatY;
	long					nStdFormatHeight;
    LocalizedString sAutomaticEntry;

	Window*					pLastActivWindow;

#ifdef _SVX_NUMFMT_CXX
	void 	Init_Impl();
	void	FillCurrencyBox();
	void 	FillFormatListBox_Impl( SvxDelStrgs& rEntries );
	void 	UpdateOptions_Impl( sal_Bool bCheckCatChange );
	void	UpdateFormatListBox_Impl( sal_uInt16 bCat, sal_Bool bUpdateEdit );
	void	DeleteEntryList_Impl( SvxDelStrgs& rEntries );
	void	Obstructing();
    void    EnableBySourceFormat_Impl();
	void	SetCategory( sal_uInt16 nPos );
    String  GetExpColorString( Color*& rpPreviewColor, const String& aFormatStr, short nTmpCatPos );
    void    MakePreviewText( const String& rFormat );
    void    ChangePreviewText( sal_uInt16 nPos );
    void    AddAutomaticLanguage_Impl(LanguageType eAutoLang, sal_Bool bSelect);
	// Handler
	DECL_LINK( LostFocusHdl_Impl, Edit* pEd );
	DECL_LINK( DoubleClickHdl_Impl, SvxFontListBox* pLb );
	DECL_LINK( SelFormatHdl_Impl, void * );
	DECL_LINK( ClickHdl_Impl, ImageButton* pIB );
	DECL_LINK( EditHdl_Impl, Edit* pEdFormat );
	DECL_LINK( OptHdl_Impl, void * );
	DECL_LINK( TimeHdl_Impl, Timer * );

#endif
};

#include <layout/layout-post.hxx>

#endif
