|  | /************************************************************** | 
|  | * | 
|  | * 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 _ICCDLG_HXX | 
|  | #define _ICCDLG_HXX | 
|  |  | 
|  | #include <vcl/tabpage.hxx> | 
|  | #include <vcl/msgbox.hxx> | 
|  | #include <vcl/dialog.hxx> | 
|  | #ifndef _SV_BUTTON_HXX | 
|  | #include <vcl/button.hxx> | 
|  | #endif | 
|  | #include <vcl/image.hxx> | 
|  | #include <svtools/ivctrl.hxx> | 
|  | #include <svl/itempool.hxx> | 
|  | #include <svl/itemset.hxx> | 
|  | #include <tools/list.hxx> | 
|  | #include <tools/string.hxx> | 
|  |  | 
|  | #define CTRLS_OFFSET		3 | 
|  | #define BUTTON_DISTANCE		8 | 
|  | #define RET_USER 		100 | 
|  | #define RET_USER_CANCEL	101 | 
|  |  | 
|  | // forward-declarations | 
|  | struct IconChoicePageData; | 
|  | class IconChoiceDialog; | 
|  | class IconChoicePage; | 
|  |  | 
|  | // Create-Function | 
|  | typedef IconChoicePage* (*CreatePage)(Window *pParent, const SfxItemSet &rAttrSet); | 
|  | typedef sal_uInt16*		    (*GetPageRanges)(); // liefert internationale Which-Wert | 
|  |  | 
|  | // page-list | 
|  | DECLARE_LIST( IconChoicePageList, IconChoicePageData * ) | 
|  |  | 
|  | // position of iconchoicectrl | 
|  | enum EIconChoicePos { PosLeft, PosRight, PosTop, PosBottom }; | 
|  |  | 
|  | /********************************************************************** | 
|  | | | 
|  | | Data-structure for pages in dialog | 
|  | | | 
|  | \**********************************************************************/ | 
|  |  | 
|  | struct IconChoicePageData | 
|  | { | 
|  | sal_uInt16 nId;					 // Die ID | 
|  | CreatePage fnCreatePage;	 // Pointer auf die Factory | 
|  | GetPageRanges fnGetRanges;// Pointer auf die Ranges-Funktion | 
|  | IconChoicePage* pPage;		 // die TabPage selber | 
|  | sal_Bool bOnDemand;				 // Flag: ItemSet onDemand | 
|  | sal_Bool bRefresh; 				 // Flag: Seite mu\s neu initialisiert werden | 
|  |  | 
|  | // Konstruktor | 
|  | IconChoicePageData( sal_uInt16 Id, CreatePage fnPage, GetPageRanges fnRanges, sal_Bool bDemand ) | 
|  | : nId			( Id ), | 
|  | fnCreatePage	( fnPage ), | 
|  | fnGetRanges	( fnRanges ), | 
|  | pPage			( NULL ), | 
|  | bOnDemand		( bDemand ), | 
|  | bRefresh		( sal_False ) | 
|  | {} | 
|  | }; | 
|  |  | 
|  | /********************************************************************** | 
|  | | | 
|  | | IconChoicePage | 
|  | | | 
|  | \**********************************************************************/ | 
|  |  | 
|  | class IconChoicePage : public TabPage | 
|  | { | 
|  | using TabPage::ActivatePage; | 
|  | using TabPage::DeactivatePage; | 
|  |  | 
|  | private : | 
|  | const SfxItemSet*	pSet; | 
|  | String				aUserString; | 
|  | sal_Bool				bHasExchangeSupport; | 
|  | IconChoiceDialog*	pDialog; | 
|  | sal_Bool				bStandard; | 
|  |  | 
|  | void				SetDialog( IconChoiceDialog* pNew ) { pDialog = pNew; } | 
|  | IconChoiceDialog*	GetDialog() const { return pDialog; } | 
|  |  | 
|  | void				SetInputSet( const SfxItemSet* pNew ) { pSet = pNew; } | 
|  |  | 
|  | void				ImplInitSettings(); | 
|  |  | 
|  | protected : | 
|  | IconChoicePage( Window *pParent, const ResId &, const SfxItemSet &rAttrSet ); | 
|  |  | 
|  | sal_uInt16				GetSlot( sal_uInt16 nWhich ) const	{ return pSet->GetPool()->GetSlotId( nWhich ); } | 
|  | sal_uInt16				GetWhich( sal_uInt16 nSlot ) const	{ return pSet->GetPool()->GetWhich( nSlot ); } | 
|  |  | 
|  | public : | 
|  | virtual             ~IconChoicePage(); | 
|  |  | 
|  | const SfxItemSet&	GetItemSet() const { return *pSet; } | 
|  |  | 
|  | virtual sal_Bool		FillItemSet( SfxItemSet& ) = 0; | 
|  | virtual void		Reset( const SfxItemSet& ) = 0; | 
|  |  | 
|  | sal_Bool				HasExchangeSupport() const				{ return bHasExchangeSupport; } | 
|  | void				SetExchangeSupport( sal_Bool bNew = sal_True )	{ bHasExchangeSupport = bNew; } | 
|  |  | 
|  | enum { | 
|  | KEEP_PAGE = 0x0000,		// Fehlerbehandlung; Seite nicht wechseln | 
|  | // 2. F"ullen eines ItemSets f"ur die Aktualilsierung | 
|  | // "ubergeordneter Beispiele; dieser Pointer kann immer | 
|  | // NULL sein!! | 
|  | LEAVE_PAGE = 0x0001, | 
|  | // Set aktualisieren und andere Page aktualisieren | 
|  | REFRESH_SET = 0x0002 | 
|  | }; | 
|  |  | 
|  | virtual void		ActivatePage( const SfxItemSet& ); | 
|  | virtual int			DeactivatePage( SfxItemSet* pSet = 0 ); | 
|  | void				SetUserData(const String& rString)	{ aUserString = rString; } | 
|  | String				GetUserData() { return aUserString; } | 
|  | virtual void		FillUserData(); | 
|  | virtual sal_Bool		IsReadOnly() const; | 
|  | virtual sal_Bool    QueryClose(); | 
|  |  | 
|  | void				StateChanged( StateChangedType nType ); | 
|  | void				DataChanged( const DataChangedEvent& rDCEvt ); | 
|  | }; | 
|  |  | 
|  | /********************************************************************** | 
|  | | | 
|  | | IconChoiceDialog | 
|  | | | 
|  | \**********************************************************************/ | 
|  |  | 
|  | class IconChoiceDialog : public ModalDialog | 
|  | { | 
|  | private : | 
|  | friend class IconChoicePage; | 
|  |  | 
|  | EIconChoicePos			meChoicePos;    // Position des IconChoiceCtrl's | 
|  | IconChoicePageList		maPageList;		// Liste von PageData-Pointer | 
|  |  | 
|  | SvtIconChoiceCtrl		maIconCtrl;		// DAS IconChoice-Control | 
|  |  | 
|  | sal_uInt16					mnCurrentPageId;	// Id der aktuell sichtbaren Page | 
|  |  | 
|  | // Buttons | 
|  | OKButton				aOKBtn; | 
|  | CancelButton			aCancelBtn; | 
|  | HelpButton				aHelpBtn; | 
|  | PushButton				aResetBtn; | 
|  |  | 
|  | const SfxItemSet*		pSet; | 
|  | SfxItemSet*				pOutSet; | 
|  | SfxItemSet*				pExampleSet; | 
|  | sal_uInt16*					pRanges; | 
|  |  | 
|  | sal_uInt32				nResId; | 
|  |  | 
|  | sal_Bool					bHideResetBtn; | 
|  | sal_Bool					bModal; | 
|  | sal_Bool					bInOK; | 
|  | sal_Bool					bModified; | 
|  | sal_Bool					bItemsReset; | 
|  |  | 
|  | DECL_LINK ( ChosePageHdl_Impl, void * ); | 
|  | DECL_LINK ( OkHdl,			   Button * ); | 
|  | DECL_LINK ( ResetHdl,          Button * ); | 
|  | DECL_LINK ( CancelHdl,		   Button * ); | 
|  |  | 
|  | IconChoicePageData*		GetPageData ( sal_uInt16 nId ); | 
|  | void					Start_Impl(); | 
|  | sal_Bool					OK_Impl(); | 
|  |  | 
|  | void					SetPosSizeCtrls ( sal_Bool bInit = sal_False ); | 
|  | void					SetPosSizePages ( sal_uInt16 nId ); | 
|  |  | 
|  | void					FocusOnIcon ( sal_uInt16 nId ); | 
|  |  | 
|  | protected : | 
|  | void					ShowPageImpl ( IconChoicePageData* pData ); | 
|  | void					HidePageImpl ( IconChoicePageData* pData ); | 
|  |  | 
|  | virtual void            PageCreated( sal_uInt16 nId, IconChoicePage& rPage ); | 
|  | virtual SfxItemSet*		CreateInputItemSet( sal_uInt16 nId ); | 
|  | inline SfxItemSet*		GetInputSetImpl() { return (SfxItemSet*)pSet; } | 
|  | inline IconChoicePage*	GetTabPage( sal_uInt16 nPageId ) | 
|  | { return ( GetPageData (nPageId)->pPage?GetPageData (nPageId)->pPage:NULL); } | 
|  | const SfxItemSet*		GetRefreshedSet(); | 
|  |  | 
|  | void					ActivatePageImpl (); | 
|  | sal_Bool					DeActivatePageImpl (); | 
|  | void					ResetPageImpl (); | 
|  |  | 
|  | short					Ok(); | 
|  |  | 
|  | public : | 
|  |  | 
|  | // im Ctor könnte auch die Position des IconChoiceCtrl's gesetzt werden. | 
|  |  | 
|  | IconChoiceDialog ( Window* pParent, const ResId &rResId, | 
|  | const EIconChoicePos ePos = PosLeft, const SfxItemSet * pItemSet = 0 ); | 
|  | ~IconChoiceDialog (); | 
|  |  | 
|  | /////////////////////////////////////////////////////////////////////////////////// | 
|  | // virtuelle Methoden | 
|  | // | 
|  | virtual void		Paint( const Rectangle& rRect ); | 
|  | virtual void		Resize(); | 
|  |  | 
|  | /////////////////////////////////////////////////////////////////////////////////// | 
|  | // Schnittstelle | 
|  | // | 
|  |  | 
|  | SvxIconChoiceCtrlEntry*	AddTabPage( | 
|  | sal_uInt16 nId, const String& rIconText, const Image& rChoiceIcon, const Image& rChoiceIconHC, | 
|  | CreatePage pCreateFunc /* != NULL */, GetPageRanges pRangesFunc = NULL /* NULL allowed*/, | 
|  | sal_Bool bItemsOnDemand = sal_False, sal_uLong nPos = LIST_APPEND ); | 
|  |  | 
|  | void				SetCurPageId( sal_uInt16 nId ) { mnCurrentPageId = nId; FocusOnIcon( nId ); } | 
|  | sal_uInt16				GetCurPageId() const       { return mnCurrentPageId; } | 
|  | void				ShowPage( sal_uInt16 nId ); | 
|  |  | 
|  | // liefert ggf. per Map konvertierte lokale Slots | 
|  | const sal_uInt16*		GetInputRanges( const SfxItemPool& ); | 
|  | void				SetInputSet( const SfxItemSet* pInSet ); | 
|  | const SfxItemSet*	GetOutputItemSet() const { return pOutSet; } | 
|  |  | 
|  | const OKButton& 	GetOKButton() const { return aOKBtn; } | 
|  | OKButton&			GetOKButton() { return aOKBtn; } | 
|  | const CancelButton& GetCancelButton() const { return aCancelBtn; } | 
|  | CancelButton&		GetCancelButton() { return aCancelBtn; } | 
|  | const HelpButton&	GetHelpButton() const { return aHelpBtn; } | 
|  | HelpButton&			GetHelpButton() { return aHelpBtn; } | 
|  |  | 
|  | short				Execute(); | 
|  | void				Start( sal_Bool bShow = sal_True ); | 
|  | sal_Bool            QueryClose(); | 
|  |  | 
|  | const SfxItemSet*	GetExampleSet() const { return pExampleSet; } | 
|  |  | 
|  | EIconChoicePos		SetCtrlPos   ( const EIconChoicePos& rPos ); | 
|  | }; | 
|  |  | 
|  | #endif //_ICCDLG_HXX | 
|  |  |