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

// include ---------------------------------------------------------------

#include <vcl/button.hxx>
#include <vcl/fixed.hxx>
#include <sfx2/tabdlg.hxx>
#include <svx/relfld.hxx>		// SvxRelativeField
#include <svx/paraprev.hxx>		// Preview
#include <svx/frmdirlbox.hxx>
#include <vcl/lstbox.hxx>
#include <svx/flagsdef.hxx>

// define ----------------------------------------------------------------

// 1/2 cm in TWIPS
// wird auch fuer Minimalgrosse der LayFrms aller Arten benutzt
//CHINA001 #define MM50   283

// forward ---------------------------------------------------------------

class SvxLineSpacingItem;
class SvxParagraphControllerItem;

// class SvxStdParagraphTabPage ------------------------------------------

/* 	{k:\svx\prototyp\dialog\parastd.bmp}

	[Beschreibung]
	Mit dieser TabPage koennen Standard-Attribute eines Absatzes eingestellt
	werden (Einzug, Abstand, Ausrichtung, Zeilenabstand).

	[Items]
	<SvxAdjustItem><SID_ATTR_PARA_ADJUST>
	<SvxLineSpacingItem><SID_ATTR_PARA_LINESPACE>
	<SvxULSpaceItem><SID_ATTR_ULSPACE>
	<SvxLRSpaceItem><SID_ATTR_LRSPACE>
*/

class SvxStdParagraphTabPage: public SfxTabPage
{
	using TabPage::DeactivatePage;

private:
	SvxStdParagraphTabPage( Window* pParent, const SfxItemSet& rSet );

	FixedLine               aIndentFrm;
	// Einzug
	FixedText				aLeftLabel;
	SvxRelativeField		aLeftIndent;

	FixedText				aRightLabel;
	SvxRelativeField		aRightIndent;

	FixedText				aFLineLabel;
	SvxRelativeField		aFLineIndent;
	CheckBox				aAutoCB;

	FixedLine               aDistFrm;

	// Abstaende
	FixedText				aTopLabel;
	SvxRelativeField		aTopDist;
	FixedText				aBottomLabel;
	SvxRelativeField		aBottomDist;

	// Zeilenabstand
	FixedLine               aLineDistFrm;
	ListBox					aLineDist;
	FixedText				aLineDistAtLabel;
	MetricField				aLineDistAtPercentBox;
	MetricField				aLineDistAtMetricBox;
	String 					sAbsDist;
	SvxParaPrevWindow		aExampleWin;

	//Registerhaltigkeit - nur Writer
	FixedLine               aRegisterFL;
	CheckBox				aRegisterCB;

	Edit*					pActLineDistFld;
	long					nAbst;
	long					nWidth;
	long 					nMinFixDist;
	sal_Bool					bRelativeMode;
    sal_Bool                    bNegativeIndents;

#ifdef _SVX_PARAGRPH_CXX
	void					SetLineSpacing_Impl( const SvxLineSpacingItem& rAttr );
	void					Init_Impl();
	void					UpdateExample_Impl( sal_Bool bAll = sal_False );

	DECL_LINK( LineDistHdl_Impl, ListBox* );
	DECL_LINK( ModifyHdl_Impl, SvxRelativeField* );
	DECL_LINK( AutoHdl_Impl, CheckBox* );
#endif

protected:
	virtual int				DeactivatePage( SfxItemSet* pSet = 0 );

public:
	DECL_LINK( ELRLoseFocusHdl, Edit* );

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

	virtual sal_Bool			FillItemSet( SfxItemSet& rSet );
	virtual void			Reset( const SfxItemSet& rSet );


	void					SetPageWidth( sal_uInt16 nPageWidth );
	void					EnableRelativeMode();
	void 					EnableRegisterMode();
	void					EnableAutoFirstLine();
	void					EnableAbsLineDist(long nMinTwip);
	void					EnableNegativeMode();
	virtual void 			PageCreated(SfxAllItemSet aSet); // add CHINA001
};

// class SvxParaAlignTabPage ------------------------------------------------

class SvxParaAlignTabPage : public SfxTabPage
{
	using TabPage::DeactivatePage;

	// Ausrichtung
	FixedLine               aAlignFrm;
	RadioButton             aLeft;
	RadioButton				aRight;
	RadioButton				aCenter;
	RadioButton				aJustify;
	FixedText				aLastLineFT;
	ListBox				    aLastLineLB;
	CheckBox				aExpandCB;

	CheckBox                aSnapToGridCB;

	//preview
	SvxParaPrevWindow		aExampleWin;
	//vertical alignment
	FixedLine               aVertAlignFL;

	FixedText               aVertAlignFT;
	ListBox                 aVertAlignLB;

    FixedLine               	aPropertiesFL;
    FixedText               	aTextDirectionFT;
    svx::FrameDirectionListBox	aTextDirectionLB;

#ifdef _SVX_PARAGRPH_CXX
	DECL_LINK( 				AlignHdl_Impl, RadioButton* );
    DECL_LINK( 				LastLineHdl_Impl, ListBox* );
    DECL_LINK( 				TextDirectionHdl_Impl, ListBox* );

