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

// include ---------------------------------------------------------------
#include "sdabstdlg.hxx" 
#include <sfx2/basedlgs.hxx>

#define DECL_ABSTDLG_BASE(Class,DialogClass)		\
	DialogClass* 		pDlg;                   	\
public:												\
					Class( DialogClass* p)			\
					 : pDlg(p)						\
					 {}                             \
	virtual			~Class();               		\
	virtual	short	Execute() ;

#define IMPL_ABSTDLG_BASE(Class)					\
Class::~Class()                    					\
{                                                   \
	delete pDlg;                                 	\
}													\
short Class::Execute()                             \
{                                                   \
	return pDlg->Execute();                      	\
}

namespace sd {
	class MorphDlg;
	class CopyDlg;
	class BreakDlg;
	class OutlineBulletDlg;
        class HeaderFooterDialog;
}
// add for BreakDlg
class Dialog;
class VclAbstractDialog_Impl : public VclAbstractDialog
{
	DECL_ABSTDLG_BASE(VclAbstractDialog_Impl,Dialog)
};

// add for CopyDlg

class AbstractCopyDlg_Impl : public AbstractCopyDlg
{
	DECL_ABSTDLG_BASE(AbstractCopyDlg_Impl,::sd::CopyDlg)
	virtual void	GetAttr( SfxItemSet& rOutAttrs );
};

// add for SdCustomShowDlg
class SdCustomShowDlg;
class AbstractSdCustomShowDlg_Impl : public AbstractSdCustomShowDlg
{
	DECL_ABSTDLG_BASE(AbstractSdCustomShowDlg_Impl,SdCustomShowDlg)
	virtual sal_Bool		IsModified() const ;
	virtual sal_Bool		IsCustomShow() const ;
};

//add for SdCharDlg begin
class SfxTabDialog;
class AbstractTabDialog_Impl : public SfxAbstractTabDialog
{
	DECL_ABSTDLG_BASE( AbstractTabDialog_Impl,SfxTabDialog )
	virtual void				SetCurPageId( sal_uInt16 nId );
	virtual const SfxItemSet* 	GetOutputItemSet() const;
	virtual const sal_uInt16*		GetInputRanges( const SfxItemPool& pItem );
	virtual void				SetInputSet( const SfxItemSet* pInSet );
		//From class Window.
    virtual void		SetText( const XubString& rStr );
    virtual String   	GetText() const;
};
//add for SdCharDlg end


//add for OutlineBulletDlg begin
class SfxTabDialog;
class AbstractBulletDialog_Impl : public SfxAbstractTabDialog
{
	DECL_ABSTDLG_BASE( AbstractBulletDialog_Impl,SfxTabDialog )
	virtual void				SetCurPageId( sal_uInt16 nId );
	virtual const SfxItemSet* 	GetOutputItemSet() const;
	virtual const sal_uInt16*		GetInputRanges( const SfxItemPool& pItem );
	virtual void				SetInputSet( const SfxItemSet* pInSet );
		//From class Window.
    virtual void		SetText( const XubString& rStr );
    virtual String   	GetText() const;
};
//add for OutlineBulletDlg end

class SdPresLayoutTemplateDlg;
class SdPresLayoutTemplateDlg_Impl : public SfxAbstractTabDialog
{
	DECL_ABSTDLG_BASE( SdPresLayoutTemplateDlg_Impl,SdPresLayoutTemplateDlg )
	virtual void				SetCurPageId( sal_uInt16 nId );
	virtual const SfxItemSet* 	GetOutputItemSet() const;
	virtual const sal_uInt16*		GetInputRanges( const SfxItemPool& pItem );
	virtual void				SetInputSet( const SfxItemSet* pInSet );
		//From class Window.
    virtual void		SetText( const XubString& rStr );
    virtual String   	GetText() const;
};

// add for AssistentDlg
class AssistentDlg;
class AbstractAssistentDlg_Impl : public AbstractAssistentDlg
{
	DECL_ABSTDLG_BASE(AbstractAssistentDlg_Impl,AssistentDlg)
	virtual SfxObjectShellLock GetDocument();
	virtual OutputType GetOutputMedium() const;
	virtual sal_Bool IsSummary() const;
	virtual StartType GetStartType() const;
	virtual String GetDocPath() const;
	virtual sal_Bool GetStartWithFlag() const;
	virtual sal_Bool IsDocEmpty() const;
	virtual String GetPassword();
};

// add for SdModifyFieldDlg
class SdModifyFieldDlg;
class AbstractSdModifyFieldDlg_Impl : public AbstractSdModifyFieldDlg
{
	DECL_ABSTDLG_BASE(AbstractSdModifyFieldDlg_Impl,SdModifyFieldDlg)
	virtual SvxFieldData*		GetField();
	virtual SfxItemSet			GetItemSet();
};

