diff options
Diffstat (limited to 'dbaccess/source/ui/dlg/advancedsettings.cxx')
-rw-r--r-- | dbaccess/source/ui/dlg/advancedsettings.cxx | 565 |
1 files changed, 565 insertions, 0 deletions
diff --git a/dbaccess/source/ui/dlg/advancedsettings.cxx b/dbaccess/source/ui/dlg/advancedsettings.cxx new file mode 100644 index 000000000000..a2e82e50757d --- /dev/null +++ b/dbaccess/source/ui/dlg/advancedsettings.cxx @@ -0,0 +1,565 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_dbaccess.hxx" + +#include "advancedsettings.hxx" +#include "advancedsettingsdlg.hxx" +#include "moduledbu.hxx" +#include "dsitems.hxx" +#include "DbAdminImpl.hxx" +#include "DriverSettings.hxx" +#include "optionalboolitem.hxx" +#include "dbu_resource.hrc" +#include "dbu_dlg.hrc" +#include "dbadmin.hrc" +#include "advancedsettings.hrc" + +/** === begin UNO includes === **/ +/** === end UNO includes === **/ + +#include <svl/eitem.hxx> +#include <svl/intitem.hxx> +#include <svl/stritem.hxx> + +#include <vcl/msgbox.hxx> + +//........................................................................ +namespace dbaui +{ +//........................................................................ + + /** === begin UNO using === **/ + using ::com::sun::star::uno::Reference; + using ::com::sun::star::lang::XMultiServiceFactory; + using ::com::sun::star::uno::Any; + using ::com::sun::star::beans::XPropertySet; + using ::com::sun::star::sdbc::XConnection; + using ::com::sun::star::sdbc::XDriver; + /** === end UNO using === **/ + + //======================================================================== + //= SpecialSettingsPage + //======================================================================== + struct BooleanSettingDesc + { + CheckBox** ppControl; // the dialog's control which displays this setting + USHORT nControlResId; // the resource ID to load the control from + USHORT nItemId; // the ID of the item (in an SfxItemSet) which corresponds to this setting + bool bInvertedDisplay; // true if and only if the checkbox is checked when the item is FALSE, and vice versa + }; + + //======================================================================== + //= SpecialSettingsPage + //======================================================================== + SpecialSettingsPage::SpecialSettingsPage( Window* pParent, const SfxItemSet& _rCoreAttrs, const DataSourceMetaData& _rDSMeta ) + :OGenericAdministrationPage( pParent, ModuleRes( PAGE_ADVANCED_SETTINGS_SPECIAL ), _rCoreAttrs ) + ,m_aTopLine( this, ModuleRes( FL_DATAHANDLING ) ) + ,m_pIsSQL92Check( NULL ) + ,m_pAppendTableAlias( NULL ) + ,m_pAsBeforeCorrelationName( NULL ) + ,m_pEnableOuterJoin( NULL ) + ,m_pIgnoreDriverPrivileges( NULL ) + ,m_pParameterSubstitution( NULL ) + ,m_pSuppressVersionColumn( NULL ) + ,m_pCatalog( NULL ) + ,m_pSchema( NULL ) + ,m_pIndexAppendix( NULL ) + ,m_pDosLineEnds( NULL ) + ,m_pCheckRequiredFields( NULL ) + ,m_pIgnoreCurrency(NULL) + ,m_pEscapeDateTime(NULL) + ,m_pPrimaryKeySupport(NULL) + ,m_pBooleanComparisonModeLabel( NULL ) + ,m_pBooleanComparisonMode( NULL ) + ,m_aControlDependencies() + ,m_aBooleanSettings() + ,m_bHasBooleanComparisonMode( _rDSMeta.getFeatureSet().has( DSID_BOOLEANCOMPARISON ) ) + { + impl_initBooleanSettings(); + + const FeatureSet& rFeatures( _rDSMeta.getFeatureSet() ); + // create all the check boxes for the boolean settings + for ( BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin(); + setting != m_aBooleanSettings.end(); + ++setting + ) + { + USHORT nItemId = setting->nItemId; + if ( rFeatures.has( nItemId ) ) + { + USHORT nResourceId = setting->nControlResId; + (*setting->ppControl) = new CheckBox( this, ModuleRes( nResourceId ) ); + (*setting->ppControl)->SetClickHdl( getControlModifiedLink() ); + + // check whether this must be a tristate check box + const SfxPoolItem& rItem = _rCoreAttrs.Get( nItemId ); + if ( rItem.ISA( OptionalBoolItem ) ) + (*setting->ppControl)->EnableTriState( TRUE ); + } + } + + if ( m_pAsBeforeCorrelationName && m_pAppendTableAlias ) + // make m_pAsBeforeCorrelationName depend on m_pAppendTableAlias + m_aControlDependencies.enableOnCheckMark( *m_pAppendTableAlias, *m_pAsBeforeCorrelationName ); + + // move the controls to the appropriate positions + Point aPos( m_aTopLine.GetPosPixel() ); + aPos.Move( 0, m_aTopLine.GetSizePixel().Height() ); + Size aFirstDistance( LogicToPixel( Size( INDENTED_X, RELATED_CONTROLS ), MAP_APPFONT ) ); + aPos.Move( aFirstDistance.Width(), aFirstDistance.Height() ); + + Size aUnrelatedControls( LogicToPixel( Size( RELATED_CONTROLS, RELATED_CONTROLS ), MAP_APPFONT ) ); + + for ( BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin(); + setting != m_aBooleanSettings.end(); + ++setting + ) + { + if ( !*setting->ppControl ) + continue; + + (*setting->ppControl)->SetPosPixel( aPos ); + aPos.Move( 0, (*setting->ppControl)->GetSizePixel().Height() ); + aPos.Move( 0, aUnrelatedControls.Height() ); + } + + // create the controls for the boolean comparison mode + if ( m_bHasBooleanComparisonMode ) + { + m_pBooleanComparisonModeLabel = new FixedText( this, ModuleRes( FT_BOOLEANCOMPARISON ) ); + m_pBooleanComparisonMode = new ListBox( this, ModuleRes( LB_BOOLEANCOMPARISON ) ); + m_pBooleanComparisonMode->SetDropDownLineCount( 4 ); + m_pBooleanComparisonMode->SetSelectHdl( getControlModifiedLink() ); + + Point aLabelPos( m_pBooleanComparisonModeLabel->GetPosPixel() ); + Point aControlPos( m_pBooleanComparisonMode->GetPosPixel() ); + long nMoveUp = aControlPos.Y() - aPos.Y(); + + m_pBooleanComparisonModeLabel->SetPosPixel( Point( aLabelPos.X(), aLabelPos.Y() - nMoveUp ) ); + m_pBooleanComparisonMode->SetPosPixel( Point( aControlPos.X(), aControlPos.Y() - nMoveUp ) ); + } + + FreeResource(); + } + + // ----------------------------------------------------------------------- + SpecialSettingsPage::~SpecialSettingsPage() + { + m_aControlDependencies.clear(); + + DELETEZ( m_pIsSQL92Check ); + DELETEZ( m_pAppendTableAlias ); + DELETEZ( m_pAsBeforeCorrelationName ); + DELETEZ( m_pParameterSubstitution ); + DELETEZ( m_pIgnoreDriverPrivileges ); + DELETEZ( m_pSuppressVersionColumn ); + DELETEZ( m_pEnableOuterJoin ); + DELETEZ( m_pCatalog ); + DELETEZ( m_pSchema ); + DELETEZ( m_pIndexAppendix ); + DELETEZ( m_pDosLineEnds ); + DELETEZ( m_pCheckRequiredFields ); + DELETEZ( m_pIgnoreCurrency ); + DELETEZ( m_pEscapeDateTime ); + DELETEZ( m_pPrimaryKeySupport ); + DELETEZ( m_pBooleanComparisonModeLabel ); + DELETEZ( m_pBooleanComparisonMode ); + } + + // ----------------------------------------------------------------------- + void SpecialSettingsPage::impl_initBooleanSettings() + { + OSL_PRECOND( m_aBooleanSettings.empty(), "SpecialSettingsPage::impl_initBooleanSettings: called twice!" ); + + // for easier maintainance, write the table in this form, then copy it to m_aBooleanSettings + BooleanSettingDesc aSettings[] = { + { &m_pIsSQL92Check, CB_SQL92CHECK, DSID_SQL92CHECK, false }, + { &m_pAppendTableAlias, CB_APPENDTABLEALIAS, DSID_APPEND_TABLE_ALIAS, false }, + { &m_pAsBeforeCorrelationName, CB_AS_BEFORE_CORR_NAME, DSID_AS_BEFORE_CORRNAME, false }, + { &m_pEnableOuterJoin, CB_ENABLEOUTERJOIN, DSID_ENABLEOUTERJOIN, false }, + { &m_pIgnoreDriverPrivileges, CB_IGNOREDRIVER_PRIV, DSID_IGNOREDRIVER_PRIV, false }, + { &m_pParameterSubstitution, CB_PARAMETERNAMESUBST, DSID_PARAMETERNAMESUBST, false }, + { &m_pSuppressVersionColumn, CB_SUPPRESVERSIONCL, DSID_SUPPRESSVERSIONCL, true }, + { &m_pCatalog, CB_CATALOG, DSID_CATALOG, false }, + { &m_pSchema, CB_SCHEMA, DSID_SCHEMA, false }, + { &m_pIndexAppendix, CB_IGNOREINDEXAPPENDIX, DSID_INDEXAPPENDIX, false }, + { &m_pDosLineEnds, CB_DOSLINEENDS, DSID_DOSLINEENDS, false }, + { &m_pCheckRequiredFields, CB_CHECK_REQUIRED, DSID_CHECK_REQUIRED_FIELDS, false }, + { &m_pIgnoreCurrency, CB_IGNORECURRENCY, DSID_IGNORECURRENCY, false }, + { &m_pEscapeDateTime, CB_ESCAPE_DATETIME, DSID_ESCAPE_DATETIME, false }, + { &m_pPrimaryKeySupport, CB_PRIMARY_KEY_SUPPORT, DSID_PRIMARY_KEY_SUPPORT, false }, + { NULL, 0, 0, false } + }; + + for ( const BooleanSettingDesc* pCopy = aSettings; pCopy->nItemId != 0; ++pCopy ) + { + m_aBooleanSettings.push_back( *pCopy ); + } + } + + // ----------------------------------------------------------------------- + void SpecialSettingsPage::fillWindows( ::std::vector< ISaveValueWrapper* >& _rControlList ) + { + if ( m_bHasBooleanComparisonMode ) + { + _rControlList.push_back( new ODisableWrapper< FixedText >( m_pBooleanComparisonModeLabel ) ); + } + } + + // ----------------------------------------------------------------------- + void SpecialSettingsPage::fillControls(::std::vector< ISaveValueWrapper* >& _rControlList) + { + for ( BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin(); + setting != m_aBooleanSettings.end(); + ++setting + ) + { + if ( *setting->ppControl ) + { + _rControlList.push_back( new OSaveValueWrapper< CheckBox >( *setting->ppControl ) ); + } + } + + if ( m_bHasBooleanComparisonMode ) + _rControlList.push_back( new OSaveValueWrapper< ListBox >( m_pBooleanComparisonMode ) ); + } + + // ----------------------------------------------------------------------- + void SpecialSettingsPage::implInitControls(const SfxItemSet& _rSet, sal_Bool _bSaveValue) + { + // check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa) + sal_Bool bValid, bReadonly; + getFlags( _rSet, bValid, bReadonly ); + + if ( !bValid ) + { + OGenericAdministrationPage::implInitControls(_rSet, _bSaveValue); + return; + } + + // the boolean items + for ( BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin(); + setting != m_aBooleanSettings.end(); + ++setting + ) + { + if ( !*setting->ppControl ) + continue; + + ::boost::optional< bool > aValue; + + SFX_ITEMSET_GET( _rSet, pItem, SfxPoolItem, setting->nItemId, sal_True ); + if ( pItem->ISA( SfxBoolItem ) ) + { + aValue.reset( PTR_CAST( SfxBoolItem, pItem )->GetValue() ); + } + else if ( pItem->ISA( OptionalBoolItem ) ) + { + aValue = PTR_CAST( OptionalBoolItem, pItem )->GetFullValue(); + } + else + DBG_ERROR( "SpecialSettingsPage::implInitControls: unknown boolean item type!" ); + + if ( !aValue ) + { + (*setting->ppControl)->SetState( STATE_DONTKNOW ); + } + else + { + BOOL bValue = *aValue; + if ( setting->bInvertedDisplay ) + bValue = !bValue; + (*setting->ppControl)->Check( bValue ); + } + } + + // the non-boolean items + if ( m_bHasBooleanComparisonMode ) + { + SFX_ITEMSET_GET( _rSet, pBooleanComparison, SfxInt32Item, DSID_BOOLEANCOMPARISON, sal_True ); + m_pBooleanComparisonMode->SelectEntryPos( static_cast< USHORT >( pBooleanComparison->GetValue() ) ); + } + + OGenericAdministrationPage::implInitControls(_rSet, _bSaveValue); + } + + // ----------------------------------------------------------------------- + sal_Bool SpecialSettingsPage::FillItemSet( SfxItemSet& _rSet ) + { + sal_Bool bChangedSomething = sal_False; + + // the boolean items + for ( BooleanSettingDescs::const_iterator setting = m_aBooleanSettings.begin(); + setting != m_aBooleanSettings.end(); + ++setting + ) + { + if ( !*setting->ppControl ) + continue; + fillBool( _rSet, *setting->ppControl, setting->nItemId, bChangedSomething, setting->bInvertedDisplay ); + } + + // the non-boolean items + if ( m_bHasBooleanComparisonMode ) + { + if ( m_pBooleanComparisonMode->GetSelectEntryPos() != m_pBooleanComparisonMode->GetSavedValue() ) + { + _rSet.Put( SfxInt32Item( DSID_BOOLEANCOMPARISON, m_pBooleanComparisonMode->GetSelectEntryPos() ) ); + bChangedSomething = sal_True; + } + } + return bChangedSomething; + } + + //======================================================================== + //= GeneratedValuesPage + //======================================================================== + //------------------------------------------------------------------------ + GeneratedValuesPage::GeneratedValuesPage( Window* pParent, const SfxItemSet& _rCoreAttrs ) + :OGenericAdministrationPage(pParent, ModuleRes( PAGE_GENERATED_VALUES ), _rCoreAttrs) + ,m_aAutoFixedLine ( this, ModuleRes( FL_SEPARATORAUTO ) ) + ,m_aAutoRetrievingEnabled( this, ModuleRes( CB_RETRIEVE_AUTO ) ) + ,m_aAutoIncrementLabel ( this, ModuleRes( FT_AUTOINCREMENTVALUE ) ) + ,m_aAutoIncrement ( this, ModuleRes( ET_AUTOINCREMENTVALUE ) ) + ,m_aAutoRetrievingLabel ( this, ModuleRes( FT_RETRIEVE_AUTO ) ) + ,m_aAutoRetrieving ( this, ModuleRes( ET_RETRIEVE_AUTO ) ) + { + m_aAutoRetrievingEnabled.SetClickHdl( getControlModifiedLink() ); + m_aAutoIncrement.SetModifyHdl( getControlModifiedLink() ); + m_aAutoRetrieving.SetModifyHdl( getControlModifiedLink() ); + + m_aControlDependencies.enableOnCheckMark( m_aAutoRetrievingEnabled, + m_aAutoIncrementLabel, m_aAutoIncrement, m_aAutoRetrievingLabel, m_aAutoRetrieving ); + + FreeResource(); + } + + // ----------------------------------------------------------------------- + GeneratedValuesPage::~GeneratedValuesPage() + { + m_aControlDependencies.clear(); + } + + // ----------------------------------------------------------------------- + void GeneratedValuesPage::fillWindows( ::std::vector< ISaveValueWrapper* >& _rControlList ) + { + _rControlList.push_back( new ODisableWrapper< FixedLine >( &m_aAutoFixedLine ) ); + _rControlList.push_back( new ODisableWrapper< FixedText >( &m_aAutoIncrementLabel ) ); + _rControlList.push_back( new ODisableWrapper< FixedText >( &m_aAutoRetrievingLabel ) ); + } + + // ----------------------------------------------------------------------- + void GeneratedValuesPage::fillControls( ::std::vector< ISaveValueWrapper* >& _rControlList ) + { + _rControlList.push_back( new OSaveValueWrapper< CheckBox >( &m_aAutoRetrievingEnabled ) ); + _rControlList.push_back( new OSaveValueWrapper< Edit >( &m_aAutoIncrement ) ); + _rControlList.push_back( new OSaveValueWrapper< Edit >( &m_aAutoRetrieving ) ); + } + + // ----------------------------------------------------------------------- + void GeneratedValuesPage::implInitControls( const SfxItemSet& _rSet, sal_Bool _bSaveValue ) + { + // check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa) + sal_Bool bValid, bReadonly; + getFlags(_rSet, bValid, bReadonly); + + // collect the items + SFX_ITEMSET_GET(_rSet, pAutoIncrementItem, SfxStringItem, DSID_AUTOINCREMENTVALUE, sal_True); + SFX_ITEMSET_GET(_rSet, pAutoRetrieveValueItem, SfxStringItem, DSID_AUTORETRIEVEVALUE, sal_True); + SFX_ITEMSET_GET(_rSet, pAutoRetrieveEnabledItem, SfxBoolItem, DSID_AUTORETRIEVEENABLED, sal_True); + + // forward the values to the controls + if (bValid) + { + sal_Bool bEnabled = pAutoRetrieveEnabledItem->GetValue(); + m_aAutoRetrievingEnabled.Check( bEnabled ); + + m_aAutoIncrement.SetText( pAutoIncrementItem->GetValue() ); + m_aAutoIncrement.ClearModifyFlag(); + m_aAutoRetrieving.SetText( pAutoRetrieveValueItem->GetValue() ); + m_aAutoRetrieving.ClearModifyFlag(); + } + OGenericAdministrationPage::implInitControls( _rSet, _bSaveValue ); + } + + // ----------------------------------------------------------------------- + sal_Bool GeneratedValuesPage::FillItemSet(SfxItemSet& _rSet) + { + sal_Bool bChangedSomething = sal_False; + + fillString( _rSet, &m_aAutoIncrement, DSID_AUTOINCREMENTVALUE, bChangedSomething ); + fillBool( _rSet, &m_aAutoRetrievingEnabled, DSID_AUTORETRIEVEENABLED, bChangedSomething ); + fillString( _rSet, &m_aAutoRetrieving, DSID_AUTORETRIEVEVALUE, bChangedSomething ); + + return bChangedSomething; + } + + //======================================================================== + //= AdvancedSettingsDialog + //======================================================================== + //------------------------------------------------------------------------ + AdvancedSettingsDialog::AdvancedSettingsDialog( Window* _pParent, SfxItemSet* _pItems, + const Reference< XMultiServiceFactory >& _rxORB, const Any& _aDataSourceName ) + :SfxTabDialog(_pParent, ModuleRes(DLG_DATABASE_ADVANCED), _pItems) + ,m_pItemSet(_pItems) + { + m_pImpl = ::std::auto_ptr<ODbDataSourceAdministrationHelper>(new ODbDataSourceAdministrationHelper(_rxORB,_pParent,this)); + m_pImpl->setDataSourceOrName(_aDataSourceName); + Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource(); + m_pImpl->translateProperties(xDatasource, *_pItems); + SetInputSet(_pItems); + // propagate this set as our new input set and reset the example set + delete pExampleSet; + pExampleSet = new SfxItemSet(*GetInputSetImpl()); + + const ::rtl::OUString eType = m_pImpl->getDatasourceType(*_pItems); + + DataSourceMetaData aMeta( eType ); + const FeatureSet& rFeatures( aMeta.getFeatureSet() ); + + // auto-generated values? + if ( rFeatures.supportsGeneratedValues() ) + AddTabPage( PAGE_GENERATED_VALUES, String( ModuleRes( STR_GENERATED_VALUE ) ), ODriversSettings::CreateGeneratedValuesPage, NULL ); + + // any "special settings"? + if ( rFeatures.supportsAnySpecialSetting() ) + AddTabPage( PAGE_ADVANCED_SETTINGS_SPECIAL, String( ModuleRes( STR_DS_BEHAVIOUR ) ), ODriversSettings::CreateSpecialSettingsPage, NULL ); + + // remove the reset button - it's meaning is much too ambiguous in this dialog + RemoveResetButton(); + FreeResource(); + } + + // ----------------------------------------------------------------------- + AdvancedSettingsDialog::~AdvancedSettingsDialog() + { + SetInputSet(NULL); + DELETEZ(pExampleSet); + } + + // ----------------------------------------------------------------------- + bool AdvancedSettingsDialog::doesHaveAnyAdvancedSettings( const ::rtl::OUString& _sURL ) + { + DataSourceMetaData aMeta( _sURL ); + const FeatureSet& rFeatures( aMeta.getFeatureSet() ); + if ( rFeatures.supportsGeneratedValues() || rFeatures.supportsAnySpecialSetting() ) + return true; + return false; + } + + // ----------------------------------------------------------------------- + short AdvancedSettingsDialog::Execute() + { + short nRet = SfxTabDialog::Execute(); + if ( nRet == RET_OK ) + { + pExampleSet->Put(*GetOutputItemSet()); + m_pImpl->saveChanges(*pExampleSet); + } + return nRet; + } + + //------------------------------------------------------------------------- + void AdvancedSettingsDialog::PageCreated(USHORT _nId, SfxTabPage& _rPage) + { + // register ourself as modified listener + static_cast<OGenericAdministrationPage&>(_rPage).SetServiceFactory(m_pImpl->getORB()); + static_cast<OGenericAdministrationPage&>(_rPage).SetAdminDialog(this,this); + + AdjustLayout(); + Window *pWin = GetViewWindow(); + if(pWin) + pWin->Invalidate(); + + SfxTabDialog::PageCreated(_nId, _rPage); + } + + // ----------------------------------------------------------------------------- + const SfxItemSet* AdvancedSettingsDialog::getOutputSet() const + { + return pExampleSet; + } + + // ----------------------------------------------------------------------------- + SfxItemSet* AdvancedSettingsDialog::getWriteOutputSet() + { + return pExampleSet; + } + + // ----------------------------------------------------------------------------- + ::std::pair< Reference< XConnection >, sal_Bool > AdvancedSettingsDialog::createConnection() + { + return m_pImpl->createConnection(); + } + + // ----------------------------------------------------------------------------- + Reference< XMultiServiceFactory > AdvancedSettingsDialog::getORB() const + { + return m_pImpl->getORB(); + } + + // ----------------------------------------------------------------------------- + Reference< XDriver > AdvancedSettingsDialog::getDriver() + { + return m_pImpl->getDriver(); + } + + // ----------------------------------------------------------------------------- + ::rtl::OUString AdvancedSettingsDialog::getDatasourceType(const SfxItemSet& _rSet) const + { + return m_pImpl->getDatasourceType(_rSet); + } + + // ----------------------------------------------------------------------------- + void AdvancedSettingsDialog::clearPassword() + { + m_pImpl->clearPassword(); + } + + // ----------------------------------------------------------------------------- + void AdvancedSettingsDialog::setTitle(const ::rtl::OUString& _sTitle) + { + SetText(_sTitle); + } + + //------------------------------------------------------------------------- + void AdvancedSettingsDialog::enableConfirmSettings( bool _bEnable ) + { + (void)_bEnable; + } + + //------------------------------------------------------------------------- + sal_Bool AdvancedSettingsDialog::saveDatasource() + { + return PrepareLeaveCurrentPage(); + } + +//........................................................................ +} // namespace dbaui +//........................................................................ |