xref: /trunk/main/cui/source/options/connpooloptions.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1*2ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2ee96f1cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2ee96f1cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2ee96f1cSAndrew Rist  * distributed with this work for additional information
6*2ee96f1cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2ee96f1cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2ee96f1cSAndrew Rist  * "License"); you may not use this file except in compliance
9*2ee96f1cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*2ee96f1cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*2ee96f1cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2ee96f1cSAndrew Rist  * software distributed under the License is distributed on an
15*2ee96f1cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2ee96f1cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*2ee96f1cSAndrew Rist  * specific language governing permissions and limitations
18*2ee96f1cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*2ee96f1cSAndrew Rist  *************************************************************/
21*2ee96f1cSAndrew Rist 
22*2ee96f1cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "connpooloptions.hxx"
28cdf0e10cSrcweir #include "connpooloptions.hrc"
29cdf0e10cSrcweir #include <svtools/editbrowsebox.hxx>
30cdf0e10cSrcweir #include <vcl/field.hxx>
31cdf0e10cSrcweir #include "connpoolsettings.hxx"
32cdf0e10cSrcweir #include <svl/eitem.hxx>
33cdf0e10cSrcweir #include <cuires.hrc>
34cdf0e10cSrcweir #include "helpid.hrc"
35cdf0e10cSrcweir #include <dialmgr.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir //........................................................................
38cdf0e10cSrcweir namespace offapp
39cdf0e10cSrcweir {
40cdf0e10cSrcweir //........................................................................
41cdf0e10cSrcweir 
42cdf0e10cSrcweir     //====================================================================
43cdf0e10cSrcweir     //= DriverListControl
44cdf0e10cSrcweir     //====================================================================
45cdf0e10cSrcweir     typedef ::svt::EditBrowseBox DriverListControl_Base;
46cdf0e10cSrcweir     class DriverListControl : public DriverListControl_Base
47cdf0e10cSrcweir     {
48cdf0e10cSrcweir         using Window::Update;
49cdf0e10cSrcweir     protected:
50cdf0e10cSrcweir         DriverPoolingSettings                   m_aSavedSettings;
51cdf0e10cSrcweir         DriverPoolingSettings                   m_aSettings;
52cdf0e10cSrcweir         DriverPoolingSettings::const_iterator   m_aSeekRow;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir         String                                  m_sYes;
55cdf0e10cSrcweir         String                                  m_sNo;
56cdf0e10cSrcweir 
57cdf0e10cSrcweir         Link                                    m_aRowChangeHandler;
58cdf0e10cSrcweir 
59cdf0e10cSrcweir     public:
60cdf0e10cSrcweir         DriverListControl( Window* _pParent, const ResId& _rId);
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         virtual void Init();
63cdf0e10cSrcweir                 void Update(const DriverPoolingSettings& _rSettings);
64cdf0e10cSrcweir         virtual String GetCellText( long nRow, sal_uInt16 nColId ) const;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir         // the handler will be called with a DriverPoolingSettings::const_iterator as parameter,
67cdf0e10cSrcweir         // or NULL if no valid current row exists
SetRowChangeHandler(const Link & _rHdl)68cdf0e10cSrcweir         void SetRowChangeHandler(const Link& _rHdl) { m_aRowChangeHandler = _rHdl; }
GetRowChangeHandler() const69cdf0e10cSrcweir         Link GetRowChangeHandler() const { return m_aRowChangeHandler; }
70cdf0e10cSrcweir 
71cdf0e10cSrcweir         const DriverPooling* getCurrentRow() const;
72cdf0e10cSrcweir         DriverPooling* getCurrentRow();
73cdf0e10cSrcweir         void                                    updateCurrentRow();
74cdf0e10cSrcweir 
getSettings() const75cdf0e10cSrcweir         const DriverPoolingSettings& getSettings() const { return m_aSettings; }
76cdf0e10cSrcweir 
saveValue()77cdf0e10cSrcweir         void        saveValue()             { m_aSavedSettings = m_aSettings; }
78cdf0e10cSrcweir         sal_Bool    isModified() const;
79cdf0e10cSrcweir 
80cdf0e10cSrcweir     protected:
81cdf0e10cSrcweir         virtual void InitController( ::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol );
82cdf0e10cSrcweir         virtual ::svt::CellController* GetController( long nRow, sal_uInt16 nCol );
83cdf0e10cSrcweir 
84cdf0e10cSrcweir         virtual void PaintCell( OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId ) const;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir         virtual sal_Bool SeekRow( long nRow );
87cdf0e10cSrcweir         virtual sal_Bool SaveModified();
88cdf0e10cSrcweir 
89cdf0e10cSrcweir         virtual sal_Bool IsTabAllowed(sal_Bool _bForward) const;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         virtual void StateChanged( StateChangedType nStateChange );
92cdf0e10cSrcweir 
93cdf0e10cSrcweir         virtual void CursorMoved();
94cdf0e10cSrcweir 
95cdf0e10cSrcweir     protected:
96cdf0e10cSrcweir         virtual sal_uInt32 GetTotalCellWidth(long nRow, sal_uInt16 nColId);
97cdf0e10cSrcweir 
98cdf0e10cSrcweir 
99cdf0e10cSrcweir     private:
100cdf0e10cSrcweir         String implGetCellText(DriverPoolingSettings::const_iterator _rPos, sal_uInt16 _nColId) const;
101cdf0e10cSrcweir     };
102cdf0e10cSrcweir 
103cdf0e10cSrcweir     //--------------------------------------------------------------------
DriverListControl(Window * _pParent,const ResId & _rId)104cdf0e10cSrcweir     DriverListControl::DriverListControl( Window* _pParent, const ResId& _rId)
105cdf0e10cSrcweir //      :DriverListControl_Base(_pParent, _rId, DBBF_NOROWPICTURE, BROWSER_AUTO_VSCROLL | BROWSER_AUTO_HSCROLL | BROWSER_COLUMNSELECTION | BROWSER_HLINESFULL | BROWSER_VLINESFULL | BROWSER_HIDESELECT | BROWSER_CURSOR_WO_FOCUS)
106cdf0e10cSrcweir         :DriverListControl_Base(_pParent, _rId, EBBF_NOROWPICTURE, BROWSER_AUTO_VSCROLL | BROWSER_AUTO_HSCROLL | BROWSER_HIDECURSOR | BROWSER_AUTOSIZE_LASTCOL)
107cdf0e10cSrcweir         ,m_aSeekRow(m_aSettings.end())
108cdf0e10cSrcweir         ,m_sYes(ResId(STR_YES,*_rId.GetResMgr()))
109cdf0e10cSrcweir         ,m_sNo(ResId(STR_NO,*_rId.GetResMgr()))
110cdf0e10cSrcweir     {
111cdf0e10cSrcweir         SetStyle((GetStyle() & ~WB_HSCROLL) | WB_AUTOHSCROLL);
112cdf0e10cSrcweir 
113cdf0e10cSrcweir         SetUniqueId(UID_OFA_CONNPOOL_DRIVERLIST_BACK);
114cdf0e10cSrcweir         GetDataWindow().SetHelpId(HID_OFA_CONNPOOL_DRIVERLIST);
115cdf0e10cSrcweir     }
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     //--------------------------------------------------------------------
IsTabAllowed(sal_Bool) const118cdf0e10cSrcweir     sal_Bool DriverListControl::IsTabAllowed(sal_Bool /*_bForward*/) const
119cdf0e10cSrcweir     {
120cdf0e10cSrcweir         // no travinling within the fields via RETURN and TAB
121cdf0e10cSrcweir         return sal_False;
122cdf0e10cSrcweir     }
123cdf0e10cSrcweir 
124cdf0e10cSrcweir     //--------------------------------------------------------------------
isModified() const125cdf0e10cSrcweir     sal_Bool DriverListControl::isModified() const
126cdf0e10cSrcweir     {
127cdf0e10cSrcweir         if (m_aSettings.size() != m_aSavedSettings.size())
128cdf0e10cSrcweir             return sal_True;
129cdf0e10cSrcweir 
130cdf0e10cSrcweir         DriverPoolingSettings::const_iterator aCurrent = m_aSettings.begin();
131cdf0e10cSrcweir         DriverPoolingSettings::const_iterator aCurrentEnd = m_aSettings.end();
132cdf0e10cSrcweir         DriverPoolingSettings::const_iterator aSaved = m_aSavedSettings.begin();
133cdf0e10cSrcweir         for (;aCurrent != aCurrentEnd; ++aCurrent, ++aSaved)
134cdf0e10cSrcweir         {
135cdf0e10cSrcweir             if (*aCurrent != *aSaved)
136cdf0e10cSrcweir                 return sal_True;
137cdf0e10cSrcweir         }
138cdf0e10cSrcweir 
139cdf0e10cSrcweir         return sal_False;
140cdf0e10cSrcweir     }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir     //--------------------------------------------------------------------
Init()143cdf0e10cSrcweir     void DriverListControl::Init()
144cdf0e10cSrcweir     {
145cdf0e10cSrcweir         DriverListControl_Base::Init();
146cdf0e10cSrcweir 
147cdf0e10cSrcweir         Size aColWidth = LogicToPixel(Size(160, 0), MAP_APPFONT);
148cdf0e10cSrcweir         InsertDataColumn(1, String(CUI_RES(STR_DRIVER_NAME)), aColWidth.Width());
149cdf0e10cSrcweir         aColWidth = LogicToPixel(Size(30, 0), MAP_APPFONT);
150cdf0e10cSrcweir         InsertDataColumn(2, String(CUI_RES(STR_POOLED_FLAG)), aColWidth.Width());
151cdf0e10cSrcweir         aColWidth = LogicToPixel(Size(60, 0), MAP_APPFONT);
152cdf0e10cSrcweir         InsertDataColumn(3, String(CUI_RES(STR_POOL_TIMEOUT)), aColWidth.Width());
153cdf0e10cSrcweir             // Attention: the resource of the string is local to the resource of the enclosing dialog!
154cdf0e10cSrcweir     }
155cdf0e10cSrcweir 
156cdf0e10cSrcweir     //--------------------------------------------------------------------
CursorMoved()157cdf0e10cSrcweir     void DriverListControl::CursorMoved()
158cdf0e10cSrcweir     {
159cdf0e10cSrcweir         DriverListControl_Base::CursorMoved();
160cdf0e10cSrcweir 
161cdf0e10cSrcweir         // call the row change handler
162cdf0e10cSrcweir         if ( m_aRowChangeHandler.IsSet() )
163cdf0e10cSrcweir         {
164cdf0e10cSrcweir             if ( GetCurRow() >= 0 )
165cdf0e10cSrcweir             {   // == -1 may happen in case the browse box has just been cleared
166cdf0e10cSrcweir                 m_aRowChangeHandler.Call( getCurrentRow() );
167cdf0e10cSrcweir             }
168cdf0e10cSrcweir         }
169cdf0e10cSrcweir     }
170cdf0e10cSrcweir 
171cdf0e10cSrcweir     //--------------------------------------------------------------------
getCurrentRow() const172cdf0e10cSrcweir     const DriverPooling* DriverListControl::getCurrentRow() const
173cdf0e10cSrcweir     {
174cdf0e10cSrcweir         OSL_ENSURE( ( GetCurRow() < m_aSettings.size() ) && ( GetCurRow() >= 0 ),
175cdf0e10cSrcweir             "DriverListControl::getCurrentRow: invalid current row!");
176cdf0e10cSrcweir 
177cdf0e10cSrcweir         if ( ( GetCurRow() >= 0 ) && ( GetCurRow() < m_aSettings.size() ) )
178cdf0e10cSrcweir             return &(*(m_aSettings.begin() + GetCurRow()));
179cdf0e10cSrcweir 
180cdf0e10cSrcweir         return NULL;
181cdf0e10cSrcweir     }
182cdf0e10cSrcweir 
183cdf0e10cSrcweir     //--------------------------------------------------------------------
getCurrentRow()184cdf0e10cSrcweir     DriverPooling* DriverListControl::getCurrentRow()
185cdf0e10cSrcweir     {
186cdf0e10cSrcweir         OSL_ENSURE( ( GetCurRow() < m_aSettings.size() ) && ( GetCurRow() >= 0 ),
187cdf0e10cSrcweir             "DriverListControl::getCurrentRow: invalid current row!");
188cdf0e10cSrcweir 
189cdf0e10cSrcweir         if ( ( GetCurRow() >= 0 ) && ( GetCurRow() < m_aSettings.size() ) )
190cdf0e10cSrcweir             return &(*(m_aSettings.begin() + GetCurRow()));
191cdf0e10cSrcweir 
192cdf0e10cSrcweir         return NULL;
193cdf0e10cSrcweir     }
194cdf0e10cSrcweir 
195cdf0e10cSrcweir     //--------------------------------------------------------------------
updateCurrentRow()196cdf0e10cSrcweir     void DriverListControl::updateCurrentRow()
197cdf0e10cSrcweir     {
198cdf0e10cSrcweir         Window::Invalidate( GetRowRectPixel( GetCurRow() ), INVALIDATE_UPDATE );
199cdf0e10cSrcweir     }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir     //--------------------------------------------------------------------
Update(const DriverPoolingSettings & _rSettings)202cdf0e10cSrcweir     void DriverListControl::Update(const DriverPoolingSettings& _rSettings)
203cdf0e10cSrcweir     {
204cdf0e10cSrcweir         m_aSettings = _rSettings;
205cdf0e10cSrcweir 
206cdf0e10cSrcweir         SetUpdateMode(sal_False);
207cdf0e10cSrcweir         RowRemoved(0, GetRowCount());
208cdf0e10cSrcweir         RowInserted(0, m_aSettings.size());
209cdf0e10cSrcweir         SetUpdateMode(sal_True);
210cdf0e10cSrcweir 
211cdf0e10cSrcweir         ActivateCell(1, 0);
212cdf0e10cSrcweir     }
213cdf0e10cSrcweir 
214cdf0e10cSrcweir     //--------------------------------------------------------------------
GetTotalCellWidth(long nRow,sal_uInt16 nColId)215cdf0e10cSrcweir     sal_uInt32 DriverListControl::GetTotalCellWidth(long nRow, sal_uInt16 nColId)
216cdf0e10cSrcweir     {
217cdf0e10cSrcweir         return GetDataWindow().GetTextWidth(GetCellText(nRow, nColId));
218cdf0e10cSrcweir     }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir     //--------------------------------------------------------------------
implGetCellText(DriverPoolingSettings::const_iterator _rPos,sal_uInt16 _nColId) const221cdf0e10cSrcweir     String DriverListControl::implGetCellText(DriverPoolingSettings::const_iterator _rPos, sal_uInt16 _nColId) const
222cdf0e10cSrcweir     {
223cdf0e10cSrcweir         OSL_ENSURE(_rPos < m_aSettings.end(), "DriverListControl::implGetCellText: invalid position!");
224cdf0e10cSrcweir 
225cdf0e10cSrcweir         String sReturn;
226cdf0e10cSrcweir         switch (_nColId)
227cdf0e10cSrcweir         {
228cdf0e10cSrcweir             case 1:
229cdf0e10cSrcweir                 sReturn = _rPos->sName;
230cdf0e10cSrcweir                 break;
231cdf0e10cSrcweir             case 2:
232cdf0e10cSrcweir                 sReturn = _rPos->bEnabled ? m_sYes : m_sNo;
233cdf0e10cSrcweir                 break;
234cdf0e10cSrcweir             case 3:
235cdf0e10cSrcweir                 if (_rPos->bEnabled)
236cdf0e10cSrcweir                     sReturn = String::CreateFromInt32(_rPos->nTimeoutSeconds);
237cdf0e10cSrcweir                 break;
238cdf0e10cSrcweir             default:
239cdf0e10cSrcweir                 OSL_ENSURE(sal_False, "DriverListControl::implGetCellText: invalid column id!");
240cdf0e10cSrcweir         }
241cdf0e10cSrcweir         return sReturn;
242cdf0e10cSrcweir     }
243cdf0e10cSrcweir 
244cdf0e10cSrcweir     //--------------------------------------------------------------------
StateChanged(StateChangedType nStateChange)245cdf0e10cSrcweir     void DriverListControl::StateChanged( StateChangedType nStateChange )
246cdf0e10cSrcweir     {
247cdf0e10cSrcweir         if (STATE_CHANGE_ENABLE == nStateChange)
248cdf0e10cSrcweir             Window::Invalidate(INVALIDATE_UPDATE);
249cdf0e10cSrcweir         DriverListControl_Base::StateChanged( nStateChange );
250cdf0e10cSrcweir     }
251cdf0e10cSrcweir 
252cdf0e10cSrcweir     //--------------------------------------------------------------------
GetCellText(long nRow,sal_uInt16 nColId) const253cdf0e10cSrcweir     String DriverListControl::GetCellText( long nRow, sal_uInt16 nColId ) const
254cdf0e10cSrcweir     {
255cdf0e10cSrcweir         String sReturn;
256cdf0e10cSrcweir         if (nRow > m_aSettings.size())
257cdf0e10cSrcweir         {
258cdf0e10cSrcweir             OSL_ENSURE(sal_False, "DriverListControl::GetCellText: don't ask me for such rows!");
259cdf0e10cSrcweir         }
260cdf0e10cSrcweir         else
261cdf0e10cSrcweir         {
262cdf0e10cSrcweir             sReturn = implGetCellText(m_aSettings.begin() + nRow, nColId);
263cdf0e10cSrcweir         }
264cdf0e10cSrcweir         return sReturn;
265cdf0e10cSrcweir     }
266cdf0e10cSrcweir 
267cdf0e10cSrcweir     //--------------------------------------------------------------------
InitController(::svt::CellControllerRef & rController,long nRow,sal_uInt16 nCol)268cdf0e10cSrcweir     void DriverListControl::InitController( ::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol )
269cdf0e10cSrcweir     {
270cdf0e10cSrcweir         rController->GetWindow().SetText(GetCellText(nRow, nCol));
271cdf0e10cSrcweir     }
272cdf0e10cSrcweir 
273cdf0e10cSrcweir     //--------------------------------------------------------------------
GetController(long,sal_uInt16)274cdf0e10cSrcweir     ::svt::CellController* DriverListControl::GetController( long /*nRow*/, sal_uInt16 /*nCol*/ )
275cdf0e10cSrcweir     {
276cdf0e10cSrcweir         return NULL;
277cdf0e10cSrcweir     }
278cdf0e10cSrcweir 
279cdf0e10cSrcweir     //--------------------------------------------------------------------
SaveModified()280cdf0e10cSrcweir     sal_Bool DriverListControl::SaveModified()
281cdf0e10cSrcweir     {
282cdf0e10cSrcweir         return sal_True;
283cdf0e10cSrcweir     }
284cdf0e10cSrcweir 
285cdf0e10cSrcweir     //--------------------------------------------------------------------
SeekRow(long _nRow)286cdf0e10cSrcweir     sal_Bool DriverListControl::SeekRow( long _nRow )
287cdf0e10cSrcweir     {
288cdf0e10cSrcweir         DriverListControl_Base::SeekRow(_nRow);
289cdf0e10cSrcweir 
290cdf0e10cSrcweir         if (_nRow < m_aSettings.size())
291cdf0e10cSrcweir             m_aSeekRow = m_aSettings.begin() + _nRow;
292cdf0e10cSrcweir         else
293cdf0e10cSrcweir             m_aSeekRow = m_aSettings.end();
294cdf0e10cSrcweir 
295cdf0e10cSrcweir         return m_aSeekRow != m_aSettings.end();
296cdf0e10cSrcweir     }
297cdf0e10cSrcweir 
298cdf0e10cSrcweir     //--------------------------------------------------------------------
PaintCell(OutputDevice & rDev,const Rectangle & rRect,sal_uInt16 nColId) const299cdf0e10cSrcweir     void DriverListControl::PaintCell( OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId ) const
300cdf0e10cSrcweir     {
301cdf0e10cSrcweir         OSL_ENSURE(m_aSeekRow != m_aSettings.end(), "DriverListControl::PaintCell: invalid row!");
302cdf0e10cSrcweir 
303cdf0e10cSrcweir         if (m_aSeekRow != m_aSettings.end())
304cdf0e10cSrcweir         {
305cdf0e10cSrcweir             rDev.SetClipRegion(rRect);
306cdf0e10cSrcweir 
307cdf0e10cSrcweir             sal_uInt16 nStyle = TEXT_DRAW_CLIP;
308cdf0e10cSrcweir             if (!IsEnabled())
309cdf0e10cSrcweir                 nStyle |= TEXT_DRAW_DISABLE;
310cdf0e10cSrcweir             switch (nColId)
311cdf0e10cSrcweir             {
312cdf0e10cSrcweir                 case 1: nStyle |= TEXT_DRAW_LEFT; break;
313cdf0e10cSrcweir                 case 2:
314cdf0e10cSrcweir                 case 3: nStyle |= TEXT_DRAW_CENTER; break;
315cdf0e10cSrcweir             }
316cdf0e10cSrcweir 
317cdf0e10cSrcweir             rDev.DrawText(rRect, implGetCellText(m_aSeekRow, nColId), nStyle);
318cdf0e10cSrcweir 
319cdf0e10cSrcweir             rDev.SetClipRegion();
320cdf0e10cSrcweir         }
321cdf0e10cSrcweir     }
322cdf0e10cSrcweir 
323cdf0e10cSrcweir     //====================================================================
324cdf0e10cSrcweir     //= ConnectionPoolOptionsPage
325cdf0e10cSrcweir     //====================================================================
326cdf0e10cSrcweir     //--------------------------------------------------------------------
ConnectionPoolOptionsPage(Window * _pParent,const SfxItemSet & _rAttrSet)327cdf0e10cSrcweir     ConnectionPoolOptionsPage::ConnectionPoolOptionsPage(Window* _pParent, const SfxItemSet& _rAttrSet)
328cdf0e10cSrcweir         :SfxTabPage(_pParent, CUI_RES(RID_OFAPAGE_CONNPOOLOPTIONS ), _rAttrSet)
329cdf0e10cSrcweir         ,m_aFrame               (this,              CUI_RES(FL_POOLING))
330cdf0e10cSrcweir         ,m_aEnablePooling       (this,      CUI_RES(CB_POOL_CONNS))
331cdf0e10cSrcweir         ,m_aDriversLabel        (this,      CUI_RES(FT_DRIVERS))
332cdf0e10cSrcweir         ,m_pDriverList(new DriverListControl(this, CUI_RES(CTRL_DRIVER_LIST)))
333cdf0e10cSrcweir         ,m_aDriverLabel         (this,      CUI_RES(FT_DRIVERLABEL))
334cdf0e10cSrcweir         ,m_aDriver              (this,      CUI_RES(FT_DRIVER))
335cdf0e10cSrcweir         ,m_aDriverPoolingEnabled(this,      CUI_RES(CB_DRIVERPOOLING))
336cdf0e10cSrcweir         ,m_aTimeoutLabel        (this,      CUI_RES(FT_TIMEOUT))
337cdf0e10cSrcweir         ,m_aTimeout             (this,      CUI_RES(NF_TIMEOUT))
338cdf0e10cSrcweir     {
339cdf0e10cSrcweir         m_pDriverList->Init();
340cdf0e10cSrcweir         m_pDriverList->Show();
341cdf0e10cSrcweir 
342cdf0e10cSrcweir         FreeResource();
343cdf0e10cSrcweir 
344cdf0e10cSrcweir         m_aEnablePooling.SetClickHdl( LINK(this, ConnectionPoolOptionsPage, OnEnabledDisabled) );
345cdf0e10cSrcweir         m_aDriverPoolingEnabled.SetClickHdl( LINK(this, ConnectionPoolOptionsPage, OnEnabledDisabled) );
346cdf0e10cSrcweir 
347cdf0e10cSrcweir         m_pDriverList->SetRowChangeHandler( LINK(this, ConnectionPoolOptionsPage, OnDriverRowChanged) );
348cdf0e10cSrcweir     }
349cdf0e10cSrcweir 
350cdf0e10cSrcweir     //--------------------------------------------------------------------
Create(Window * _pParent,const SfxItemSet & _rAttrSet)351cdf0e10cSrcweir     SfxTabPage* ConnectionPoolOptionsPage::Create(Window* _pParent, const SfxItemSet& _rAttrSet)
352cdf0e10cSrcweir     {
353cdf0e10cSrcweir         return new ConnectionPoolOptionsPage(_pParent, _rAttrSet);
354cdf0e10cSrcweir     }
355cdf0e10cSrcweir 
356cdf0e10cSrcweir     //--------------------------------------------------------------------
~ConnectionPoolOptionsPage()357cdf0e10cSrcweir     ConnectionPoolOptionsPage::~ConnectionPoolOptionsPage()
358cdf0e10cSrcweir     {
359cdf0e10cSrcweir         delete m_pDriverList;
360cdf0e10cSrcweir     }
361cdf0e10cSrcweir 
362cdf0e10cSrcweir     //--------------------------------------------------------------------
implInitControls(const SfxItemSet & _rSet,sal_Bool)363cdf0e10cSrcweir     void ConnectionPoolOptionsPage::implInitControls(const SfxItemSet& _rSet, sal_Bool /*_bFromReset*/)
364cdf0e10cSrcweir     {
365cdf0e10cSrcweir         // the enabled flag
366cdf0e10cSrcweir         SFX_ITEMSET_GET( _rSet, pEnabled, SfxBoolItem, SID_SB_POOLING_ENABLED, sal_True );
367cdf0e10cSrcweir         OSL_ENSURE(pEnabled, "ConnectionPoolOptionsPage::implInitControls: missing the Enabled item!");
368cdf0e10cSrcweir         m_aEnablePooling.Check(pEnabled ? pEnabled->GetValue() : sal_True);
369cdf0e10cSrcweir 
370cdf0e10cSrcweir         m_aEnablePooling.SaveValue();
371cdf0e10cSrcweir 
372cdf0e10cSrcweir         // the settings for the single drivers
373cdf0e10cSrcweir         SFX_ITEMSET_GET( _rSet, pDriverSettings, DriverPoolingSettingsItem, SID_SB_DRIVER_TIMEOUTS, sal_True );
374cdf0e10cSrcweir         if (pDriverSettings)
375cdf0e10cSrcweir             m_pDriverList->Update(pDriverSettings->getSettings());
376cdf0e10cSrcweir         else
377cdf0e10cSrcweir         {
378cdf0e10cSrcweir             OSL_ENSURE(sal_False, "ConnectionPoolOptionsPage::implInitControls: missing the DriverTimeouts item!");
379cdf0e10cSrcweir             m_pDriverList->Update(DriverPoolingSettings());
380cdf0e10cSrcweir         }
381cdf0e10cSrcweir         m_pDriverList->saveValue();
382cdf0e10cSrcweir 
383cdf0e10cSrcweir         // reflect the new settings
384cdf0e10cSrcweir         OnEnabledDisabled(&m_aEnablePooling);
385cdf0e10cSrcweir     }
386cdf0e10cSrcweir 
387cdf0e10cSrcweir     //--------------------------------------------------------------------
Notify(NotifyEvent & _rNEvt)388cdf0e10cSrcweir     long ConnectionPoolOptionsPage::Notify( NotifyEvent& _rNEvt )
389cdf0e10cSrcweir     {
390cdf0e10cSrcweir         if (EVENT_LOSEFOCUS == _rNEvt.GetType())
391cdf0e10cSrcweir             if (m_aTimeout.IsWindowOrChild(_rNEvt.GetWindow()))
392cdf0e10cSrcweir                 commitTimeoutField();
393cdf0e10cSrcweir 
394cdf0e10cSrcweir         return SfxTabPage::Notify(_rNEvt);
395cdf0e10cSrcweir     }
396cdf0e10cSrcweir 
397cdf0e10cSrcweir     //--------------------------------------------------------------------
FillItemSet(SfxItemSet & _rSet)398cdf0e10cSrcweir     sal_Bool ConnectionPoolOptionsPage::FillItemSet(SfxItemSet& _rSet)
399cdf0e10cSrcweir     {
400cdf0e10cSrcweir         commitTimeoutField();
401cdf0e10cSrcweir 
402cdf0e10cSrcweir         sal_Bool bModified = sal_False;
403cdf0e10cSrcweir         // the enabled flag
404cdf0e10cSrcweir         if (m_aEnablePooling.GetSavedValue() != m_aEnablePooling.IsChecked())
405cdf0e10cSrcweir         {
406cdf0e10cSrcweir             _rSet.Put(SfxBoolItem(SID_SB_POOLING_ENABLED, m_aEnablePooling.IsChecked()), SID_SB_POOLING_ENABLED);
407cdf0e10cSrcweir             bModified = sal_True;
408cdf0e10cSrcweir         }
409cdf0e10cSrcweir 
410cdf0e10cSrcweir         // the settings for the single drivers
411cdf0e10cSrcweir         if (m_pDriverList->isModified())
412cdf0e10cSrcweir         {
413cdf0e10cSrcweir             _rSet.Put(DriverPoolingSettingsItem(SID_SB_DRIVER_TIMEOUTS, m_pDriverList->getSettings()), SID_SB_DRIVER_TIMEOUTS);
414cdf0e10cSrcweir             bModified = sal_True;
415cdf0e10cSrcweir         }
416cdf0e10cSrcweir 
417cdf0e10cSrcweir         return bModified;
418cdf0e10cSrcweir     }
419cdf0e10cSrcweir 
420cdf0e10cSrcweir     //--------------------------------------------------------------------
ActivatePage(const SfxItemSet & _rSet)421cdf0e10cSrcweir     void ConnectionPoolOptionsPage::ActivatePage( const SfxItemSet& _rSet)
422cdf0e10cSrcweir     {
423cdf0e10cSrcweir         SfxTabPage::ActivatePage(_rSet);
424cdf0e10cSrcweir         implInitControls(_rSet, sal_False);
425cdf0e10cSrcweir     }
426cdf0e10cSrcweir 
427cdf0e10cSrcweir     //--------------------------------------------------------------------
Reset(const SfxItemSet & _rSet)428cdf0e10cSrcweir     void ConnectionPoolOptionsPage::Reset(const SfxItemSet& _rSet)
429cdf0e10cSrcweir     {
430cdf0e10cSrcweir         implInitControls(_rSet, sal_True);
431cdf0e10cSrcweir     }
432cdf0e10cSrcweir 
433cdf0e10cSrcweir     //--------------------------------------------------------------------
IMPL_LINK(ConnectionPoolOptionsPage,OnDriverRowChanged,const void *,_pRowIterator)434cdf0e10cSrcweir     IMPL_LINK( ConnectionPoolOptionsPage, OnDriverRowChanged, const void*, _pRowIterator )
435cdf0e10cSrcweir     {
436cdf0e10cSrcweir         sal_Bool bValidRow = (NULL != _pRowIterator);
437cdf0e10cSrcweir         m_aDriverPoolingEnabled.Enable(bValidRow && m_aEnablePooling.IsChecked());
438cdf0e10cSrcweir         m_aTimeoutLabel.Enable(bValidRow);
439cdf0e10cSrcweir         m_aTimeout.Enable(bValidRow);
440cdf0e10cSrcweir 
441cdf0e10cSrcweir         if (!bValidRow)
442cdf0e10cSrcweir         {   // positioned on an invalid row
443cdf0e10cSrcweir             m_aDriver.SetText(String());
444cdf0e10cSrcweir         }
445cdf0e10cSrcweir         else
446cdf0e10cSrcweir         {
447cdf0e10cSrcweir             const DriverPooling *pDriverPos = static_cast<const DriverPooling*>(_pRowIterator);
448cdf0e10cSrcweir 
449cdf0e10cSrcweir             m_aDriver.SetText(pDriverPos->sName);
450cdf0e10cSrcweir             m_aDriverPoolingEnabled.Check(pDriverPos->bEnabled);
451cdf0e10cSrcweir             m_aTimeout.SetText(String::CreateFromInt32(pDriverPos->nTimeoutSeconds));
452cdf0e10cSrcweir 
453cdf0e10cSrcweir             OnEnabledDisabled(&m_aDriverPoolingEnabled);
454cdf0e10cSrcweir         }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir         return 0L;
457cdf0e10cSrcweir     }
458cdf0e10cSrcweir 
459cdf0e10cSrcweir     //--------------------------------------------------------------------
commitTimeoutField()460cdf0e10cSrcweir     void ConnectionPoolOptionsPage::commitTimeoutField()
461cdf0e10cSrcweir     {
462cdf0e10cSrcweir         if (DriverPooling* pCurrentDriver = m_pDriverList->getCurrentRow())
463cdf0e10cSrcweir         {
464cdf0e10cSrcweir             pCurrentDriver->nTimeoutSeconds = static_cast<long>(m_aTimeout.GetValue());
465cdf0e10cSrcweir             m_pDriverList->updateCurrentRow();
466cdf0e10cSrcweir         }
467cdf0e10cSrcweir     }
468cdf0e10cSrcweir 
469cdf0e10cSrcweir     //--------------------------------------------------------------------
IMPL_LINK(ConnectionPoolOptionsPage,OnEnabledDisabled,const CheckBox *,_pCheckBox)470cdf0e10cSrcweir     IMPL_LINK( ConnectionPoolOptionsPage, OnEnabledDisabled, const CheckBox*, _pCheckBox )
471cdf0e10cSrcweir     {
472cdf0e10cSrcweir         sal_Bool bGloballyEnabled = m_aEnablePooling.IsChecked();
473cdf0e10cSrcweir         sal_Bool bLocalDriverChanged = &m_aDriverPoolingEnabled == _pCheckBox;
474cdf0e10cSrcweir 
475cdf0e10cSrcweir         if (&m_aEnablePooling == _pCheckBox)
476cdf0e10cSrcweir         {
477cdf0e10cSrcweir             m_aDriversLabel.Enable(bGloballyEnabled);
478cdf0e10cSrcweir             m_pDriverList->Enable(bGloballyEnabled);
479cdf0e10cSrcweir             m_aDriverLabel.Enable(bGloballyEnabled);
480cdf0e10cSrcweir             m_aDriver.Enable(bGloballyEnabled);
481cdf0e10cSrcweir             m_aDriverPoolingEnabled.Enable(bGloballyEnabled);
482cdf0e10cSrcweir         }
483cdf0e10cSrcweir         else
484cdf0e10cSrcweir             OSL_ENSURE(bLocalDriverChanged, "ConnectionPoolOptionsPage::OnEnabledDisabled: where did this come from?");
485cdf0e10cSrcweir 
486cdf0e10cSrcweir         m_aTimeoutLabel.Enable(bGloballyEnabled && m_aDriverPoolingEnabled.IsChecked());
487cdf0e10cSrcweir         m_aTimeout.Enable(bGloballyEnabled && m_aDriverPoolingEnabled.IsChecked());
488cdf0e10cSrcweir 
489cdf0e10cSrcweir         if (bLocalDriverChanged)
490cdf0e10cSrcweir         {
491cdf0e10cSrcweir             // update the list
492cdf0e10cSrcweir             m_pDriverList->getCurrentRow()->bEnabled = m_aDriverPoolingEnabled.IsChecked();
493cdf0e10cSrcweir             m_pDriverList->updateCurrentRow();
494cdf0e10cSrcweir         }
495cdf0e10cSrcweir 
496cdf0e10cSrcweir         return 0L;
497cdf0e10cSrcweir     }
498cdf0e10cSrcweir 
499cdf0e10cSrcweir //........................................................................
500cdf0e10cSrcweir }   // namespace offapp
501cdf0e10cSrcweir //........................................................................
502