// add for SdSnapLineDlg
class SdSnapLineDlg;
class AbstractSdSnapLineDlg_Impl : public AbstractSdSnapLineDlg
{
	DECL_ABSTDLG_BASE(AbstractSdSnapLineDlg_Impl,SdSnapLineDlg)
	virtual void GetAttr(SfxItemSet& rOutAttrs);
	virtual void HideRadioGroup();
	virtual void HideDeleteBtn();
	virtual void SetInputFields(sal_Bool bEnableX, sal_Bool bEnableY);
	//from class Window
	virtual void    SetText( const XubString& rStr );
};

// add for SdInsertLayerDlg
class SdInsertLayerDlg;
class AbstractSdInsertLayerDlg_Impl : public AbstractSdInsertLayerDlg
{
	DECL_ABSTDLG_BASE(AbstractSdInsertLayerDlg_Impl,SdInsertLayerDlg)
	virtual void	GetAttr( SfxItemSet& rOutAttrs ) ;
	//from class Window
	virtual void    SetHelpId( const rtl::OString& rHelpId ) ;
};

// add for SdInsertPasteDlg
class SdInsertPasteDlg;
class AbstractSdInsertPasteDlg_Impl : public AbstractSdInsertPasteDlg
{
	DECL_ABSTDLG_BASE(AbstractSdInsertPasteDlg_Impl,SdInsertPasteDlg)
	virtual sal_Bool			IsInsertBefore() const;
};

// add for SdInsertPagesObjsDlg
class SdInsertPagesObjsDlg;
class AbstractSdInsertPagesObjsDlg_Impl : public AbstractSdInsertPagesObjsDlg
{
	DECL_ABSTDLG_BASE(AbstractSdInsertPagesObjsDlg_Impl,SdInsertPagesObjsDlg)
	virtual ::Window *	GetWindow(); //this method is added for return a Window type pointer
	virtual List*   	GetList( sal_uInt16 nType );
	virtual sal_Bool		IsLink();
	virtual sal_Bool 		IsRemoveUnnessesaryMasterPages() const;
};

// add for MorphDlg
class AbstractMorphDlg_Impl : public AbstractMorphDlg
{
	DECL_ABSTDLG_BASE(AbstractMorphDlg_Impl,::sd::MorphDlg)
	virtual void			SaveSettings() const;
	virtual sal_uInt16			GetFadeSteps() const;
	virtual sal_Bool			IsAttributeFade() const ;
	virtual sal_Bool			IsOrientationFade() const ;
};

// add for SdStartPresentationDlg
class SdStartPresentationDlg;
class AbstractSdStartPresDlg_Impl : public AbstractSdStartPresDlg
{
	DECL_ABSTDLG_BASE(AbstractSdStartPresDlg_Impl,SdStartPresentationDlg)
	virtual void	GetAttr( SfxItemSet& rOutAttrs );
};

// add for SdPresLayoutDlg
class SdPresLayoutDlg;
class AbstractSdPresLayoutDlg_Impl : public AbstractSdPresLayoutDlg
{
	DECL_ABSTDLG_BASE(AbstractSdPresLayoutDlg_Impl,SdPresLayoutDlg)
	virtual void	GetAttr(SfxItemSet& rOutAttrs);
};

// add for SdActionDlg
class SfxSingleTabDialog; 
class AbstractSfxDialog_Impl : public SfxAbstractDialog 
{
	DECL_ABSTDLG_BASE(AbstractSfxDialog_Impl,SfxModalDialog)
	virtual const SfxItemSet* 	GetOutputItemSet() const;
	virtual void		SetText( const XubString& rStr );
    virtual String   	GetText() const;
};

// add for SdVectorizeDlg
class SdVectorizeDlg; 
class AbstractSdVectorizeDlg_Impl :public AbstractSdVectorizeDlg
{
	DECL_ABSTDLG_BASE(AbstractSdVectorizeDlg_Impl,SdVectorizeDlg)
	virtual const GDIMetaFile&	GetGDIMetaFile() const ;
};

// add for SdPublishingDlg
class SdPublishingDlg; 
class AbstractSdPublishingDlg_Impl :public AbstractSdPublishingDlg
{
	DECL_ABSTDLG_BASE(AbstractSdPublishingDlg_Impl,SdPublishingDlg)
	virtual void GetParameterSequence( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rParams );
};

// add for HeaderFooterDialog
class AbstractHeaderFooterDialog_Impl :public AbstractHeaderFooterDialog
{
  DECL_ABSTDLG_BASE(AbstractHeaderFooterDialog_Impl,::sd::HeaderFooterDialog)
  virtual void ApplyToAll( TabPage* pPage );
  virtual void Apply( TabPage* pPage );
  virtual void Cancel( TabPage* pPage );
};

