xref: /trunk/main/dbaccess/source/ui/dlg/advancedsettings.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
196de5490SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
396de5490SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
496de5490SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
596de5490SAndrew Rist  * distributed with this work for additional information
696de5490SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
796de5490SAndrew Rist  * to you under the Apache License, Version 2.0 (the
896de5490SAndrew Rist  * "License"); you may not use this file except in compliance
996de5490SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1196de5490SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1396de5490SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1496de5490SAndrew Rist  * software distributed under the License is distributed on an
1596de5490SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1696de5490SAndrew Rist  * KIND, either express or implied.  See the License for the
1796de5490SAndrew Rist  * specific language governing permissions and limitations
1896de5490SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2096de5490SAndrew Rist  *************************************************************/
2196de5490SAndrew Rist 
2296de5490SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25*b63233d8Sdamjan #include "precompiled_dbui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "advancedsettings.hxx"
28cdf0e10cSrcweir #include "advancedsettingsdlg.hxx"
29cdf0e10cSrcweir #include "moduledbu.hxx"
30cdf0e10cSrcweir #include "dsitems.hxx"
31cdf0e10cSrcweir #include "DbAdminImpl.hxx"
32cdf0e10cSrcweir #include "DriverSettings.hxx"
33cdf0e10cSrcweir #include "optionalboolitem.hxx"
34cdf0e10cSrcweir #include "dbu_resource.hrc"
35cdf0e10cSrcweir #include "dbu_dlg.hrc"
36cdf0e10cSrcweir #include "dbadmin.hrc"
37cdf0e10cSrcweir #include "advancedsettings.hrc"
38cdf0e10cSrcweir 
39cdf0e10cSrcweir /** === begin UNO includes === **/
40cdf0e10cSrcweir /** === end UNO includes === **/
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include <svl/eitem.hxx>
43cdf0e10cSrcweir #include <svl/intitem.hxx>
44cdf0e10cSrcweir #include <svl/stritem.hxx>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir #include <vcl/msgbox.hxx>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir //........................................................................
49cdf0e10cSrcweir namespace dbaui
50cdf0e10cSrcweir {
51cdf0e10cSrcweir //........................................................................
52cdf0e10cSrcweir 
53cdf0e10cSrcweir     /** === begin UNO using === **/
54cdf0e10cSrcweir     using ::com::sun::star::uno::Reference;
55cdf0e10cSrcweir     using ::com::sun::star::lang::XMultiServiceFactory;
56cdf0e10cSrcweir     using ::com::sun::star::uno::Any;
57cdf0e10cSrcweir     using ::com::sun::star::beans::XPropertySet;
58cdf0e10cSrcweir     using ::com::sun::star::sdbc::XConnection;
59cdf0e10cSrcweir     using ::com::sun::star::sdbc::XDriver;
60cdf0e10cSrcweir     /** === end UNO using === **/
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     //========================================================================
63cdf0e10cSrcweir     //= SpecialSettingsPage
64cdf0e10cSrcweir     //========================================================================
65cdf0e10cSrcweir     struct BooleanSettingDesc
66cdf0e10cSrcweir     {
67cdf0e10cSrcweir         CheckBox**  ppControl;          // the dialog's control which displays this setting
68cdf0e10cSrcweir         sal_uInt16      nControlResId;      // the resource ID to load the control from
69cdf0e10cSrcweir         sal_uInt16      nItemId;            // the ID of the item (in an SfxItemSet) which corresponds to this setting
70cdf0e10cSrcweir         bool        bInvertedDisplay;   // true if and only if the checkbox is checked when the item is sal_False, and vice versa
71cdf0e10cSrcweir     };
72cdf0e10cSrcweir 
73cdf0e10cSrcweir     //========================================================================
74cdf0e10cSrcweir     //= SpecialSettingsPage
75cdf0e10cSrcweir     //========================================================================
SpecialSettingsPage(Window * pParent,const SfxItemSet & _rCoreAttrs,const DataSourceMetaData & _rDSMeta)76cdf0e10cSrcweir     SpecialSettingsPage::SpecialSettingsPage( Window* pParent, const SfxItemSet& _rCoreAttrs, const DataSourceMetaData& _rDSMeta )
77cdf0e10cSrcweir         :OGenericAdministrationPage( pParent, ModuleRes( PAGE_ADVANCED_SETTINGS_SPECIAL ), _rCoreAttrs )
78cdf0e10cSrcweir         ,m_aTopLine( this, ModuleRes( FL_DATAHANDLING ) )
79cdf0e10cSrcweir         ,m_pIsSQL92Check( NULL )
80cdf0e10cSrcweir         ,m_pAppendTableAlias( NULL )
81cdf0e10cSrcweir         ,m_pAsBeforeCorrelationName( NULL )
82cdf0e10cSrcweir         ,m_pEnableOuterJoin( NULL )
83cdf0e10cSrcweir         ,m_pIgnoreDriverPrivileges( NULL )
84cdf0e10cSrcweir         ,m_pParameterSubstitution( NULL )
85cdf0e10cSrcweir         ,m_pSuppressVersionColumn( NULL )
86cdf0e10cSrcweir         ,m_pCatalog( NULL )
87cdf0e10cSrcweir         ,m_pSchema( NULL )
88cdf0e10cSrcweir         ,m_pIndexAppendix( NULL )
89cdf0e10cSrcweir         ,m_pDosLineEnds( NULL )
90cdf0e10cSrcweir         ,m_pCheckRequiredFields( NULL )
91cdf0e10cSrcweir         ,m_pIgnoreCurrency(NULL)
92cdf0e10cSrcweir         ,m_pEscapeDateTime(NULL)
93cdf0e10cSrcweir         ,m_pPrimaryKeySupport(NULL)
94cdf0e10cSrcweir         ,m_pRespectDriverResultSetType(NULL)
95cdf0e10cSrcweir         ,m_pBooleanComparisonModeLabel( NULL )
96cdf0e10cSrcweir         ,m_pBooleanComparisonMode( NULL )
97cdf0e10cSrcweir         ,m_pMaxRowScanLabel( NULL )
98cdf0e10cSrcweir         ,m_pMaxRowScan( NULL )
99cdf0e10cSrcweir         ,m_aControlDependencies()
100cdf0e10cSrcweir         ,m_aBooleanSettings()
101cdf0e10cSrcweir         ,m_bHasBooleanComparisonMode( _rDSMeta.getFeatureSet().has( DSID_BOOLEANCOMPARISON ) )
102cdf0e10cSrcweir         ,m_bHasMaxRowScan( _rDSMeta.getFeatureSet().has( DSID_MAX_ROW_SCAN ) )
103cdf0e10cSrcweir     {
104cdf0e10cSrcweir         impl_initBooleanSettings();
105cdf0e10cSrcweir 
106cdf0e10cSrcweir         const FeatureSet& rFeatures( _rDSMeta.getFeatureSet() );
107cdf0e10cSrcweir         // create all the check boxes for the boolean settings
108cdf0e10cSrcweir         for (   BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin();
109cdf0e10cSrcweir                 setting != m_aBooleanSettings.end();
110cdf0e10cSrcweir                 ++setting
111cdf0e10cSrcweir              )
112cdf0e10cSrcweir         {
113cdf0e10cSrcweir             sal_uInt16 nItemId = setting->nItemId;
114cdf0e10cSrcweir             if ( rFeatures.has( nItemId ) )
115cdf0e10cSrcweir             {
116cdf0e10cSrcweir                 sal_uInt16 nResourceId = setting->nControlResId;
117cdf0e10cSrcweir                 (*setting->ppControl) = new CheckBox( this, ModuleRes( nResourceId ) );
118cdf0e10cSrcweir                 (*setting->ppControl)->SetClickHdl( getControlModifiedLink() );
119cdf0e10cSrcweir 
120cdf0e10cSrcweir                 // check whether this must be a tristate check box
121cdf0e10cSrcweir                 const SfxPoolItem& rItem = _rCoreAttrs.Get( nItemId );
122cdf0e10cSrcweir                 if ( rItem.ISA( OptionalBoolItem ) )
123cdf0e10cSrcweir                     (*setting->ppControl)->EnableTriState( sal_True );
124cdf0e10cSrcweir             }
125cdf0e10cSrcweir         }
126cdf0e10cSrcweir 
127cdf0e10cSrcweir         if ( m_pAsBeforeCorrelationName && m_pAppendTableAlias )
128cdf0e10cSrcweir             // make m_pAsBeforeCorrelationName depend on m_pAppendTableAlias
129cdf0e10cSrcweir             m_aControlDependencies.enableOnCheckMark( *m_pAppendTableAlias, *m_pAsBeforeCorrelationName );
130cdf0e10cSrcweir 
131cdf0e10cSrcweir         // move the controls to the appropriate positions
132cdf0e10cSrcweir         Point aPos( m_aTopLine.GetPosPixel() );
133cdf0e10cSrcweir         aPos.Move( 0, m_aTopLine.GetSizePixel().Height() );
134cdf0e10cSrcweir         Size aFirstDistance( LogicToPixel( Size( INDENTED_X, RELATED_CONTROLS ), MAP_APPFONT ) );
135cdf0e10cSrcweir         aPos.Move( aFirstDistance.Width(), aFirstDistance.Height() );
136cdf0e10cSrcweir 
137cdf0e10cSrcweir         Size aUnrelatedControls( LogicToPixel( Size( RELATED_CONTROLS, RELATED_CONTROLS ), MAP_APPFONT ) );
138cdf0e10cSrcweir 
139cdf0e10cSrcweir         for (   BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin();
140cdf0e10cSrcweir                 setting != m_aBooleanSettings.end();
141cdf0e10cSrcweir                 ++setting
142cdf0e10cSrcweir              )
143cdf0e10cSrcweir         {
144cdf0e10cSrcweir             if ( !*setting->ppControl )
145cdf0e10cSrcweir                 continue;
146cdf0e10cSrcweir 
147cdf0e10cSrcweir             (*setting->ppControl)->SetPosPixel( aPos );
148cdf0e10cSrcweir             aPos.Move( 0, (*setting->ppControl)->GetSizePixel().Height() );
149cdf0e10cSrcweir             aPos.Move( 0, aUnrelatedControls.Height() );
150cdf0e10cSrcweir         }
151cdf0e10cSrcweir 
152cdf0e10cSrcweir         // create the controls for the boolean comparison mode
153cdf0e10cSrcweir         if ( m_bHasBooleanComparisonMode )
154cdf0e10cSrcweir         {
155cdf0e10cSrcweir             m_pBooleanComparisonModeLabel = new FixedText( this, ModuleRes( FT_BOOLEANCOMPARISON ) );
156cdf0e10cSrcweir             m_pBooleanComparisonMode = new ListBox( this, ModuleRes( LB_BOOLEANCOMPARISON ) );
157cdf0e10cSrcweir             m_pBooleanComparisonMode->SetDropDownLineCount( 4 );
158cdf0e10cSrcweir             m_pBooleanComparisonMode->SetSelectHdl( getControlModifiedLink() );
159cdf0e10cSrcweir 
160cdf0e10cSrcweir             Point aLabelPos( m_pBooleanComparisonModeLabel->GetPosPixel() );
161cdf0e10cSrcweir             Point aControlPos( m_pBooleanComparisonMode->GetPosPixel() );
162cdf0e10cSrcweir             long nMoveUp = aControlPos.Y() - aPos.Y();
163cdf0e10cSrcweir 
164cdf0e10cSrcweir             m_pBooleanComparisonModeLabel->SetPosPixel( Point( aLabelPos.X(), aLabelPos.Y() - nMoveUp ) );
165cdf0e10cSrcweir             m_pBooleanComparisonMode->SetPosPixel( Point( aControlPos.X(), aControlPos.Y() - nMoveUp ) );
166cdf0e10cSrcweir         }
167cdf0e10cSrcweir         // create the controls for the max row scan
168cdf0e10cSrcweir         if ( m_bHasMaxRowScan )
169cdf0e10cSrcweir         {
170cdf0e10cSrcweir             m_pMaxRowScanLabel = new FixedText( this, ModuleRes( FT_MAXROWSCAN ) );
171cdf0e10cSrcweir             m_pMaxRowScan = new NumericField( this, ModuleRes( NF_MAXROWSCAN ) );
172cdf0e10cSrcweir             m_pMaxRowScan->SetModifyHdl(getControlModifiedLink());
173cdf0e10cSrcweir             m_pMaxRowScan->SetUseThousandSep(sal_False);
174cdf0e10cSrcweir 
175cdf0e10cSrcweir             Point aLabelPos( m_pMaxRowScanLabel->GetPosPixel() );
176cdf0e10cSrcweir             Point aControlPos( m_pMaxRowScan->GetPosPixel() );
177cdf0e10cSrcweir             long nMoveUp = aControlPos.Y() - aPos.Y();
178cdf0e10cSrcweir 
179cdf0e10cSrcweir             m_pMaxRowScanLabel->SetPosPixel( Point( aLabelPos.X(), aLabelPos.Y() - nMoveUp ) );
180cdf0e10cSrcweir             m_pMaxRowScan->SetPosPixel( Point( aControlPos.X(), aControlPos.Y() - nMoveUp ) );
181cdf0e10cSrcweir         }
182cdf0e10cSrcweir 
183cdf0e10cSrcweir         FreeResource();
184cdf0e10cSrcweir     }
185cdf0e10cSrcweir 
186cdf0e10cSrcweir     // -----------------------------------------------------------------------
~SpecialSettingsPage()187cdf0e10cSrcweir     SpecialSettingsPage::~SpecialSettingsPage()
188cdf0e10cSrcweir     {
189cdf0e10cSrcweir         m_aControlDependencies.clear();
190cdf0e10cSrcweir 
191cdf0e10cSrcweir         DELETEZ( m_pIsSQL92Check );
192cdf0e10cSrcweir         DELETEZ( m_pAppendTableAlias );
193cdf0e10cSrcweir         DELETEZ( m_pAsBeforeCorrelationName );
194cdf0e10cSrcweir         DELETEZ( m_pParameterSubstitution );
195cdf0e10cSrcweir         DELETEZ( m_pIgnoreDriverPrivileges );
196cdf0e10cSrcweir         DELETEZ( m_pSuppressVersionColumn );
197cdf0e10cSrcweir         DELETEZ( m_pEnableOuterJoin );
198cdf0e10cSrcweir         DELETEZ( m_pCatalog );
199cdf0e10cSrcweir         DELETEZ( m_pSchema );
200cdf0e10cSrcweir         DELETEZ( m_pIndexAppendix );
201cdf0e10cSrcweir         DELETEZ( m_pDosLineEnds );
202cdf0e10cSrcweir         DELETEZ( m_pCheckRequiredFields );
203cdf0e10cSrcweir         DELETEZ( m_pIgnoreCurrency );
204cdf0e10cSrcweir         DELETEZ( m_pEscapeDateTime );
205cdf0e10cSrcweir         DELETEZ( m_pPrimaryKeySupport );
206cdf0e10cSrcweir         DELETEZ( m_pRespectDriverResultSetType );
207cdf0e10cSrcweir         DELETEZ( m_pBooleanComparisonModeLabel );
208cdf0e10cSrcweir         DELETEZ( m_pBooleanComparisonMode );
209cdf0e10cSrcweir         DELETEZ( m_pMaxRowScanLabel );
210cdf0e10cSrcweir         DELETEZ( m_pMaxRowScan );
211cdf0e10cSrcweir     }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir     // -----------------------------------------------------------------------
impl_initBooleanSettings()214cdf0e10cSrcweir     void SpecialSettingsPage::impl_initBooleanSettings()
215cdf0e10cSrcweir     {
216cdf0e10cSrcweir         OSL_PRECOND( m_aBooleanSettings.empty(), "SpecialSettingsPage::impl_initBooleanSettings: called twice!" );
217cdf0e10cSrcweir 
21807a3d7f1SPedro Giffuni         // for easier maintenance, write the table in this form, then copy it to m_aBooleanSettings
219cdf0e10cSrcweir         BooleanSettingDesc aSettings[] = {
220cdf0e10cSrcweir             { &m_pIsSQL92Check,                 CB_SQL92CHECK,          DSID_SQL92CHECK,            false },
221cdf0e10cSrcweir             { &m_pAppendTableAlias,             CB_APPENDTABLEALIAS,    DSID_APPEND_TABLE_ALIAS,    false },
222cdf0e10cSrcweir             { &m_pAsBeforeCorrelationName,      CB_AS_BEFORE_CORR_NAME, DSID_AS_BEFORE_CORRNAME,    false },
223cdf0e10cSrcweir             { &m_pEnableOuterJoin,              CB_ENABLEOUTERJOIN,     DSID_ENABLEOUTERJOIN,       false },
224cdf0e10cSrcweir             { &m_pIgnoreDriverPrivileges,       CB_IGNOREDRIVER_PRIV,   DSID_IGNOREDRIVER_PRIV,     false },
225cdf0e10cSrcweir             { &m_pParameterSubstitution,        CB_PARAMETERNAMESUBST,  DSID_PARAMETERNAMESUBST,    false },
226cdf0e10cSrcweir             { &m_pSuppressVersionColumn,        CB_SUPPRESVERSIONCL,    DSID_SUPPRESSVERSIONCL,     true },
227cdf0e10cSrcweir             { &m_pCatalog,                      CB_CATALOG,             DSID_CATALOG,               false },
228cdf0e10cSrcweir             { &m_pSchema,                       CB_SCHEMA,              DSID_SCHEMA,                false },
229cdf0e10cSrcweir             { &m_pIndexAppendix,                CB_IGNOREINDEXAPPENDIX, DSID_INDEXAPPENDIX,         false },
230cdf0e10cSrcweir             { &m_pDosLineEnds,                  CB_DOSLINEENDS,         DSID_DOSLINEENDS,           false },
231cdf0e10cSrcweir             { &m_pCheckRequiredFields,          CB_CHECK_REQUIRED,      DSID_CHECK_REQUIRED_FIELDS, false },
232cdf0e10cSrcweir             { &m_pIgnoreCurrency,               CB_IGNORECURRENCY,      DSID_IGNORECURRENCY,        false },
233cdf0e10cSrcweir             { &m_pEscapeDateTime,               CB_ESCAPE_DATETIME,     DSID_ESCAPE_DATETIME,       false },
234cdf0e10cSrcweir             { &m_pPrimaryKeySupport,            CB_PRIMARY_KEY_SUPPORT, DSID_PRIMARY_KEY_SUPPORT,   false },
235cdf0e10cSrcweir             { &m_pRespectDriverResultSetType,   CB_RESPECTRESULTSETTYPE,DSID_RESPECTRESULTSETTYPE,  false },
236cdf0e10cSrcweir             { NULL,                         0,                      0,                          false }
237cdf0e10cSrcweir         };
238cdf0e10cSrcweir 
239cdf0e10cSrcweir         for ( const BooleanSettingDesc* pCopy = aSettings; pCopy->nItemId != 0; ++pCopy )
240cdf0e10cSrcweir         {
241cdf0e10cSrcweir             m_aBooleanSettings.push_back( *pCopy );
242cdf0e10cSrcweir         }
243cdf0e10cSrcweir     }
244cdf0e10cSrcweir 
245cdf0e10cSrcweir     // -----------------------------------------------------------------------
fillWindows(::std::vector<ISaveValueWrapper * > & _rControlList)246cdf0e10cSrcweir     void SpecialSettingsPage::fillWindows( ::std::vector< ISaveValueWrapper* >& _rControlList )
247cdf0e10cSrcweir     {
248cdf0e10cSrcweir         if ( m_bHasBooleanComparisonMode )
249cdf0e10cSrcweir         {
250cdf0e10cSrcweir             _rControlList.push_back( new ODisableWrapper< FixedText >( m_pBooleanComparisonModeLabel ) );
251cdf0e10cSrcweir         }
252cdf0e10cSrcweir         if ( m_bHasMaxRowScan )
253cdf0e10cSrcweir         {
254cdf0e10cSrcweir             _rControlList.push_back( new ODisableWrapper< FixedText >( m_pMaxRowScanLabel ) );
255cdf0e10cSrcweir         }
256cdf0e10cSrcweir     }
257cdf0e10cSrcweir 
258cdf0e10cSrcweir     // -----------------------------------------------------------------------
fillControls(::std::vector<ISaveValueWrapper * > & _rControlList)259cdf0e10cSrcweir     void SpecialSettingsPage::fillControls(::std::vector< ISaveValueWrapper* >& _rControlList)
260cdf0e10cSrcweir     {
261cdf0e10cSrcweir         for (   BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin();
262cdf0e10cSrcweir                 setting != m_aBooleanSettings.end();
263cdf0e10cSrcweir                 ++setting
264cdf0e10cSrcweir              )
265cdf0e10cSrcweir         {
266cdf0e10cSrcweir             if ( *setting->ppControl )
267cdf0e10cSrcweir             {
268cdf0e10cSrcweir                 _rControlList.push_back( new OSaveValueWrapper< CheckBox >( *setting->ppControl ) );
269cdf0e10cSrcweir             }
270cdf0e10cSrcweir         }
271cdf0e10cSrcweir 
272cdf0e10cSrcweir         if ( m_bHasBooleanComparisonMode )
273cdf0e10cSrcweir             _rControlList.push_back( new OSaveValueWrapper< ListBox >( m_pBooleanComparisonMode ) );
274cdf0e10cSrcweir         if ( m_bHasMaxRowScan )
275cdf0e10cSrcweir             _rControlList.push_back(new OSaveValueWrapper<NumericField>(m_pMaxRowScan));
276cdf0e10cSrcweir     }
277cdf0e10cSrcweir 
278cdf0e10cSrcweir     // -----------------------------------------------------------------------
implInitControls(const SfxItemSet & _rSet,sal_Bool _bSaveValue)279cdf0e10cSrcweir     void SpecialSettingsPage::implInitControls(const SfxItemSet& _rSet, sal_Bool _bSaveValue)
280cdf0e10cSrcweir     {
281cdf0e10cSrcweir         // check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa)
282cdf0e10cSrcweir         sal_Bool bValid, bReadonly;
283cdf0e10cSrcweir         getFlags( _rSet, bValid, bReadonly );
284cdf0e10cSrcweir 
285cdf0e10cSrcweir         if ( !bValid )
286cdf0e10cSrcweir         {
287cdf0e10cSrcweir             OGenericAdministrationPage::implInitControls(_rSet, _bSaveValue);
288cdf0e10cSrcweir             return;
289cdf0e10cSrcweir         }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir         // the boolean items
292cdf0e10cSrcweir         for (   BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin();
293cdf0e10cSrcweir                 setting != m_aBooleanSettings.end();
294cdf0e10cSrcweir                 ++setting
295cdf0e10cSrcweir              )
296cdf0e10cSrcweir         {
297cdf0e10cSrcweir             if ( !*setting->ppControl )
298cdf0e10cSrcweir                 continue;
299cdf0e10cSrcweir 
300cdf0e10cSrcweir             ::boost::optional< bool > aValue;
301cdf0e10cSrcweir 
302cdf0e10cSrcweir             SFX_ITEMSET_GET( _rSet, pItem, SfxPoolItem, setting->nItemId, sal_True );
303cdf0e10cSrcweir             if ( pItem->ISA( SfxBoolItem ) )
304cdf0e10cSrcweir             {
305cdf0e10cSrcweir                 aValue.reset( PTR_CAST( SfxBoolItem, pItem )->GetValue() );
306cdf0e10cSrcweir             }
307cdf0e10cSrcweir             else if ( pItem->ISA( OptionalBoolItem ) )
308cdf0e10cSrcweir             {
309cdf0e10cSrcweir                 aValue = PTR_CAST( OptionalBoolItem, pItem )->GetFullValue();
310cdf0e10cSrcweir             }
311cdf0e10cSrcweir             else
312cdf0e10cSrcweir                 DBG_ERROR( "SpecialSettingsPage::implInitControls: unknown boolean item type!" );
313cdf0e10cSrcweir 
314cdf0e10cSrcweir             if ( !aValue )
315cdf0e10cSrcweir             {
316cdf0e10cSrcweir                 (*setting->ppControl)->SetState( STATE_DONTKNOW );
317cdf0e10cSrcweir             }
318cdf0e10cSrcweir             else
319cdf0e10cSrcweir             {
320cdf0e10cSrcweir                 sal_Bool bValue = *aValue;
321cdf0e10cSrcweir                 if ( setting->bInvertedDisplay )
322cdf0e10cSrcweir                     bValue = !bValue;
323cdf0e10cSrcweir                 (*setting->ppControl)->Check( bValue );
324cdf0e10cSrcweir             }
325cdf0e10cSrcweir         }
326cdf0e10cSrcweir 
327cdf0e10cSrcweir         // the non-boolean items
328cdf0e10cSrcweir         if ( m_bHasBooleanComparisonMode )
329cdf0e10cSrcweir         {
330cdf0e10cSrcweir             SFX_ITEMSET_GET( _rSet, pBooleanComparison, SfxInt32Item, DSID_BOOLEANCOMPARISON, sal_True );
331cdf0e10cSrcweir             m_pBooleanComparisonMode->SelectEntryPos( static_cast< sal_uInt16 >( pBooleanComparison->GetValue() ) );
332cdf0e10cSrcweir         }
333cdf0e10cSrcweir 
334cdf0e10cSrcweir         if ( m_bHasMaxRowScan )
335cdf0e10cSrcweir         {
336cdf0e10cSrcweir             SFX_ITEMSET_GET(_rSet, pMaxRowScan, SfxInt32Item, DSID_MAX_ROW_SCAN, sal_True);
337cdf0e10cSrcweir             m_pMaxRowScan->SetValue(pMaxRowScan->GetValue());
338cdf0e10cSrcweir         }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir         OGenericAdministrationPage::implInitControls(_rSet, _bSaveValue);
341cdf0e10cSrcweir     }
342cdf0e10cSrcweir 
343cdf0e10cSrcweir     // -----------------------------------------------------------------------
FillItemSet(SfxItemSet & _rSet)344cdf0e10cSrcweir     sal_Bool SpecialSettingsPage::FillItemSet( SfxItemSet& _rSet )
345cdf0e10cSrcweir     {
346cdf0e10cSrcweir         sal_Bool bChangedSomething = sal_False;
347cdf0e10cSrcweir 
348cdf0e10cSrcweir         // the boolean items
349cdf0e10cSrcweir         for (   BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin();
350cdf0e10cSrcweir                 setting != m_aBooleanSettings.end();
351cdf0e10cSrcweir                 ++setting
352cdf0e10cSrcweir              )
353cdf0e10cSrcweir         {
354cdf0e10cSrcweir             if ( !*setting->ppControl )
355cdf0e10cSrcweir                 continue;
356cdf0e10cSrcweir             fillBool( _rSet, *setting->ppControl, setting->nItemId, bChangedSomething, setting->bInvertedDisplay );
357cdf0e10cSrcweir         }
358cdf0e10cSrcweir 
359cdf0e10cSrcweir         // the non-boolean items
360cdf0e10cSrcweir         if ( m_bHasBooleanComparisonMode )
361cdf0e10cSrcweir         {
362cdf0e10cSrcweir             if ( m_pBooleanComparisonMode->GetSelectEntryPos() != m_pBooleanComparisonMode->GetSavedValue() )
363cdf0e10cSrcweir             {
364cdf0e10cSrcweir                 _rSet.Put( SfxInt32Item( DSID_BOOLEANCOMPARISON, m_pBooleanComparisonMode->GetSelectEntryPos() ) );
365cdf0e10cSrcweir                 bChangedSomething = sal_True;
366cdf0e10cSrcweir             }
367cdf0e10cSrcweir         }
368cdf0e10cSrcweir         if ( m_bHasMaxRowScan )
369cdf0e10cSrcweir         {
370cdf0e10cSrcweir             fillInt32(_rSet,m_pMaxRowScan,DSID_MAX_ROW_SCAN,bChangedSomething);
371cdf0e10cSrcweir         }
372cdf0e10cSrcweir         return bChangedSomething;
373cdf0e10cSrcweir     }
374cdf0e10cSrcweir 
375cdf0e10cSrcweir     //========================================================================
376cdf0e10cSrcweir     //= GeneratedValuesPage
377cdf0e10cSrcweir     //========================================================================
378cdf0e10cSrcweir     //------------------------------------------------------------------------
GeneratedValuesPage(Window * pParent,const SfxItemSet & _rCoreAttrs)379cdf0e10cSrcweir     GeneratedValuesPage::GeneratedValuesPage( Window* pParent, const SfxItemSet& _rCoreAttrs )
380cdf0e10cSrcweir         :OGenericAdministrationPage(pParent, ModuleRes( PAGE_GENERATED_VALUES ), _rCoreAttrs)
381cdf0e10cSrcweir         ,m_aAutoFixedLine        ( this, ModuleRes( FL_SEPARATORAUTO ) )
382cdf0e10cSrcweir         ,m_aAutoRetrievingEnabled( this, ModuleRes( CB_RETRIEVE_AUTO ) )
383cdf0e10cSrcweir         ,m_aAutoIncrementLabel   ( this, ModuleRes( FT_AUTOINCREMENTVALUE ) )
384cdf0e10cSrcweir         ,m_aAutoIncrement        ( this, ModuleRes( ET_AUTOINCREMENTVALUE ) )
385cdf0e10cSrcweir         ,m_aAutoRetrievingLabel  ( this, ModuleRes( FT_RETRIEVE_AUTO ) )
386cdf0e10cSrcweir         ,m_aAutoRetrieving       ( this, ModuleRes( ET_RETRIEVE_AUTO ) )
387cdf0e10cSrcweir     {
388cdf0e10cSrcweir         m_aAutoRetrievingEnabled.SetClickHdl( getControlModifiedLink() );
389cdf0e10cSrcweir         m_aAutoIncrement.SetModifyHdl( getControlModifiedLink() );
390cdf0e10cSrcweir         m_aAutoRetrieving.SetModifyHdl( getControlModifiedLink() );
391cdf0e10cSrcweir 
392cdf0e10cSrcweir         m_aControlDependencies.enableOnCheckMark( m_aAutoRetrievingEnabled,
393cdf0e10cSrcweir             m_aAutoIncrementLabel, m_aAutoIncrement, m_aAutoRetrievingLabel, m_aAutoRetrieving );
394cdf0e10cSrcweir 
395cdf0e10cSrcweir         FreeResource();
396cdf0e10cSrcweir     }
397cdf0e10cSrcweir 
398cdf0e10cSrcweir     // -----------------------------------------------------------------------
~GeneratedValuesPage()399cdf0e10cSrcweir     GeneratedValuesPage::~GeneratedValuesPage()
400cdf0e10cSrcweir     {
401cdf0e10cSrcweir         m_aControlDependencies.clear();
402cdf0e10cSrcweir     }
403cdf0e10cSrcweir 
404cdf0e10cSrcweir     // -----------------------------------------------------------------------
fillWindows(::std::vector<ISaveValueWrapper * > & _rControlList)405cdf0e10cSrcweir     void GeneratedValuesPage::fillWindows( ::std::vector< ISaveValueWrapper* >& _rControlList )
406cdf0e10cSrcweir     {
407cdf0e10cSrcweir         _rControlList.push_back( new ODisableWrapper< FixedLine >( &m_aAutoFixedLine ) );
408cdf0e10cSrcweir         _rControlList.push_back( new ODisableWrapper< FixedText >( &m_aAutoIncrementLabel ) );
409cdf0e10cSrcweir         _rControlList.push_back( new ODisableWrapper< FixedText >( &m_aAutoRetrievingLabel ) );
410cdf0e10cSrcweir     }
411cdf0e10cSrcweir 
412cdf0e10cSrcweir     // -----------------------------------------------------------------------
fillControls(::std::vector<ISaveValueWrapper * > & _rControlList)413cdf0e10cSrcweir     void GeneratedValuesPage::fillControls( ::std::vector< ISaveValueWrapper* >& _rControlList )
414cdf0e10cSrcweir     {
415cdf0e10cSrcweir         _rControlList.push_back( new OSaveValueWrapper< CheckBox >( &m_aAutoRetrievingEnabled ) );
416cdf0e10cSrcweir         _rControlList.push_back( new OSaveValueWrapper< Edit >( &m_aAutoIncrement ) );
417cdf0e10cSrcweir         _rControlList.push_back( new OSaveValueWrapper< Edit >( &m_aAutoRetrieving ) );
418cdf0e10cSrcweir     }
419cdf0e10cSrcweir 
420cdf0e10cSrcweir     // -----------------------------------------------------------------------
implInitControls(const SfxItemSet & _rSet,sal_Bool _bSaveValue)421cdf0e10cSrcweir     void GeneratedValuesPage::implInitControls( const SfxItemSet& _rSet, sal_Bool _bSaveValue )
422cdf0e10cSrcweir     {
423cdf0e10cSrcweir         // check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa)
424cdf0e10cSrcweir         sal_Bool bValid, bReadonly;
425cdf0e10cSrcweir         getFlags(_rSet, bValid, bReadonly);
426cdf0e10cSrcweir 
427cdf0e10cSrcweir         // collect the items
428cdf0e10cSrcweir         SFX_ITEMSET_GET(_rSet, pAutoIncrementItem, SfxStringItem, DSID_AUTOINCREMENTVALUE, sal_True);
429cdf0e10cSrcweir         SFX_ITEMSET_GET(_rSet, pAutoRetrieveValueItem, SfxStringItem, DSID_AUTORETRIEVEVALUE, sal_True);
430cdf0e10cSrcweir         SFX_ITEMSET_GET(_rSet, pAutoRetrieveEnabledItem, SfxBoolItem, DSID_AUTORETRIEVEENABLED, sal_True);
431cdf0e10cSrcweir 
432cdf0e10cSrcweir         // forward the values to the controls
433cdf0e10cSrcweir         if (bValid)
434cdf0e10cSrcweir         {
435cdf0e10cSrcweir             sal_Bool bEnabled = pAutoRetrieveEnabledItem->GetValue();
436cdf0e10cSrcweir             m_aAutoRetrievingEnabled.Check( bEnabled );
437cdf0e10cSrcweir 
438cdf0e10cSrcweir             m_aAutoIncrement.SetText( pAutoIncrementItem->GetValue() );
439cdf0e10cSrcweir             m_aAutoIncrement.ClearModifyFlag();
440cdf0e10cSrcweir             m_aAutoRetrieving.SetText( pAutoRetrieveValueItem->GetValue() );
441cdf0e10cSrcweir             m_aAutoRetrieving.ClearModifyFlag();
442cdf0e10cSrcweir         }
443cdf0e10cSrcweir         OGenericAdministrationPage::implInitControls( _rSet, _bSaveValue );
444cdf0e10cSrcweir     }
445cdf0e10cSrcweir 
446cdf0e10cSrcweir     // -----------------------------------------------------------------------
FillItemSet(SfxItemSet & _rSet)447cdf0e10cSrcweir     sal_Bool GeneratedValuesPage::FillItemSet(SfxItemSet& _rSet)
448cdf0e10cSrcweir     {
449cdf0e10cSrcweir         sal_Bool bChangedSomething = sal_False;
450cdf0e10cSrcweir 
451cdf0e10cSrcweir         fillString( _rSet, &m_aAutoIncrement, DSID_AUTOINCREMENTVALUE, bChangedSomething );
452cdf0e10cSrcweir         fillBool( _rSet, &m_aAutoRetrievingEnabled, DSID_AUTORETRIEVEENABLED, bChangedSomething );
453cdf0e10cSrcweir         fillString( _rSet, &m_aAutoRetrieving, DSID_AUTORETRIEVEVALUE, bChangedSomething );
454cdf0e10cSrcweir 
455cdf0e10cSrcweir         return bChangedSomething;
456cdf0e10cSrcweir     }
457cdf0e10cSrcweir 
458cdf0e10cSrcweir     //========================================================================
459cdf0e10cSrcweir     //= AdvancedSettingsDialog
460cdf0e10cSrcweir     //========================================================================
461cdf0e10cSrcweir     //------------------------------------------------------------------------
AdvancedSettingsDialog(Window * _pParent,SfxItemSet * _pItems,const Reference<XMultiServiceFactory> & _rxORB,const Any & _aDataSourceName)462cdf0e10cSrcweir     AdvancedSettingsDialog::AdvancedSettingsDialog( Window* _pParent, SfxItemSet* _pItems,
463cdf0e10cSrcweir         const Reference< XMultiServiceFactory >& _rxORB, const Any& _aDataSourceName )
464cdf0e10cSrcweir         :SfxTabDialog(_pParent, ModuleRes(DLG_DATABASE_ADVANCED), _pItems)
465cdf0e10cSrcweir         ,m_pItemSet(_pItems)
466cdf0e10cSrcweir     {
467cdf0e10cSrcweir         m_pImpl = ::std::auto_ptr<ODbDataSourceAdministrationHelper>(new ODbDataSourceAdministrationHelper(_rxORB,_pParent,this));
468cdf0e10cSrcweir         m_pImpl->setDataSourceOrName(_aDataSourceName);
469cdf0e10cSrcweir         Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
470cdf0e10cSrcweir         m_pImpl->translateProperties(xDatasource, *_pItems);
471cdf0e10cSrcweir         SetInputSet(_pItems);
472cdf0e10cSrcweir         // propagate this set as our new input set and reset the example set
473cdf0e10cSrcweir         delete pExampleSet;
474cdf0e10cSrcweir         pExampleSet = new SfxItemSet(*GetInputSetImpl());
475cdf0e10cSrcweir 
476cdf0e10cSrcweir         const ::rtl::OUString eType = m_pImpl->getDatasourceType(*_pItems);
477cdf0e10cSrcweir 
478cdf0e10cSrcweir         DataSourceMetaData aMeta( eType );
479cdf0e10cSrcweir         const FeatureSet& rFeatures( aMeta.getFeatureSet() );
480cdf0e10cSrcweir 
481cdf0e10cSrcweir         // auto-generated values?
482cdf0e10cSrcweir         if ( rFeatures.supportsGeneratedValues() )
483cdf0e10cSrcweir             AddTabPage( PAGE_GENERATED_VALUES, String( ModuleRes( STR_GENERATED_VALUE ) ), ODriversSettings::CreateGeneratedValuesPage, NULL );
484cdf0e10cSrcweir 
485cdf0e10cSrcweir         // any "special settings"?
486cdf0e10cSrcweir         if ( rFeatures.supportsAnySpecialSetting() )
487cdf0e10cSrcweir             AddTabPage( PAGE_ADVANCED_SETTINGS_SPECIAL, String( ModuleRes( STR_DS_BEHAVIOUR ) ), ODriversSettings::CreateSpecialSettingsPage, NULL );
488cdf0e10cSrcweir 
489cdf0e10cSrcweir         // remove the reset button - it's meaning is much too ambiguous in this dialog
490cdf0e10cSrcweir         RemoveResetButton();
491cdf0e10cSrcweir         FreeResource();
492cdf0e10cSrcweir     }
493cdf0e10cSrcweir 
494cdf0e10cSrcweir     // -----------------------------------------------------------------------
~AdvancedSettingsDialog()495cdf0e10cSrcweir     AdvancedSettingsDialog::~AdvancedSettingsDialog()
496cdf0e10cSrcweir     {
497cdf0e10cSrcweir         SetInputSet(NULL);
498cdf0e10cSrcweir         DELETEZ(pExampleSet);
499cdf0e10cSrcweir     }
500cdf0e10cSrcweir 
501cdf0e10cSrcweir     // -----------------------------------------------------------------------
doesHaveAnyAdvancedSettings(const::rtl::OUString & _sURL)502cdf0e10cSrcweir     bool AdvancedSettingsDialog::doesHaveAnyAdvancedSettings( const ::rtl::OUString& _sURL )
503cdf0e10cSrcweir     {
504cdf0e10cSrcweir         DataSourceMetaData aMeta( _sURL );
505cdf0e10cSrcweir         const FeatureSet& rFeatures( aMeta.getFeatureSet() );
506cdf0e10cSrcweir         if ( rFeatures.supportsGeneratedValues() || rFeatures.supportsAnySpecialSetting() )
507cdf0e10cSrcweir             return true;
508cdf0e10cSrcweir         return false;
509cdf0e10cSrcweir     }
510cdf0e10cSrcweir 
511cdf0e10cSrcweir     // -----------------------------------------------------------------------
Execute()512cdf0e10cSrcweir     short AdvancedSettingsDialog::Execute()
513cdf0e10cSrcweir     {
514cdf0e10cSrcweir         short nRet = SfxTabDialog::Execute();
515cdf0e10cSrcweir         if ( nRet == RET_OK )
516cdf0e10cSrcweir         {
517cdf0e10cSrcweir             pExampleSet->Put(*GetOutputItemSet());
518cdf0e10cSrcweir             m_pImpl->saveChanges(*pExampleSet);
519cdf0e10cSrcweir         }
520cdf0e10cSrcweir         return nRet;
521cdf0e10cSrcweir     }
522cdf0e10cSrcweir 
523cdf0e10cSrcweir     //-------------------------------------------------------------------------
PageCreated(sal_uInt16 _nId,SfxTabPage & _rPage)524cdf0e10cSrcweir     void AdvancedSettingsDialog::PageCreated(sal_uInt16 _nId, SfxTabPage& _rPage)
525cdf0e10cSrcweir     {
526cdf0e10cSrcweir         // register ourself as modified listener
527cdf0e10cSrcweir         static_cast<OGenericAdministrationPage&>(_rPage).SetServiceFactory(m_pImpl->getORB());
528cdf0e10cSrcweir         static_cast<OGenericAdministrationPage&>(_rPage).SetAdminDialog(this,this);
529cdf0e10cSrcweir 
530cdf0e10cSrcweir         AdjustLayout();
531cdf0e10cSrcweir         Window *pWin = GetViewWindow();
532cdf0e10cSrcweir         if(pWin)
533cdf0e10cSrcweir             pWin->Invalidate();
534cdf0e10cSrcweir 
535cdf0e10cSrcweir         SfxTabDialog::PageCreated(_nId, _rPage);
536cdf0e10cSrcweir     }
537cdf0e10cSrcweir 
538cdf0e10cSrcweir     // -----------------------------------------------------------------------------
getOutputSet() const539cdf0e10cSrcweir     const SfxItemSet* AdvancedSettingsDialog::getOutputSet() const
540cdf0e10cSrcweir     {
541cdf0e10cSrcweir         return pExampleSet;
542cdf0e10cSrcweir     }
543cdf0e10cSrcweir 
544cdf0e10cSrcweir     // -----------------------------------------------------------------------------
getWriteOutputSet()545cdf0e10cSrcweir     SfxItemSet* AdvancedSettingsDialog::getWriteOutputSet()
546cdf0e10cSrcweir     {
547cdf0e10cSrcweir         return pExampleSet;
548cdf0e10cSrcweir     }
549cdf0e10cSrcweir 
550cdf0e10cSrcweir     // -----------------------------------------------------------------------------
createConnection()551cdf0e10cSrcweir     ::std::pair< Reference< XConnection >, sal_Bool > AdvancedSettingsDialog::createConnection()
552cdf0e10cSrcweir     {
553cdf0e10cSrcweir         return m_pImpl->createConnection();
554cdf0e10cSrcweir     }
555cdf0e10cSrcweir 
556cdf0e10cSrcweir     // -----------------------------------------------------------------------------
getORB() const557cdf0e10cSrcweir     Reference< XMultiServiceFactory > AdvancedSettingsDialog::getORB() const
558cdf0e10cSrcweir     {
559cdf0e10cSrcweir         return m_pImpl->getORB();
560cdf0e10cSrcweir     }
561cdf0e10cSrcweir 
562cdf0e10cSrcweir     // -----------------------------------------------------------------------------
getDriver()563cdf0e10cSrcweir     Reference< XDriver > AdvancedSettingsDialog::getDriver()
564cdf0e10cSrcweir     {
565cdf0e10cSrcweir         return m_pImpl->getDriver();
566cdf0e10cSrcweir     }
567cdf0e10cSrcweir 
568cdf0e10cSrcweir     // -----------------------------------------------------------------------------
getDatasourceType(const SfxItemSet & _rSet) const569cdf0e10cSrcweir     ::rtl::OUString AdvancedSettingsDialog::getDatasourceType(const SfxItemSet& _rSet) const
570cdf0e10cSrcweir     {
571cdf0e10cSrcweir         return m_pImpl->getDatasourceType(_rSet);
572cdf0e10cSrcweir     }
573cdf0e10cSrcweir 
574cdf0e10cSrcweir     // -----------------------------------------------------------------------------
clearPassword()575cdf0e10cSrcweir     void AdvancedSettingsDialog::clearPassword()
576cdf0e10cSrcweir     {
577cdf0e10cSrcweir         m_pImpl->clearPassword();
578cdf0e10cSrcweir     }
579cdf0e10cSrcweir 
580cdf0e10cSrcweir     // -----------------------------------------------------------------------------
setTitle(const::rtl::OUString & _sTitle)581cdf0e10cSrcweir     void AdvancedSettingsDialog::setTitle(const ::rtl::OUString& _sTitle)
582cdf0e10cSrcweir     {
583cdf0e10cSrcweir         SetText(_sTitle);
584cdf0e10cSrcweir     }
585cdf0e10cSrcweir 
586cdf0e10cSrcweir     //-------------------------------------------------------------------------
enableConfirmSettings(bool _bEnable)587cdf0e10cSrcweir     void AdvancedSettingsDialog::enableConfirmSettings( bool _bEnable )
588cdf0e10cSrcweir     {
589cdf0e10cSrcweir         (void)_bEnable;
590cdf0e10cSrcweir     }
591cdf0e10cSrcweir 
592cdf0e10cSrcweir     //-------------------------------------------------------------------------
saveDatasource()593cdf0e10cSrcweir     sal_Bool AdvancedSettingsDialog::saveDatasource()
594cdf0e10cSrcweir     {
595cdf0e10cSrcweir         return PrepareLeaveCurrentPage();
596cdf0e10cSrcweir     }
597cdf0e10cSrcweir 
598cdf0e10cSrcweir //........................................................................
599cdf0e10cSrcweir } // namespace dbaui
600cdf0e10cSrcweir //........................................................................
601