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