//------------------------------------------------------------------------
//AbstractDialogFactory_Impl implementations
class SdAbstractDialogFactory_Impl : public SdAbstractDialogFactory
{

public:
	virtual VclAbstractDialog* 			CreateBreakDlg(::Window* pWindow, ::sd::DrawView* pDrView, ::sd::DrawDocShell* pShell, sal_uLong nSumActionCount, sal_uLong nObjCount );
	virtual AbstractCopyDlg*			CreateCopyDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, XColorListSharedPtr aColTab, ::sd::View* pView );
	virtual AbstractSdCustomShowDlg*	CreateSdCustomShowDlg( ::Window* pWindow, SdDrawDocument& rDrawDoc );
	virtual SfxAbstractTabDialog*		CreateSdTabCharDialog( ::Window* pParent, const SfxItemSet* pAttr, SfxObjectShell* pDocShell );
	virtual SfxAbstractTabDialog*		CreateSdTabPageDialog( ::Window* pParent, const SfxItemSet* pAttr, SfxObjectShell* pDocShell, sal_Bool bAreaPage = sal_True );
	virtual AbstractAssistentDlg*		CreateAssistentDlg( ::Window* pParent, sal_Bool bAutoPilot);
	virtual AbstractSdModifyFieldDlg*	CreateSdModifyFieldDlg( ::Window* pWindow, const SvxFieldData* pInField, const SfxItemSet& rSet );
	virtual AbstractSdSnapLineDlg*		CreateSdSnapLineDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, ::sd::View* pView);
	virtual AbstractSdInsertLayerDlg*	CreateSdInsertLayerDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, bool bDeletable,	String aStr );
	virtual AbstractSdInsertPasteDlg*	CreateSdInsertPasteDlg( ::Window* pWindow );
	virtual AbstractSdInsertPagesObjsDlg* CreateSdInsertPagesObjsDlg( ::Window* pParent, const SdDrawDocument* pDoc, SfxMedium* pSfxMedium, const String& rFileName );
	virtual AbstractMorphDlg*			CreateMorphDlg( ::Window* pParent, const SdrObject* pObj1, const SdrObject* pObj2);
	virtual SfxAbstractTabDialog*		CreateSdOutlineBulletTabDlg ( ::Window* pParent, const SfxItemSet* pAttr, ::sd::View* pView = NULL );
	virtual SfxAbstractTabDialog*		CreateSdParagraphTabDlg ( ::Window* pParent, const SfxItemSet* pAttr );
	virtual AbstractSdStartPresDlg*		CreateSdStartPresentationDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, List& rPageNames, List* pCSList );
	virtual SfxAbstractTabDialog*		CreateSdPresLayoutTemplateDlg( SfxObjectShell* pDocSh, ::Window* pParent, SdResId DlgId, SfxStyleSheetBase& rStyleBase, PresentationObjects ePO, SfxStyleSheetBasePool* pSSPool );
	virtual AbstractSdPresLayoutDlg*	CreateSdPresLayoutDlg( ::sd::DrawDocShell* pDocShell, ::sd::ViewShell* pViewShell, ::Window* pWindow, const SfxItemSet& rInAttrs);
	virtual SfxAbstractTabDialog*		CreateSdTabTemplateDlg( ::Window* pParent, const SfxObjectShell* pDocShell, SfxStyleSheetBase& rStyleBase, SdrModel* pModel, SdrView* pView );
	virtual SfxAbstractDialog*			CreatSdActionDialog( ::Window* pParent, const SfxItemSet* pAttr, ::sd::View* pView );
	virtual AbstractSdVectorizeDlg*		CreateSdVectorizeDlg( ::Window* pParent, const Bitmap& rBmp, ::sd::DrawDocShell* pDocShell );
	virtual AbstractSdPublishingDlg*	CreateSdPublishingDlg( ::Window* pWindow, DocumentType eDocType);

  	virtual VclAbstractDialog*          CreateMasterLayoutDialog( ::Window* pParent, 
																  SdDrawDocument* pDoc,
																  SdPage* ); // add for MasterLayoutDialog

	virtual AbstractHeaderFooterDialog* CreateHeaderFooterDialog( ViewShell* pViewShell, 
																  ::Window* pParent, 
																  SdDrawDocument* pDoc, 
																  SdPage* pCurrentPage ); // add for HeaderFooterDialog

	// For TabPage
	virtual CreateTabPage				GetSdOptionsContentsTabPageCreatorFunc();
	virtual CreateTabPage				GetSdPrintOptionsTabPageCreatorFunc();
	virtual CreateTabPage				GetSdOptionsMiscTabPageCreatorFunc();
	virtual CreateTabPage				GetSdOptionsSnapTabPageCreatorFunc();
};

#endif

