1*2e2212a7SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2e2212a7SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2e2212a7SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2e2212a7SAndrew Rist  * distributed with this work for additional information
6*2e2212a7SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2e2212a7SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2e2212a7SAndrew Rist  * "License"); you may not use this file except in compliance
9*2e2212a7SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2e2212a7SAndrew Rist  *
11*2e2212a7SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2e2212a7SAndrew Rist  *
13*2e2212a7SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2e2212a7SAndrew Rist  * software distributed under the License is distributed on an
15*2e2212a7SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2e2212a7SAndrew Rist  * KIND, either express or implied.  See the License for the
17*2e2212a7SAndrew Rist  * specific language governing permissions and limitations
18*2e2212a7SAndrew Rist  * under the License.
19*2e2212a7SAndrew Rist  *
20*2e2212a7SAndrew Rist  *************************************************************/
21*2e2212a7SAndrew Rist 
22*2e2212a7SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _DBAUI_ADMINPAGES_HXX_
25cdf0e10cSrcweir #define _DBAUI_ADMINPAGES_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #ifndef _SFXTABDLG_HXX
28cdf0e10cSrcweir #include <sfx2/tabdlg.hxx>
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #ifndef _DBAUI_DSNTYPES_HXX_
31cdf0e10cSrcweir #include "dsntypes.hxx"
32cdf0e10cSrcweir #endif
33cdf0e10cSrcweir #ifndef _DBAUI_COMMON_TYPES_HXX_
34cdf0e10cSrcweir #include "commontypes.hxx"
35cdf0e10cSrcweir #endif
36cdf0e10cSrcweir #ifndef _SVTOOLS_WIZARDMACHINE_HXX_
37cdf0e10cSrcweir #include <svtools/wizardmachine.hxx>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #ifndef _SV_FIELD_HXX
40cdf0e10cSrcweir #include <vcl/field.hxx>
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir #ifndef _SV_FIXED_HXX
43cdf0e10cSrcweir #include <vcl/fixed.hxx>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir 
46cdf0e10cSrcweir 
47cdf0e10cSrcweir class NumericField;
48cdf0e10cSrcweir class Edit;
49cdf0e10cSrcweir //.........................................................................
50cdf0e10cSrcweir namespace dbaui
51cdf0e10cSrcweir {
52cdf0e10cSrcweir //.........................................................................
53cdf0e10cSrcweir 	/// helper class to wrap the savevalue and disable call
54cdf0e10cSrcweir 	class SAL_NO_VTABLE ISaveValueWrapper
55cdf0e10cSrcweir 	{
56cdf0e10cSrcweir 	public:
57cdf0e10cSrcweir 		virtual bool SaveValue() = 0;
58cdf0e10cSrcweir 		virtual bool Disable() = 0;
59cdf0e10cSrcweir 	};
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 	template < class T > class OSaveValueWrapper : public ISaveValueWrapper
62cdf0e10cSrcweir 	{
63cdf0e10cSrcweir 		T*	m_pSaveValue;
64cdf0e10cSrcweir 	public:
65cdf0e10cSrcweir 		OSaveValueWrapper(T* _pSaveValue) : m_pSaveValue(_pSaveValue)
66cdf0e10cSrcweir 		{ OSL_ENSURE(m_pSaveValue,"Illegal argument!"); }
67cdf0e10cSrcweir 
68cdf0e10cSrcweir 		virtual bool SaveValue() { m_pSaveValue->SaveValue(); return true;} // bool return value only for stl
69cdf0e10cSrcweir 		virtual bool Disable() { m_pSaveValue->Disable(); return true;} // bool return value only for stl
70cdf0e10cSrcweir 	};
71cdf0e10cSrcweir 
72cdf0e10cSrcweir 	template < class T > class ODisableWrapper : public ISaveValueWrapper
73cdf0e10cSrcweir 	{
74cdf0e10cSrcweir 		T*	m_pSaveValue;
75cdf0e10cSrcweir 	public:
76cdf0e10cSrcweir 		ODisableWrapper(T* _pSaveValue) : m_pSaveValue(_pSaveValue)
77cdf0e10cSrcweir 		{ OSL_ENSURE(m_pSaveValue,"Illegal argument!"); }
78cdf0e10cSrcweir 
79cdf0e10cSrcweir 		virtual bool SaveValue() { return true;} // bool return value only for stl
80cdf0e10cSrcweir 		virtual bool Disable() { m_pSaveValue->Disable(); return true;} // bool return value only for stl
81cdf0e10cSrcweir 	};
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 	struct TSaveValueWrapperFunctor : public ::std::unary_function< ISaveValueWrapper, bool>
84cdf0e10cSrcweir 	{
85cdf0e10cSrcweir 		bool operator() (ISaveValueWrapper* lhs)
86cdf0e10cSrcweir 		{
87cdf0e10cSrcweir 			return lhs->SaveValue();
88cdf0e10cSrcweir 		}
89cdf0e10cSrcweir 	};
90cdf0e10cSrcweir 	struct TDisableWrapperFunctor : public ::std::unary_function< ISaveValueWrapper, bool>
91cdf0e10cSrcweir 	{
92cdf0e10cSrcweir 		bool operator() (ISaveValueWrapper* lhs)
93cdf0e10cSrcweir 		{
94cdf0e10cSrcweir 			return lhs->Disable();
95cdf0e10cSrcweir 		}
96cdf0e10cSrcweir 	};
97cdf0e10cSrcweir 
98cdf0e10cSrcweir 	struct TDeleteWrapperFunctor : public ::std::unary_function< ISaveValueWrapper, bool>
99cdf0e10cSrcweir 	{
100cdf0e10cSrcweir 		bool operator() (ISaveValueWrapper* lhs)
101cdf0e10cSrcweir 		{
102cdf0e10cSrcweir 			delete lhs;
103cdf0e10cSrcweir 			return true;
104cdf0e10cSrcweir 		}
105cdf0e10cSrcweir 	};
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 	//=========================================================================
108cdf0e10cSrcweir 	//= OGenericAdministrationPage
109cdf0e10cSrcweir 	//=========================================================================
110cdf0e10cSrcweir 	class IDatabaseSettingsDialog;
111cdf0e10cSrcweir 	class IItemSetHelper;
112cdf0e10cSrcweir     class OGenericAdministrationPage    :public SfxTabPage
113cdf0e10cSrcweir                                         ,public ::svt::IWizardPageController
114cdf0e10cSrcweir 	{
115cdf0e10cSrcweir 	private:
116cdf0e10cSrcweir 		Link			m_aModifiedHandler;		/// to be called if something on the page has been modified
117cdf0e10cSrcweir         sal_Bool        m_abEnableRoadmap;
118cdf0e10cSrcweir 	protected:
119cdf0e10cSrcweir 		IDatabaseSettingsDialog*   m_pAdminDialog;
120cdf0e10cSrcweir 		IItemSetHelper* m_pItemSetHelper;
121cdf0e10cSrcweir         FixedText*      m_pFT_HeaderText;
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 		::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
124cdf0e10cSrcweir 							m_xORB;
125cdf0e10cSrcweir 	public:
126cdf0e10cSrcweir 		OGenericAdministrationPage(Window* _pParent, const ResId& _rId, const SfxItemSet& _rAttrSet);
127cdf0e10cSrcweir 		~OGenericAdministrationPage();
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 		/// set a handler which gets called every time something on the page has been modified
130cdf0e10cSrcweir 		void SetModifiedHandler(const Link& _rHandler) { m_aModifiedHandler = _rHandler; }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 		/** Sets the ParentDialog
133cdf0e10cSrcweir 			@param	_pAdminDialog
134cdf0e10cSrcweir 				the ParentDialog
135cdf0e10cSrcweir 			@param	_pItemSetHelper
136cdf0e10cSrcweir 				the itemset helper
137cdf0e10cSrcweir 		*/
138cdf0e10cSrcweir 		inline void SetAdminDialog(IDatabaseSettingsDialog* _pDialog,IItemSetHelper* _pItemSetHelper)
139cdf0e10cSrcweir 		{
140cdf0e10cSrcweir 			OSL_ENSURE(_pDialog && _pItemSetHelper,"Values are NULL!");
141cdf0e10cSrcweir 			m_pAdminDialog = _pDialog;
142cdf0e10cSrcweir 			m_pItemSetHelper = _pItemSetHelper;
143cdf0e10cSrcweir 		}
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 		/** Sets the ServiceFactory
146cdf0e10cSrcweir 			@param	_rxORB
147cdf0e10cSrcweir 				The service factory.
148cdf0e10cSrcweir 		*/
149cdf0e10cSrcweir 		virtual void SetServiceFactory(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > _rxORB)
150cdf0e10cSrcweir 		{
151cdf0e10cSrcweir 			m_xORB = _rxORB;
152cdf0e10cSrcweir 		}
153cdf0e10cSrcweir 
154cdf0e10cSrcweir 		/** opens a dialog filled with all data sources available for this type and
155cdf0e10cSrcweir 			returns the selected on.
156cdf0e10cSrcweir 			@param	_eType
157cdf0e10cSrcweir 				The type for which the data source dialog should be opened.
158cdf0e10cSrcweir 			@param	_sReturn
159cdf0e10cSrcweir 				<OUT/> contains the selected name.
160cdf0e10cSrcweir 			@return
161cdf0e10cSrcweir 				<FALSE/> if an error occured, otherwise <TRUE/>
162cdf0e10cSrcweir 		*/
163cdf0e10cSrcweir 		sal_Bool getSelectedDataSource(::rtl::OUString& _sReturn,::rtl::OUString& _sCurr);
164cdf0e10cSrcweir 
165cdf0e10cSrcweir 		// svt::IWizardPageController
166cdf0e10cSrcweir 		virtual void initializePage();
167cdf0e10cSrcweir         virtual sal_Bool commitPage( ::svt::WizardTypes::CommitPageReason _eReason );
168cdf0e10cSrcweir 		virtual bool canAdvance() const;
169cdf0e10cSrcweir 
170cdf0e10cSrcweir         void                SetRoadmapStateValue( sal_Bool _bDoEnable ) { m_abEnableRoadmap = _bDoEnable; }
171cdf0e10cSrcweir         bool                GetRoadmapStateValue() const { return m_abEnableRoadmap; }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir 	protected:
174cdf0e10cSrcweir 		/// default implementation: call FillItemSet, call prepareLeave,
175cdf0e10cSrcweir 		virtual int DeactivatePage(SfxItemSet* pSet);
176cdf0e10cSrcweir         using SfxTabPage::DeactivatePage;
177cdf0e10cSrcweir 		/// default implementation: call implInitControls with the given item set and _bSaveValue = sal_False
178cdf0e10cSrcweir 		virtual	void Reset(const SfxItemSet& _rCoreAttrs);
179cdf0e10cSrcweir 		/// default implementation: call implInitControls with the given item set and _bSaveValue = sal_True
180cdf0e10cSrcweir 		virtual void ActivatePage(const SfxItemSet& _rSet);
181cdf0e10cSrcweir 
182cdf0e10cSrcweir 		// TabPage overridables
183cdf0e10cSrcweir 		virtual void	ActivatePage();
184cdf0e10cSrcweir 
185cdf0e10cSrcweir 	protected:
186cdf0e10cSrcweir 		void callModifiedHdl() const { if (m_aModifiedHandler.IsSet()) m_aModifiedHandler.Call((void*)this); }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir 		/// called from within DeactivatePage. The page is allowed to be deactivated if this method returns sal_True
189cdf0e10cSrcweir 		virtual sal_Bool prepareLeave() { return sal_True; }
190cdf0e10cSrcweir 
191cdf0e10cSrcweir 		/** called from within Reset and ActivatePage, use to initialize the controls with the items from the given set
192cdf0e10cSrcweir 			@param		_bSaveValue		if set to sal_True, the implementation should call SaveValue on all relevant controls
193cdf0e10cSrcweir 		*/
194cdf0e10cSrcweir 		virtual void implInitControls(const SfxItemSet& _rSet, sal_Bool _bSaveValue);
195cdf0e10cSrcweir 
196cdf0e10cSrcweir 		/// analyze the invalid and the readonly flag which may be present in the set
197cdf0e10cSrcweir 		void getFlags(const SfxItemSet& _rSet, sal_Bool& _rValid, sal_Bool& _rReadonly);
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 		/** will be called inside <method>implInitControls</method> to save the value if necessary
200cdf0e10cSrcweir 			@param	_rControlList
201cdf0e10cSrcweir 				The list must be filled with the controls.
202cdf0e10cSrcweir 				It is not allowed to clear the list before pusching data into it.
203cdf0e10cSrcweir 		*/
204cdf0e10cSrcweir 		virtual void fillControls(::std::vector< ISaveValueWrapper* >& _rControlList) = 0;
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 		/** will be called inside <method>implInitControls</method> to disable if necessary
207cdf0e10cSrcweir 			@param	_rControlList
208cdf0e10cSrcweir 				The list must be filled with the controls.
209cdf0e10cSrcweir 				It is not allowed to clear the list before pusching data into it.
210cdf0e10cSrcweir 		*/
211cdf0e10cSrcweir 		virtual void fillWindows(::std::vector< ISaveValueWrapper* >& _rControlList) = 0;
212cdf0e10cSrcweir 
213cdf0e10cSrcweir     public:
214cdf0e10cSrcweir 		/** fills the Boolean value into the item set when the value changed.
215cdf0e10cSrcweir 			@param	_rSet
216cdf0e10cSrcweir 				The item set where to put the new value into.
217cdf0e10cSrcweir 			@param	_pCheckBox
218cdf0e10cSrcweir 				The check box which is checked.
219cdf0e10cSrcweir 			@param	_nID
220cdf0e10cSrcweir 				The id in the itemset to set whith the new value.
221cdf0e10cSrcweir 			@param	_bChangedSomething
222cdf0e10cSrcweir 				<TRUE/> if something changed otherwise <FALSE/>
223cdf0e10cSrcweir             @param _bRevertValue
224cdf0e10cSrcweir                 set to <TRUE/> if the display value should be reverted before putting it into the set
225cdf0e10cSrcweir 		*/
226cdf0e10cSrcweir 		static void fillBool( SfxItemSet& _rSet, CheckBox* _pCheckBox, sal_uInt16 _nID, sal_Bool& _bChangedSomething, bool _bRevertValue = false);
227cdf0e10cSrcweir 
228cdf0e10cSrcweir 		/** fills the int value into the item set when the value changed.
229cdf0e10cSrcweir 			@param	_rSet
230cdf0e10cSrcweir 				The item set where to put the new value into.
231cdf0e10cSrcweir 			@param	_pEdit
232cdf0e10cSrcweir 				The check box which is checked.
233cdf0e10cSrcweir 			@param	_nID
234cdf0e10cSrcweir 				The id in the itemset to set whith the new value.
235cdf0e10cSrcweir 			@param	_bChangedSomething
236cdf0e10cSrcweir 				<TRUE/> if something changed otherwise <FALSE/>
237cdf0e10cSrcweir 		*/
238cdf0e10cSrcweir 		static void fillInt32(SfxItemSet& _rSet,NumericField* _pEdit,sal_uInt16 _nID,sal_Bool& _bChangedSomething);
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 		/** fills the String value into the item set when the value changed.
241cdf0e10cSrcweir 			@param	_rSet
242cdf0e10cSrcweir 				The item set where to put the new value into.
243cdf0e10cSrcweir 			@param	_pEdit
244cdf0e10cSrcweir 				The check box which is checked.
245cdf0e10cSrcweir 			@param	_nID
246cdf0e10cSrcweir 				The id in the itemset to set whith the new value.
247cdf0e10cSrcweir 			@param	_bChangedSomething
248cdf0e10cSrcweir 				<TRUE/> if something changed otherwise <FALSE/>
249cdf0e10cSrcweir 		*/
250cdf0e10cSrcweir 		static void fillString(SfxItemSet& _rSet,Edit* _pEdit,sal_uInt16 _nID,sal_Bool& _bChangedSomething);
251cdf0e10cSrcweir 
252cdf0e10cSrcweir     protected:
253cdf0e10cSrcweir 	    // used to set the right Pane header of a wizard to bold
254cdf0e10cSrcweir         void SetControlFontWeight(Window* _pWindow, FontWeight _eWeight = WEIGHT_BOLD);
255cdf0e10cSrcweir         void SetHeaderText( sal_uInt16 _nFTResId, sal_uInt16 _StringResId);
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 		/** This link be used for controls where the tabpage does not need to take any special action when the control
258cdf0e10cSrcweir 			is modified. The implementation just calls callModifiedHdl.
259cdf0e10cSrcweir 		*/
260cdf0e10cSrcweir 		DECL_LINK(OnControlModified, Control*);
261cdf0e10cSrcweir         DECL_LINK(OnTestConnectionClickHdl,PushButton*);
262cdf0e10cSrcweir 
263cdf0e10cSrcweir 		/// may be used in SetXXXHdl calls to controls, is a link to <method>OnControlModified</method>
264cdf0e10cSrcweir 		virtual Link getControlModifiedLink() { return LINK(this, OGenericAdministrationPage, OnControlModified); }
265cdf0e10cSrcweir 	};
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 	//=========================================================================
268cdf0e10cSrcweir 	//= ControlRelation
269cdf0e10cSrcweir 	//=========================================================================
270cdf0e10cSrcweir     enum ControlRelation
271cdf0e10cSrcweir     {
272cdf0e10cSrcweir         RelatedControls, UnrelatedControls
273cdf0e10cSrcweir     };
274cdf0e10cSrcweir 
275cdf0e10cSrcweir 	//=========================================================================
276cdf0e10cSrcweir 	//= LayoutHelper
277cdf0e10cSrcweir 	//=========================================================================
278cdf0e10cSrcweir     class LayoutHelper
279cdf0e10cSrcweir     {
280cdf0e10cSrcweir     public:
281cdf0e10cSrcweir         static void     positionBelow(
282cdf0e10cSrcweir                             const Control& _rReference,
283cdf0e10cSrcweir                             Control& _rControl,
284cdf0e10cSrcweir                             const ControlRelation _eRelation,
285cdf0e10cSrcweir                             const long _nIndentAppFont
286cdf0e10cSrcweir                         );
287cdf0e10cSrcweir         /** fits the button size to be large enough to contain the buttons text
288cdf0e10cSrcweir         */
289cdf0e10cSrcweir         static void fitSizeRightAligned( PushButton& io_button );
290cdf0e10cSrcweir             // why is CalcMinimumSize not a virtual method of ::Window?
291cdf0e10cSrcweir     };
292cdf0e10cSrcweir 
293cdf0e10cSrcweir //.........................................................................
294cdf0e10cSrcweir }	// namespace dbaui
295cdf0e10cSrcweir //.........................................................................
296cdf0e10cSrcweir 
297cdf0e10cSrcweir #endif // _DBAUI_ADMINPAGES_HXX_
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 
300