diff options
author | RĂ¼diger Timm <rt@openoffice.org> | 2005-02-02 16:00:56 +0000 |
---|---|---|
committer | RĂ¼diger Timm <rt@openoffice.org> | 2005-02-02 16:00:56 +0000 |
commit | 40ddc363aa312d0c234bdf1403800cf1de58339d (patch) | |
tree | 39fb9e162686f5c7315136e4e0f04856fc46a509 /sfx2/source/doc/guisaveas.cxx | |
parent | 87d4a5571460aa322f9e9f45b251ad3abfd3d743 (diff) |
INTEGRATION: CWS alienwarning (1.10.4); FILE MERGED
2005/01/28 18:24:52 mba 1.10.4.2: #i41506#: improve treatment of alien warning
2005/01/28 09:29:30 mba 1.10.4.1: #i41506#: new option for alien warning
Diffstat (limited to 'sfx2/source/doc/guisaveas.cxx')
-rw-r--r-- | sfx2/source/doc/guisaveas.cxx | 105 |
1 files changed, 55 insertions, 50 deletions
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 28a8d1f56d..1744c2a22f 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -2,9 +2,9 @@ * * $RCSfile: guisaveas.cxx,v $ * - * $Revision: 1.11 $ + * $Revision: 1.12 $ * - * last change: $Author: rt $ $Date: 2005-01-31 08:44:42 $ + * last change: $Author: rt $ $Date: 2005-02-02 17:00:56 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -153,6 +153,7 @@ #include <objsh.hxx> #include <dinfdlg.hxx> #include <sfxtypes.hxx> +#include "alienwarn.hxx" #define DOCPROPSNUM 17 @@ -281,6 +282,7 @@ public: sal_Bool ExecuteFilterDialog_Impl( const ::rtl::OUString& aFilterName ); sal_Int8 CheckStateForSave(); + sal_Int8 CheckFilter( const ::rtl::OUString& ); sal_Bool CheckFilterOptionsDialogExistence(); @@ -618,12 +620,11 @@ sal_Int8 ModelData_Impl::CheckStateForSave() if ( GetMediaDescr().size() != aAcceptedArgs.size() ) GetMediaDescr() = aAcceptedArgs; - // the document must be modified if ( !GetModifiable()->isModified() && !bVersInfoNeedsStore ) return STATUS_NO_ACTION; - // if the document is readonly or a new one the saveAs operation must be used + // if the document is readonly or a new one a SaveAs operation must be used if ( !GetStorable()->hasLocation() || GetStorable()->isReadonly() ) return STATUS_SAVEAS; @@ -631,58 +632,57 @@ sal_Int8 ModelData_Impl::CheckStateForSave() ::rtl::OUString aOldFilterName = GetDocProps().getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "FilterName" ), ::rtl::OUString() ); + return CheckFilter( aOldFilterName ); +} - ::comphelper::SequenceAsHashMap aOldFiltPropsHM; - sal_Int32 nOldFiltFlags = 0; - if ( aOldFilterName.getLength() ) +sal_Int8 ModelData_Impl::CheckFilter( const ::rtl::OUString& aFilterName ) +{ + ::comphelper::SequenceAsHashMap aFiltPropsHM; + sal_Int32 nFiltFlags = 0; + if ( aFilterName.getLength() ) { - uno::Sequence< beans::PropertyValue > aOldFilterProps; - if ( aOldFilterName.getLength() ) - m_pOwner->GetFilterConfiguration()->getByName( aOldFilterName ) >>= aOldFilterProps; + // get properties of filter + uno::Sequence< beans::PropertyValue > aFilterProps; + if ( aFilterName.getLength() ) + m_pOwner->GetFilterConfiguration()->getByName( aFilterName ) >>= aFilterProps; - aOldFiltPropsHM = ::comphelper::SequenceAsHashMap( aOldFilterProps ); - nOldFiltFlags = aOldFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "Flags" ), - (sal_Int32)0 ); + aFiltPropsHM = ::comphelper::SequenceAsHashMap( aFilterProps ); + nFiltFlags = aFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "Flags" ), (sal_Int32)0 ); } // only a temporary solution until default filter retrieving feature is implemented // then GetDocServiceDefaultFilter() must be used - // ::comphelper::SequenceAsHashMap aDefFiltPropsHM = GetDocServiceAnyFilter( 3, 0 ); ::comphelper::SequenceAsHashMap aDefFiltPropsHM = GetDocServiceDefaultFilterCheckFlags( 3, 0 ); - sal_Int32 nDefFiltFlags = aDefFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "Flags" ), - (sal_Int32)0 ); + sal_Int32 nDefFiltFlags = aDefFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "Flags" ), (sal_Int32)0 ); // if the old filter is not acceptable // and there is no default filter or it is not acceptable for requested parameters then proceed with saveAs - if ( ( !aOldFiltPropsHM.size() || !( nOldFiltFlags & SFX_FILTER_EXPORT ) ) + if ( ( !aFiltPropsHM.size() || !( nFiltFlags & SFX_FILTER_EXPORT ) ) && ( !aDefFiltPropsHM.size() || !( nDefFiltFlags & SFX_FILTER_EXPORT ) || nDefFiltFlags & SFX_FILTER_INTERNAL ) ) return STATUS_SAVEAS; // so at this point there is either an acceptable old filter or default one - if ( !aOldFiltPropsHM.size() || !( nOldFiltFlags & SFX_FILTER_EXPORT ) ) + if ( !aFiltPropsHM.size() || !( nFiltFlags & SFX_FILTER_EXPORT ) ) { // so the default filter must be acceptable return STATUS_SAVEAS_STANDARDNAME; } - else if ( ( !( nOldFiltFlags & SFX_FILTER_OWN ) || ( nOldFiltFlags & SFX_FILTER_ALIEN ) ) - && !( nOldFiltFlags & SFX_FILTER_SILENTEXPORT ) && aDefFiltPropsHM.size() + else if ( ( !( nFiltFlags & SFX_FILTER_OWN ) || ( nFiltFlags & SFX_FILTER_ALIEN ) ) + && !( nFiltFlags & SFX_FILTER_SILENTEXPORT ) && aDefFiltPropsHM.size() && ( nDefFiltFlags & SFX_FILTER_EXPORT ) && !( nDefFiltFlags & SFX_FILTER_INTERNAL )) { // the default filter is acceptable and the old filter is alian one // so ask to make a saveAs operation - ::rtl::OUString aOldUIName = aOldFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "UIName" ), + ::rtl::OUString aUIName = aFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "UIName" ), ::rtl::OUString() ); ::rtl::OUString aDefUIName = aDefFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "UIName" ), ::rtl::OUString() ); - ::rtl::OUString aDefName = aDefFiltPropsHM.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "Name" ), - ::rtl::OUString() ); ::rtl::OUString aPreusedFilterName = GetDocProps().getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii( "PreusedFilterName" ), ::rtl::OUString() ); - - if ( !aPreusedFilterName.equals( aOldFilterName ) && !aOldFilterName.equals(aDefName) ) + if ( !aPreusedFilterName.equals( aFilterName ) && !aUIName.equals( aDefUIName ) ) { - if ( !SfxStoringHelper::WarnUnacceptableFormat( GetModel(), aOldUIName, aDefUIName, sal_True ) ) + if ( !SfxStoringHelper::WarnUnacceptableFormat( GetModel(), aUIName, aDefUIName, sal_True ) ) return STATUS_SAVEAS_STANDARDNAME; } } @@ -1234,14 +1234,31 @@ sal_Bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >& ::rtl::OUString() ); sal_Bool bUseFilterOptions = sal_False; - ::comphelper::SequenceAsHashMap::const_iterator aFileNameIter = aModelData.GetMediaDescr().find( ::rtl::OUString::createFromAscii( "URL" ) ); - if ( aFileNameIter == aModelData.GetMediaDescr().end() ) { - bUseFilterOptions = aModelData.OutputFileDialog( nStoreMode, aFilterProps, bSetStandardName ); - bDialogUsed = sal_True; + sal_Bool bExit = sal_False; + while ( !bExit ) + { + bUseFilterOptions = aModelData.OutputFileDialog( nStoreMode, aFilterProps, bSetStandardName ); + ::rtl::OUString aFilterName = aModelData.GetMediaDescr().getUnpackedValueOrDefault( + ::rtl::OUString::createFromAscii( "FilterName" ), + ::rtl::OUString() ); + sal_Int8 nStatusSave = aModelData.CheckFilter( aFilterName ); + if ( nStatusSave == STATUS_SAVEAS_STANDARDNAME ) + { + // switch to best filter + bSetStandardName = sal_True; + } + else if ( nStatusSave == STATUS_SAVE ) + { + // user confirmed alien filter or "good" filter is used + bExit = sal_True; + } + } + + bDialogUsed = sal_True; aFileNameIter = aModelData.GetMediaDescr().find( ::rtl::OUString::createFromAscii( "URL" ) ); } else @@ -1813,25 +1830,10 @@ sal_Bool SfxStoringHelper::WarnUnacceptableFormat( const uno::Reference< frame:: ::rtl::OUString aDefUIName, sal_Bool bCanProceedFurther ) { - Window* pWin = 0; - - ::rtl::OUString aCurrentName; - - try { - uno::Reference< frame::XStorable > xStorable( xModel, uno::UNO_QUERY_THROW ); - aCurrentName = INetURLObject( xStorable->getLocation() ).getName( - INetURLObject::LAST_SEGMENT, - sal_True, - INetURLObject::DECODE_WITH_CHARSET); - } - catch ( uno::Exception& ) - { - } - - // not possible to proceed with store when there is no location - if ( !aCurrentName.getLength() ) - return sal_False; + if ( !SvtSaveOptions().IsWarnAlienFormat() ) + return sal_True; + Window* pWin = 0; try { uno::Reference< frame::XController > xController = xModel->getCurrentController(); if ( xController.is() ) @@ -1853,7 +1855,9 @@ sal_Bool SfxStoringHelper::WarnUnacceptableFormat( const uno::Reference< frame:: { } - String aWarn; + SfxAlienWarningDialog aDlg( pWin, aOldUIName ); + + /*String aWarn; if ( bCanProceedFurther ) aWarn = String(SfxResId(STR_QUERY_SAVEOWNFORMAT)); else @@ -1865,7 +1869,8 @@ sal_Bool SfxStoringHelper::WarnUnacceptableFormat( const uno::Reference< frame:: aWarn = SearchAndReplace( aWarn, DEFINE_CONST_UNICODE( "$(OWNFORMAT)" ), aDefUIName ); QueryBox aWarnBox( pWin, WB_YES_NO|WB_DEF_OK, aWarn ); - return ( aWarnBox.Execute() == RET_YES ); + return ( aWarnBox.Execute() == RET_YES );*/ + return aDlg.Execute() == RET_OK; } // static |