	void					UpdateExample_Impl( sal_Bool bAll = sal_False );
#endif

							SvxParaAlignTabPage( Window* pParent, const SfxItemSet& rSet );
	virtual					~SvxParaAlignTabPage();

protected:
	virtual int				DeactivatePage( SfxItemSet* pSet = 0 );

public:
	static SfxTabPage*		Create( Window* pParent, const SfxItemSet& rSet );
	static sal_uInt16*			GetRanges();

	virtual sal_Bool			FillItemSet( SfxItemSet& rSet );
	virtual void			Reset( const SfxItemSet& rSet );

	void					EnableJustifyExt();
	virtual void 			PageCreated(SfxAllItemSet aSet); // add CHINA001
};

// class SvxExtParagraphTabPage ------------------------------------------

/*	{k:\svx\prototyp\dialog\paraext.bmp}

	[Beschreibung]
	Mit dieser TabPage koennen Spezial-Attribute eines Absatzes eingestellt
	werden (Silbentrennung, Seitenumbruch, Schusterjungen, Hurenkinder, ...).

	[Items]
	<SvxHyphenZoneItem><SID_ATTR_PARA_HYPHENZONE>
	<SvxFmtBreakItem><SID_ATTR_PARA_PAGEBREAK>
	<SvxFmtSplitItem><SID_ATTR_PARA_SPLIT>
	<SvxWidowsItem><SID_ATTR_PARA_WIDOWS>
	<SvxOrphansItem><SID_ATTR_PARA_ORPHANS>
*/

class SvxExtParagraphTabPage: public SfxTabPage
{
	using TabPage::DeactivatePage;

public:
	virtual				~SvxExtParagraphTabPage();

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

	virtual sal_Bool		FillItemSet( SfxItemSet& rSet );
	virtual void		Reset( const SfxItemSet& rSet );

	void				DisablePageBreak();

protected:
	virtual int			DeactivatePage( SfxItemSet* pSet = 0 );

private:
						SvxExtParagraphTabPage( Window* pParent, const SfxItemSet& rSet );

	// Silbentrennung
	FixedLine           aExtFL;
	TriStateBox			aHyphenBox;
    FixedText			aBeforeText;
	NumericField		aExtHyphenBeforeBox;
//	FixedText			aHyphenBeforeLabel;
    FixedText			aAfterText;
	NumericField		aExtHyphenAfterBox;
//	FixedText			aHyphenAfterLabel;
	FixedText     		aMaxHyphenLabel;
	NumericField        aMaxHyphenEdit;

	// Seitenumbruch
	FixedLine			aBreaksFL;
	TriStateBox			aPageBreakBox;
    FixedText           aBreakTypeFT;
    ListBox             aBreakTypeLB;
    FixedText           aBreakPositionFT;
    ListBox             aBreakPositionLB;
	TriStateBox			aApplyCollBtn;
	ListBox				aApplyCollBox;
	FixedText           aPagenumText;
	NumericField       	aPagenumEdit;

    FixedLine           aExtendFL;

	// Absatzteilung
	TriStateBox			aKeepTogetherBox;
	TriStateBox			aKeepParaBox;

	// Witwen/Waisen
	TriStateBox			aOrphanBox;
	NumericField       	aOrphanRowNo;
	FixedText			aOrphanRowLabel;

	TriStateBox			aWidowBox;
	NumericField       	aWidowRowNo;
	FixedText			aWidowRowLabel;

	sal_Bool                bPageBreak;
	sal_Bool				bHtmlMode;
	sal_uInt16				nStdPos;

#ifdef _SVX_PARAGRPH_CXX
	DECL_LINK( PageBreakHdl_Impl, TriStateBox* );
	DECL_LINK( KeepTogetherHdl_Impl, TriStateBox* );
	DECL_LINK( WidowHdl_Impl, TriStateBox* );
	DECL_LINK( OrphanHdl_Impl, TriStateBox* );
	DECL_LINK( HyphenClickHdl_Impl, TriStateBox* );
	DECL_LINK( ApplyCollClickHdl_Impl, TriStateBox* );
    DECL_LINK( PageBreakPosHdl_Impl, ListBox* );
    DECL_LINK( PageBreakTypeHdl_Impl, ListBox* );
#endif
	virtual void 			PageCreated(SfxAllItemSet aSet); // add CHINA001
};
/* -----------------------------29.11.00 11:33--------------------------------

 ---------------------------------------------------------------------------*/
class SvxAsianTabPage : public SfxTabPage
{
    FixedLine       aOptionsFL;

	TriStateBox		aForbiddenRulesCB;
	TriStateBox		aHangingPunctCB;

	TriStateBox		aScriptSpaceCB;

	SvxAsianTabPage( Window* pParent, const SfxItemSet& rSet );

#ifdef _SVX_PARAGRPH_CXX
	DECL_LINK( ClickHdl_Impl, TriStateBox* );
#endif
public:
	~SvxAsianTabPage();


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

	virtual sal_Bool		FillItemSet( SfxItemSet& rSet );
	virtual void		Reset( const SfxItemSet& rSet );

};

#endif // #ifndef _SVX_PARAGRPH_HXX
