| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_extensions.hxx" |
| #include "abpfinalpage.hxx" |
| #include "addresssettings.hxx" |
| #include "abspilot.hxx" |
| #include <tools/debug.hxx> |
| #include <tools/urlobj.hxx> |
| #include <unotools/ucbhelper.hxx> |
| #include <sfx2/filedlghelper.hxx> |
| #include <unotools/pathoptions.hxx> |
| #ifndef SVTOOLS_FILENOTATION_HXX_ |
| #include <svl/filenotation.hxx> |
| #endif |
| #include <sfx2/docfilt.hxx> |
| #include <vcl/msgbox.hxx> |
| #include <comphelper/componentcontext.hxx> |
| #include <com/sun/star/ui/dialogs/TemplateDescription.hpp> |
| |
| //......................................................................... |
| namespace abp |
| { |
| //......................................................................... |
| using namespace ::svt; |
| using namespace ::utl; |
| |
| const SfxFilter* lcl_getBaseFilter() |
| { |
| static const String s_sDatabaseType = String::CreateFromAscii("StarOffice XML (Base)"); |
| const SfxFilter* pFilter = SfxFilter::GetFilterByName( s_sDatabaseType); |
| OSL_ENSURE(pFilter,"Filter: StarOffice XML (Base) could not be found!"); |
| return pFilter; |
| } |
| //===================================================================== |
| //= FinalPage |
| //===================================================================== |
| //--------------------------------------------------------------------- |
| FinalPage::FinalPage( OAddessBookSourcePilot* _pParent ) |
| :AddressBookSourcePage(_pParent, ModuleRes(RID_PAGE_FINAL)) |
| ,m_aExplanation ( this, ModuleRes( FT_FINISH_EXPL ) ) |
| ,m_aLocationLabel ( this, ModuleRes( FT_LOCATION ) ) |
| ,m_aLocation ( this, ModuleRes( CBB_LOCATION ) ) |
| ,m_aBrowse ( this, ModuleRes( PB_BROWSE ) ) |
| ,m_aRegisterName ( this, ModuleRes( CB_REGISTER_DS ) ) |
| ,m_aNameLabel ( this, ModuleRes( FT_NAME_EXPL ) ) |
| ,m_aName ( this, ModuleRes( ET_DATASOURCENAME ) ) |
| ,m_aDuplicateNameError ( this, ModuleRes( FT_DUPLICATENAME ) ) |
| ,m_aLocationController( ::comphelper::ComponentContext( _pParent->getORB() ), m_aLocation, m_aBrowse ) |
| { |
| FreeResource(); |
| |
| m_aName.SetModifyHdl( LINK(this, FinalPage, OnNameModified) ); |
| m_aLocation.SetModifyHdl( LINK(this, FinalPage, OnNameModified) ); |
| m_aRegisterName.SetClickHdl( LINK( this, FinalPage, OnRegister ) ); |
| m_aRegisterName.Check(sal_True); |
| } |
| |
| //--------------------------------------------------------------------- |
| sal_Bool FinalPage::isValidName() const |
| { |
| ::rtl::OUString sCurrentName(m_aName.GetText()); |
| |
| if (0 == sCurrentName.getLength()) |
| // the name must not be empty |
| return sal_False; |
| |
| if ( m_aInvalidDataSourceNames.find( sCurrentName ) != m_aInvalidDataSourceNames.end() ) |
| // there already is a data source with this name |
| return sal_False; |
| |
| return sal_True; |
| } |
| |
| //--------------------------------------------------------------------- |
| void FinalPage::setFields() |
| { |
| AddressSettings& rSettings = getSettings(); |
| |
| INetURLObject aURL( rSettings.sDataSourceName ); |
| if( aURL.GetProtocol() == INET_PROT_NOT_VALID ) |
| { |
| String sPath = SvtPathOptions().GetWorkPath(); |
| sPath += '/'; |
| sPath += String(rSettings.sDataSourceName); |
| |
| const SfxFilter* pFilter = lcl_getBaseFilter(); |
| if ( pFilter ) |
| { |
| String sExt = pFilter->GetDefaultExtension(); |
| sPath += sExt.GetToken(1,'*'); |
| } |
| |
| aURL.SetURL(sPath); |
| } |
| OSL_ENSURE( aURL.GetProtocol() != INET_PROT_NOT_VALID ,"No valid file name!"); |
| rSettings.sDataSourceName = aURL.GetMainURL( INetURLObject::NO_DECODE ); |
| m_aLocationController.setURL( rSettings.sDataSourceName ); |
| String sName = aURL.getName( ); |
| xub_StrLen nPos = sName.Search(String(aURL.GetExtension())); |
| if ( nPos != STRING_NOTFOUND ) |
| { |
| sName.Erase(nPos-1,4); |
| } |
| m_aName.SetText(sName); |
| |
| OnRegister(&m_aRegisterName); |
| } |
| |
| //--------------------------------------------------------------------- |
| void FinalPage::initializePage() |
| { |
| AddressBookSourcePage::initializePage(); |
| |
| setFields(); |
| } |
| |
| //--------------------------------------------------------------------- |
| sal_Bool FinalPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason ) |
| { |
| if (!AddressBookSourcePage::commitPage(_eReason)) |
| return sal_False; |
| |
| if ( ( ::svt::WizardTypes::eTravelBackward != _eReason ) |
| && ( !m_aLocationController.prepareCommit() ) |
| ) |
| return sal_False; |
| |
| AddressSettings& rSettings = getSettings(); |
| rSettings.sDataSourceName = m_aLocationController.getURL(); |
| rSettings.bRegisterDataSource = m_aRegisterName.IsChecked(); |
| if ( rSettings.bRegisterDataSource ) |
| rSettings.sRegisteredDataSourceName = m_aName.GetText(); |
| |
| return sal_True; |
| } |
| |
| //--------------------------------------------------------------------- |
| void FinalPage::ActivatePage() |
| { |
| AddressBookSourcePage::ActivatePage(); |
| |
| // get the names of all data sources |
| ODataSourceContext aContext( getORB() ); |
| aContext.getDataSourceNames( m_aInvalidDataSourceNames ); |
| |
| // give the name edit the focus |
| m_aLocation.GrabFocus(); |
| |
| // default the finish button |
| getDialog()->defaultButton( WZB_FINISH ); |
| } |
| |
| //--------------------------------------------------------------------- |
| void FinalPage::DeactivatePage() |
| { |
| AddressBookSourcePage::DeactivatePage(); |
| |
| // default the "next" button, again |
| getDialog()->defaultButton( WZB_NEXT ); |
| // disable the finish button |
| getDialog()->enableButtons( WZB_FINISH, sal_False ); |
| } |
| |
| //--------------------------------------------------------------------- |
| bool FinalPage::canAdvance() const |
| { |
| return false; |
| } |
| |
| //--------------------------------------------------------------------- |
| void FinalPage::implCheckName() |
| { |
| sal_Bool bValidName = isValidName(); |
| sal_Bool bEmptyName = 0 == m_aName.GetText().Len(); |
| sal_Bool bEmptyLocation = 0 == m_aLocation.GetText().Len(); |
| |
| // enable or disable the finish button |
| getDialog()->enableButtons( WZB_FINISH, !bEmptyLocation && (!m_aRegisterName.IsChecked() || bValidName) ); |
| |
| // show the error message for an invalid name |
| m_aDuplicateNameError.Show( !bValidName && !bEmptyName ); |
| } |
| |
| //--------------------------------------------------------------------- |
| IMPL_LINK( FinalPage, OnNameModified, Edit*, /**/ ) |
| { |
| implCheckName(); |
| return 0L; |
| } |
| |
| // ----------------------------------------------------------------------------- |
| IMPL_LINK( FinalPage, OnRegister, CheckBox*, EMPTYARG ) |
| { |
| sal_Bool bEnable = m_aRegisterName.IsChecked(); |
| m_aNameLabel.Enable(bEnable); |
| m_aName.Enable(bEnable); |
| implCheckName(); |
| return 0L; |
| } |
| //......................................................................... |
| } // namespace abp |
| //......................................................................... |
| |