diff options
Diffstat (limited to 'svx/source/form/databaselocationinput.cxx')
-rw-r--r-- | svx/source/form/databaselocationinput.cxx | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/svx/source/form/databaselocationinput.cxx b/svx/source/form/databaselocationinput.cxx index 8b90fb2cd7d9..a7af41882767 100644 --- a/svx/source/form/databaselocationinput.cxx +++ b/svx/source/form/databaselocationinput.cxx @@ -247,222 +247,6 @@ namespace svx { return m_pImpl->getURL(); } - - class SvxDatabaseLocationInputController_Impl - { - public: - SvxDatabaseLocationInputController_Impl( - const Reference<XComponentContext>& _rContext, - ::svt::OFileURLControl& _rLocationInput, - PushButton& _rBrowseButton - ); - ~SvxDatabaseLocationInputController_Impl(); - - bool prepareCommit(); - void setURL( const OUString& _rURL ); - OUString getURL() const; - - private: - void impl_initFilterProperties_nothrow(); - void impl_onBrowseButtonClicked(); - OUString impl_getCurrentURL() const; - - DECL_LINK( OnControlAction, VclWindowEvent&, void ); - - private: - const Reference<XComponentContext> m_xContext; - ::svt::OFileURLControl& m_rLocationInput; - PushButton& m_rBrowseButton; - Sequence< OUString > m_aFilterExtensions; - OUString m_sFilterUIName; - bool m_bNeedExistenceCheck; - }; - - SvxDatabaseLocationInputController_Impl::SvxDatabaseLocationInputController_Impl(const Reference<XComponentContext>& _rContext, - ::svt::OFileURLControl& _rLocationInput, - PushButton& _rBrowseButton) - :m_xContext( _rContext ) - ,m_rLocationInput( _rLocationInput ) - ,m_rBrowseButton( _rBrowseButton ) - ,m_aFilterExtensions() - ,m_sFilterUIName() - ,m_bNeedExistenceCheck( true ) - { - impl_initFilterProperties_nothrow(); - - // forward the allowed extensions to the input control - OUStringBuffer aExtensionList; - for ( auto const & extension : std::as_const(m_aFilterExtensions) ) - { - aExtensionList.append( extension ); - aExtensionList.append( ';' ); - } - m_rLocationInput.SetFilter( aExtensionList.makeStringAndClear() ); - m_rBrowseButton.AddEventListener( LINK( this, SvxDatabaseLocationInputController_Impl, OnControlAction ) ); - m_rLocationInput.AddEventListener( LINK( this, SvxDatabaseLocationInputController_Impl, OnControlAction ) ); - } - - SvxDatabaseLocationInputController_Impl::~SvxDatabaseLocationInputController_Impl() - { - m_rBrowseButton.RemoveEventListener( LINK( this, SvxDatabaseLocationInputController_Impl, OnControlAction ) ); - m_rLocationInput.RemoveEventListener( LINK( this, SvxDatabaseLocationInputController_Impl, OnControlAction ) ); - } - - bool SvxDatabaseLocationInputController_Impl::prepareCommit() - { - OUString sURL( impl_getCurrentURL() ); - if ( sURL.isEmpty() ) - return false; - - // check if the name exists - if ( m_bNeedExistenceCheck ) - { - if ( ::utl::UCBContentHelper::Exists( sURL ) ) - { - std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(m_rLocationInput.GetFrameWeld(), - VclMessageType::Question, VclButtonsType::YesNo, - SvxResId(RID_STR_ALREADYEXISTOVERWRITE))); - if (xQueryBox->run() != RET_YES) - return false; - } - } - - return true; - } - - void SvxDatabaseLocationInputController_Impl::setURL( const OUString& _rURL ) - { - ::svt::OFileNotation aTransformer( _rURL ); - m_rLocationInput.SetText( aTransformer.get( ::svt::OFileNotation::N_SYSTEM ) ); - } - - OUString SvxDatabaseLocationInputController_Impl::getURL() const - { - return impl_getCurrentURL(); - } - - void SvxDatabaseLocationInputController_Impl::impl_initFilterProperties_nothrow() - { - try - { - // get the name of the default filter for database documents - ::utl::OConfigurationTreeRoot aConfig( - ::utl::OConfigurationTreeRoot::createWithComponentContext( - m_xContext, - "/org.openoffice.Setup/Office/Factories/com.sun.star.sdb.OfficeDatabaseDocument" - ) ); - OUString sDatabaseFilter; - OSL_VERIFY( aConfig.getNodeValue( "ooSetupFactoryActualFilter" ) >>= sDatabaseFilter ); - - // get the type this filter is responsible for - Reference< XNameAccess > xFilterFactory( - m_xContext->getServiceManager()->createInstanceWithContext("com.sun.star.document.FilterFactory", m_xContext), - UNO_QUERY_THROW ); - ::comphelper::NamedValueCollection aFilterProperties( xFilterFactory->getByName( sDatabaseFilter ) ); - OUString sDocumentType = aFilterProperties.getOrDefault( "Type", OUString() ); - - // get the extension(s) for this type - Reference< XNameAccess > xTypeDetection( - m_xContext->getServiceManager()->createInstanceWithContext("com.sun.star.document.TypeDetection", m_xContext), - UNO_QUERY_THROW ); - - ::comphelper::NamedValueCollection aTypeProperties( xTypeDetection->getByName( sDocumentType ) ); - m_aFilterExtensions = aTypeProperties.getOrDefault( "Extensions", m_aFilterExtensions ); - m_sFilterUIName = aTypeProperties.getOrDefault( "UIName", m_sFilterUIName ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION("svx"); - } - - // ensure we have at least one extension - OSL_ENSURE( m_aFilterExtensions.hasElements(), - "DatabaseLocationInputController_Impl::impl_initFilterProperties_nothrow: unable to determine the file extension(s)!" ); - if ( !m_aFilterExtensions.hasElements() ) - { - m_aFilterExtensions.realloc(1); - m_aFilterExtensions[0] = "*.odb"; - } - } - - IMPL_LINK( SvxDatabaseLocationInputController_Impl, OnControlAction, VclWindowEvent&, _rEvent, void ) - { - if ( ( _rEvent.GetWindow() == &m_rBrowseButton ) - && ( _rEvent.GetId() == VclEventId::ButtonClick ) - ) - { - impl_onBrowseButtonClicked(); - } - - if ( ( _rEvent.GetWindow() == &m_rLocationInput ) - && ( _rEvent.GetId() == VclEventId::EditModify ) - ) - { - m_bNeedExistenceCheck = true; - } - } - - OUString SvxDatabaseLocationInputController_Impl::impl_getCurrentURL() const - { - OUString sCurrentFile( m_rLocationInput.GetText() ); - if ( !sCurrentFile.isEmpty() ) - { - ::svt::OFileNotation aCurrentFile( sCurrentFile ); - sCurrentFile = aCurrentFile.get( ::svt::OFileNotation::N_URL ); - } - return sCurrentFile; - } - - void SvxDatabaseLocationInputController_Impl::impl_onBrowseButtonClicked() - { - ::sfx2::FileDialogHelper aFileDlg( - TemplateDescription::FILESAVE_AUTOEXTENSION, - FileDialogFlags::NONE, - m_rLocationInput.GetFrameWeld() - ); - aFileDlg.SetDisplayDirectory( impl_getCurrentURL() ); - - aFileDlg.AddFilter( m_sFilterUIName, "*." + m_aFilterExtensions[0] ); - aFileDlg.SetCurrentFilter( m_sFilterUIName ); - - if ( aFileDlg.Execute() == ERRCODE_NONE ) - { - INetURLObject aURL( aFileDlg.GetPath() ); - if( aURL.GetProtocol() != INetProtocol::NotValid ) - { - ::svt::OFileNotation aFileNotation( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); - m_rLocationInput.SetText( aFileNotation.get( ::svt::OFileNotation::N_SYSTEM ) ); - m_rLocationInput.GetModifyHdl().Call( m_rLocationInput ); - // the dialog already checked for the file's existence, so we don't need to, again - m_bNeedExistenceCheck = false; - } - } - } - SvxDatabaseLocationInputController::SvxDatabaseLocationInputController( const Reference<XComponentContext>& _rContext, - ::svt::OFileURLControl& _rLocationInput, PushButton& _rBrowseButton ) - :m_pImpl( new SvxDatabaseLocationInputController_Impl( _rContext, _rLocationInput, _rBrowseButton ) ) - { - } - - SvxDatabaseLocationInputController::~SvxDatabaseLocationInputController() - { - } - - bool SvxDatabaseLocationInputController::prepareCommit() - { - return m_pImpl->prepareCommit(); - } - - void SvxDatabaseLocationInputController::setURL( const OUString& _rURL ) - { - m_pImpl->setURL( _rURL ); - } - - OUString SvxDatabaseLocationInputController::getURL() const - { - return m_pImpl->getURL(); - } - } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |