xref: /aoo42x/main/cui/source/inc/iconcdlg.hxx (revision c4eee24d)
1*c4eee24dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*c4eee24dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*c4eee24dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*c4eee24dSAndrew Rist  * distributed with this work for additional information
6*c4eee24dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*c4eee24dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*c4eee24dSAndrew Rist  * "License"); you may not use this file except in compliance
9*c4eee24dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*c4eee24dSAndrew Rist  *
11*c4eee24dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*c4eee24dSAndrew Rist  *
13*c4eee24dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*c4eee24dSAndrew Rist  * software distributed under the License is distributed on an
15*c4eee24dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*c4eee24dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*c4eee24dSAndrew Rist  * specific language governing permissions and limitations
18*c4eee24dSAndrew Rist  * under the License.
19*c4eee24dSAndrew Rist  *
20*c4eee24dSAndrew Rist  *************************************************************/
21*c4eee24dSAndrew Rist 
22*c4eee24dSAndrew Rist 
23cdf0e10cSrcweir #ifndef _ICCDLG_HXX
24cdf0e10cSrcweir #define _ICCDLG_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <vcl/tabpage.hxx>
27cdf0e10cSrcweir #include <vcl/msgbox.hxx>
28cdf0e10cSrcweir #include <vcl/dialog.hxx>
29cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX
30cdf0e10cSrcweir #include <vcl/button.hxx>
31cdf0e10cSrcweir #endif
32cdf0e10cSrcweir #include <vcl/image.hxx>
33cdf0e10cSrcweir #include <svtools/ivctrl.hxx>
34cdf0e10cSrcweir #include <svl/itempool.hxx>
35cdf0e10cSrcweir #include <svl/itemset.hxx>
36cdf0e10cSrcweir #include <tools/list.hxx>
37cdf0e10cSrcweir #include <tools/string.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #define CTRLS_OFFSET		3
40cdf0e10cSrcweir #define BUTTON_DISTANCE		8
41cdf0e10cSrcweir #define RET_USER 		100
42cdf0e10cSrcweir #define RET_USER_CANCEL	101
43cdf0e10cSrcweir 
44cdf0e10cSrcweir // forward-declarations
45cdf0e10cSrcweir struct IconChoicePageData;
46cdf0e10cSrcweir class IconChoiceDialog;
47cdf0e10cSrcweir class IconChoicePage;
48cdf0e10cSrcweir 
49cdf0e10cSrcweir // Create-Function
50cdf0e10cSrcweir typedef IconChoicePage* (*CreatePage)(Window *pParent, const SfxItemSet &rAttrSet);
51cdf0e10cSrcweir typedef sal_uInt16*		    (*GetPageRanges)(); // liefert internationale Which-Wert
52cdf0e10cSrcweir 
53cdf0e10cSrcweir // page-list
54cdf0e10cSrcweir DECLARE_LIST( IconChoicePageList, IconChoicePageData * )
55cdf0e10cSrcweir 
56cdf0e10cSrcweir // position of iconchoicectrl
57cdf0e10cSrcweir enum EIconChoicePos { PosLeft, PosRight, PosTop, PosBottom };
58cdf0e10cSrcweir 
59cdf0e10cSrcweir /**********************************************************************
60cdf0e10cSrcweir |
61cdf0e10cSrcweir | Data-structure for pages in dialog
62cdf0e10cSrcweir |
63cdf0e10cSrcweir \**********************************************************************/
64cdf0e10cSrcweir 
65cdf0e10cSrcweir struct IconChoicePageData
66cdf0e10cSrcweir {
67cdf0e10cSrcweir 	sal_uInt16 nId;					 // Die ID
68cdf0e10cSrcweir 	CreatePage fnCreatePage;	 // Pointer auf die Factory
69cdf0e10cSrcweir 	GetPageRanges fnGetRanges;// Pointer auf die Ranges-Funktion
70cdf0e10cSrcweir 	IconChoicePage* pPage;		 // die TabPage selber
71cdf0e10cSrcweir 	sal_Bool bOnDemand;				 // Flag: ItemSet onDemand
72cdf0e10cSrcweir 	sal_Bool bRefresh; 				 // Flag: Seite mu\s neu initialisiert werden
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 	// Konstruktor
IconChoicePageDataIconChoicePageData75cdf0e10cSrcweir 	IconChoicePageData( sal_uInt16 Id, CreatePage fnPage, GetPageRanges fnRanges, sal_Bool bDemand )
76cdf0e10cSrcweir 		: nId			( Id ),
77cdf0e10cSrcweir 		  fnCreatePage	( fnPage ),
78cdf0e10cSrcweir 		  fnGetRanges	( fnRanges ),
79cdf0e10cSrcweir 		  pPage			( NULL ),
80cdf0e10cSrcweir 		  bOnDemand		( bDemand ),
81cdf0e10cSrcweir 		  bRefresh		( sal_False )
82cdf0e10cSrcweir 	{}
83cdf0e10cSrcweir };
84cdf0e10cSrcweir 
85cdf0e10cSrcweir /**********************************************************************
86cdf0e10cSrcweir |
87cdf0e10cSrcweir | IconChoicePage
88cdf0e10cSrcweir |
89cdf0e10cSrcweir \**********************************************************************/
90cdf0e10cSrcweir 
91cdf0e10cSrcweir class IconChoicePage : public TabPage
92cdf0e10cSrcweir {
93cdf0e10cSrcweir 	using TabPage::ActivatePage;
94cdf0e10cSrcweir 	using TabPage::DeactivatePage;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir private :
97cdf0e10cSrcweir 	const SfxItemSet*	pSet;
98cdf0e10cSrcweir 	String				aUserString;
99cdf0e10cSrcweir 	sal_Bool				bHasExchangeSupport;
100cdf0e10cSrcweir 	IconChoiceDialog*	pDialog;
101cdf0e10cSrcweir 	sal_Bool				bStandard;
102cdf0e10cSrcweir 
SetDialog(IconChoiceDialog * pNew)103cdf0e10cSrcweir 	void				SetDialog( IconChoiceDialog* pNew ) { pDialog = pNew; }
GetDialog() const104cdf0e10cSrcweir 	IconChoiceDialog*	GetDialog() const { return pDialog; }
105cdf0e10cSrcweir 
SetInputSet(const SfxItemSet * pNew)106cdf0e10cSrcweir 	void				SetInputSet( const SfxItemSet* pNew ) { pSet = pNew; }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 	void				ImplInitSettings();
109cdf0e10cSrcweir 
110cdf0e10cSrcweir protected :
111cdf0e10cSrcweir 	IconChoicePage( Window *pParent, const ResId &, const SfxItemSet &rAttrSet );
112cdf0e10cSrcweir 
GetSlot(sal_uInt16 nWhich) const113cdf0e10cSrcweir 	sal_uInt16				GetSlot( sal_uInt16 nWhich ) const	{ return pSet->GetPool()->GetSlotId( nWhich ); }
GetWhich(sal_uInt16 nSlot) const114cdf0e10cSrcweir 	sal_uInt16				GetWhich( sal_uInt16 nSlot ) const	{ return pSet->GetPool()->GetWhich( nSlot ); }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir public :
117cdf0e10cSrcweir 	virtual             ~IconChoicePage();
118cdf0e10cSrcweir 
GetItemSet() const119cdf0e10cSrcweir 	const SfxItemSet&	GetItemSet() const { return *pSet; }
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	virtual sal_Bool		FillItemSet( SfxItemSet& ) = 0;
122cdf0e10cSrcweir 	virtual void		Reset( const SfxItemSet& ) = 0;
123cdf0e10cSrcweir 
HasExchangeSupport() const124cdf0e10cSrcweir 	sal_Bool				HasExchangeSupport() const				{ return bHasExchangeSupport; }
SetExchangeSupport(sal_Bool bNew=sal_True)125cdf0e10cSrcweir 	void				SetExchangeSupport( sal_Bool bNew = sal_True )	{ bHasExchangeSupport = bNew; }
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 	enum {
128cdf0e10cSrcweir 		KEEP_PAGE = 0x0000,		// Fehlerbehandlung; Seite nicht wechseln
129cdf0e10cSrcweir 			// 2. F"ullen eines ItemSets f"ur die Aktualilsierung
130cdf0e10cSrcweir 			// "ubergeordneter Beispiele; dieser Pointer kann immer
131cdf0e10cSrcweir 			// NULL sein!!
132cdf0e10cSrcweir 		LEAVE_PAGE = 0x0001,
133cdf0e10cSrcweir 			// Set aktualisieren und andere Page aktualisieren
134cdf0e10cSrcweir 		REFRESH_SET = 0x0002
135cdf0e10cSrcweir 	};
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 	virtual void		ActivatePage( const SfxItemSet& );
138cdf0e10cSrcweir 	virtual int			DeactivatePage( SfxItemSet* pSet = 0 );
SetUserData(const String & rString)139cdf0e10cSrcweir 	void				SetUserData(const String& rString)	{ aUserString = rString; }
GetUserData()140cdf0e10cSrcweir 	String				GetUserData() { return aUserString; }
141cdf0e10cSrcweir 	virtual void		FillUserData();
142cdf0e10cSrcweir 	virtual sal_Bool		IsReadOnly() const;
143cdf0e10cSrcweir     virtual sal_Bool    QueryClose();
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 	void				StateChanged( StateChangedType nType );
146cdf0e10cSrcweir 	void				DataChanged( const DataChangedEvent& rDCEvt );
147cdf0e10cSrcweir };
148cdf0e10cSrcweir 
149cdf0e10cSrcweir /**********************************************************************
150cdf0e10cSrcweir |
151cdf0e10cSrcweir | IconChoiceDialog
152cdf0e10cSrcweir |
153cdf0e10cSrcweir \**********************************************************************/
154cdf0e10cSrcweir 
155cdf0e10cSrcweir class IconChoiceDialog : public ModalDialog
156cdf0e10cSrcweir {
157cdf0e10cSrcweir private :
158cdf0e10cSrcweir 	friend class IconChoicePage;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir 	EIconChoicePos			meChoicePos;    // Position des IconChoiceCtrl's
161cdf0e10cSrcweir 	IconChoicePageList		maPageList;		// Liste von PageData-Pointer
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 	SvtIconChoiceCtrl		maIconCtrl;		// DAS IconChoice-Control
164cdf0e10cSrcweir 
165cdf0e10cSrcweir 	sal_uInt16					mnCurrentPageId;	// Id der aktuell sichtbaren Page
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	// Buttons
168cdf0e10cSrcweir 	OKButton				aOKBtn;
169cdf0e10cSrcweir 	CancelButton			aCancelBtn;
170cdf0e10cSrcweir 	HelpButton				aHelpBtn;
171cdf0e10cSrcweir 	PushButton				aResetBtn;
172cdf0e10cSrcweir 
173cdf0e10cSrcweir 	const SfxItemSet*		pSet;
174cdf0e10cSrcweir 	SfxItemSet*				pOutSet;
175cdf0e10cSrcweir 	SfxItemSet*				pExampleSet;
176cdf0e10cSrcweir 	sal_uInt16*					pRanges;
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 	sal_uInt32				nResId;
179cdf0e10cSrcweir 
180cdf0e10cSrcweir 	sal_Bool					bHideResetBtn;
181cdf0e10cSrcweir 	sal_Bool					bModal;
182cdf0e10cSrcweir 	sal_Bool					bInOK;
183cdf0e10cSrcweir 	sal_Bool					bModified;
184cdf0e10cSrcweir 	sal_Bool					bItemsReset;
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 	DECL_LINK ( ChosePageHdl_Impl, void * );
187cdf0e10cSrcweir 	DECL_LINK ( OkHdl,			   Button * );
188cdf0e10cSrcweir 	DECL_LINK ( ResetHdl,          Button * );
189cdf0e10cSrcweir 	DECL_LINK ( CancelHdl,		   Button * );
190cdf0e10cSrcweir 
191cdf0e10cSrcweir 	IconChoicePageData*		GetPageData ( sal_uInt16 nId );
192cdf0e10cSrcweir 	void					Start_Impl();
193cdf0e10cSrcweir 	sal_Bool					OK_Impl();
194cdf0e10cSrcweir 
195cdf0e10cSrcweir 	void					SetPosSizeCtrls ( sal_Bool bInit = sal_False );
196cdf0e10cSrcweir 	void					SetPosSizePages ( sal_uInt16 nId );
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 	void					FocusOnIcon ( sal_uInt16 nId );
199cdf0e10cSrcweir 
200cdf0e10cSrcweir protected :
201cdf0e10cSrcweir 	void					ShowPageImpl ( IconChoicePageData* pData );
202cdf0e10cSrcweir 	void					HidePageImpl ( IconChoicePageData* pData );
203cdf0e10cSrcweir 
204cdf0e10cSrcweir     virtual void            PageCreated( sal_uInt16 nId, IconChoicePage& rPage );
205cdf0e10cSrcweir 	virtual SfxItemSet*		CreateInputItemSet( sal_uInt16 nId );
GetInputSetImpl()206cdf0e10cSrcweir 	inline SfxItemSet*		GetInputSetImpl() { return (SfxItemSet*)pSet; }
GetTabPage(sal_uInt16 nPageId)207cdf0e10cSrcweir 	inline IconChoicePage*	GetTabPage( sal_uInt16 nPageId )
208cdf0e10cSrcweir 								{ return ( GetPageData (nPageId)->pPage?GetPageData (nPageId)->pPage:NULL); }
209cdf0e10cSrcweir 	const SfxItemSet*		GetRefreshedSet();
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 	void					ActivatePageImpl ();
212cdf0e10cSrcweir 	sal_Bool					DeActivatePageImpl ();
213cdf0e10cSrcweir 	void					ResetPageImpl ();
214cdf0e10cSrcweir 
215cdf0e10cSrcweir 	short					Ok();
216cdf0e10cSrcweir 
217cdf0e10cSrcweir public :
218cdf0e10cSrcweir 
219cdf0e10cSrcweir 	// im Ctor k�nnte auch die Position des IconChoiceCtrl's gesetzt werden.
220cdf0e10cSrcweir 
221cdf0e10cSrcweir 	IconChoiceDialog ( Window* pParent, const ResId &rResId,
222cdf0e10cSrcweir 					   const EIconChoicePos ePos = PosLeft, const SfxItemSet * pItemSet = 0 );
223cdf0e10cSrcweir 	~IconChoiceDialog ();
224cdf0e10cSrcweir 
225cdf0e10cSrcweir 	///////////////////////////////////////////////////////////////////////////////////
226cdf0e10cSrcweir 	// virtuelle Methoden
227cdf0e10cSrcweir 	//
228cdf0e10cSrcweir 	virtual void		Paint( const Rectangle& rRect );
229cdf0e10cSrcweir 	virtual void		Resize();
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 	///////////////////////////////////////////////////////////////////////////////////
232cdf0e10cSrcweir 	// Schnittstelle
233cdf0e10cSrcweir 	//
234cdf0e10cSrcweir 
235cdf0e10cSrcweir 	SvxIconChoiceCtrlEntry*	AddTabPage(
236cdf0e10cSrcweir 		sal_uInt16 nId, const String& rIconText, const Image& rChoiceIcon, const Image& rChoiceIconHC,
237cdf0e10cSrcweir 		CreatePage pCreateFunc /* != NULL */, GetPageRanges pRangesFunc = NULL /* NULL allowed*/,
238cdf0e10cSrcweir 		sal_Bool bItemsOnDemand = sal_False, sal_uLong nPos = LIST_APPEND );
239cdf0e10cSrcweir 
SetCurPageId(sal_uInt16 nId)240cdf0e10cSrcweir 	void				SetCurPageId( sal_uInt16 nId ) { mnCurrentPageId = nId; FocusOnIcon( nId ); }
GetCurPageId() const241cdf0e10cSrcweir 	sal_uInt16				GetCurPageId() const       { return mnCurrentPageId; }
242cdf0e10cSrcweir 	void				ShowPage( sal_uInt16 nId );
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 						// liefert ggf. per Map konvertierte lokale Slots
245cdf0e10cSrcweir 	const sal_uInt16*		GetInputRanges( const SfxItemPool& );
246cdf0e10cSrcweir 	void				SetInputSet( const SfxItemSet* pInSet );
GetOutputItemSet() const247cdf0e10cSrcweir 	const SfxItemSet*	GetOutputItemSet() const { return pOutSet; }
248cdf0e10cSrcweir 
GetOKButton() const249cdf0e10cSrcweir 	const OKButton& 	GetOKButton() const { return aOKBtn; }
GetOKButton()250cdf0e10cSrcweir 	OKButton&			GetOKButton() { return aOKBtn; }
GetCancelButton() const251cdf0e10cSrcweir 	const CancelButton& GetCancelButton() const { return aCancelBtn; }
GetCancelButton()252cdf0e10cSrcweir 	CancelButton&		GetCancelButton() { return aCancelBtn; }
GetHelpButton() const253cdf0e10cSrcweir 	const HelpButton&	GetHelpButton() const { return aHelpBtn; }
GetHelpButton()254cdf0e10cSrcweir 	HelpButton&			GetHelpButton() { return aHelpBtn; }
255cdf0e10cSrcweir 
256cdf0e10cSrcweir 	short				Execute();
257cdf0e10cSrcweir 	void				Start( sal_Bool bShow = sal_True );
258cdf0e10cSrcweir     sal_Bool            QueryClose();
259cdf0e10cSrcweir 
GetExampleSet() const260cdf0e10cSrcweir 	const SfxItemSet*	GetExampleSet() const { return pExampleSet; }
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 	EIconChoicePos		SetCtrlPos   ( const EIconChoicePos& rPos );
263cdf0e10cSrcweir };
264cdf0e10cSrcweir 
265cdf0e10cSrcweir #endif //_ICCDLG_HXX
266cdf0e10cSrcweir 
267