summaryrefslogtreecommitdiff
path: root/cui/source/options/optsave.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/options/optsave.cxx')
-rw-r--r--cui/source/options/optsave.cxx822
1 files changed, 822 insertions, 0 deletions
diff --git a/cui/source/options/optsave.cxx b/cui/source/options/optsave.cxx
new file mode 100644
index 000000000000..caf332fb4048
--- /dev/null
+++ b/cui/source/options/optsave.cxx
@@ -0,0 +1,822 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: optsave.cxx,v $
+ * $Revision: 1.21 $
+ *
+ * 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_cui.hxx"
+
+// include ---------------------------------------------------------------
+#include <tools/shl.hxx>
+#include <svl/eitem.hxx>
+#include <svl/intitem.hxx>
+#define _SVX_OPTSAVE_CXX
+
+#include "optsave.hrc"
+#include <cuires.hrc>
+
+#include "optsave.hxx"
+#include <dialmgr.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/sequenceasvector.hxx>
+#include <comphelper/sequenceashashmap.hxx>
+#include <unotools/moduleoptions.hxx>
+#include <unotools/saveopt.hxx>
+#include <comphelper/sequenceasvector.hxx>
+#include <comphelper/sequenceashashmap.hxx>
+#include <com/sun/star/container/XContainerQuery.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/container/XContainerQuery.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/util/XFlushable.hpp>
+#include <sfx2/docfilt.hxx>
+#include <svtools/stdctrl.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/msgbox.hxx>
+#include <unotools/configitem.hxx>
+#include <unotools/optionsdlg.hxx>
+
+#include <vcl/msgbox.hxx>
+
+using namespace com::sun::star::uno;
+using namespace com::sun::star::util;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::container;
+using namespace comphelper;
+using rtl::OUString;
+
+#define C2U(cChar) OUString::createFromAscii(cChar)
+#define C2S(cChar) String( RTL_CONSTASCII_STRINGPARAM(cChar) )
+#define CFG_PAGE_AND_GROUP C2S("General"), C2S("LoadSave")
+// !! you have to update these index, if you changed the list of the child windows !!
+#define WININDEX_AUTOSAVE ((USHORT)6)
+#define WININDEX_SAVEURL_RELFSYS ((USHORT)9)
+
+// -------------------- --------------------------------------------------
+class FilterWarningDialog_Impl : public ModalDialog
+{
+ OKButton aOk;
+ CancelButton aCancel;
+ FixedImage aImage;
+ FixedInfo aFilterWarningFT;
+
+ public:
+ FilterWarningDialog_Impl(Window* pParent);
+
+ void SetFilterName(const String& rFilterUIName);
+};
+// ----------------------------------------------------------------------
+FilterWarningDialog_Impl::FilterWarningDialog_Impl(Window* pParent) :
+ ModalDialog(pParent, CUI_RES( RID_SVXDLG_FILTER_WARNING ) ),
+ aOk( this, CUI_RES(PB_OK )),
+ aCancel( this, CUI_RES(PB_CANCEL )),
+ aImage( this, CUI_RES(IMG_WARNING )),
+ aFilterWarningFT( this, CUI_RES(FT_FILTER_WARNING ))
+{
+ FreeResource();
+ aImage.SetImage(WarningBox::GetStandardImage());
+}
+// ----------------------------------------------------------------------
+void FilterWarningDialog_Impl::SetFilterName(const String& rFilterUIName)
+{
+ String sTmp(aFilterWarningFT.GetText());
+ sTmp.SearchAndReplaceAscii("%1", rFilterUIName);
+ aFilterWarningFT.SetText(sTmp);
+}
+// ----------------------------------------------------------------------
+#ifdef FILTER_WARNING_ENABLED
+class SvxAlienFilterWarningConfig_Impl : public utl::ConfigItem
+{
+ sal_Bool bWarning;
+ com::sun::star::uno::Sequence< OUString > aPropNames;
+
+ public:
+ SvxAlienFilterWarningConfig_Impl();
+ ~SvxAlienFilterWarningConfig_Impl();
+
+ virtual void Commit();
+
+ void ResetWarning()
+ {
+ if(bWarning)
+ {
+ bWarning = sal_False;
+ ConfigItem::SetModified();
+ }
+
+ }
+ sal_Bool IsWarning()const{return bWarning;}
+};
+// ----------------------------------------------------------------------
+SvxAlienFilterWarningConfig_Impl::SvxAlienFilterWarningConfig_Impl() :
+ ConfigItem(C2U("TypeDetection.Misc/Defaults"),
+ CONFIG_MODE_IMMEDIATE_UPDATE),
+ aPropNames(1),
+ bWarning(sal_True)
+{
+ aPropNames.getArray()[0] = C2U("ShowAlienFilterWarning");
+ Sequence<Any> aValues = GetProperties(aPropNames);
+ const Any* pValues = aValues.getConstArray();
+ DBG_ASSERT(aValues.getLength() == aPropNames.getLength(), "GetProperties failed");
+ if(aValues.getLength() == aPropNames.getLength() &&
+ pValues[0].hasValue() &&
+ pValues[0].getValueType() == ::getBooleanCppuType())
+ bWarning = *(sal_Bool*)pValues[0].getValue();
+}
+// ----------------------------------------------------------------------
+SvxAlienFilterWarningConfig_Impl::~SvxAlienFilterWarningConfig_Impl()
+{
+ if(IsModified())
+ Commit();
+}
+// ----------------------------------------------------------------------
+void SvxAlienFilterWarningConfig_Impl::Commit()
+{
+ Sequence<Any> aValues(aPropNames.getLength());
+ Any* pValues = aValues.getArray();
+ pValues[0].setValue(&bWarning, ::getBooleanCppuType());
+ PutProperties(aPropNames, aValues);
+}
+#endif // FILTER_WARNING_ENABLED
+// ----------------------------------------------------------------------
+// ----------------------------------------------------------------------
+
+struct SvxSaveTabPage_Impl
+{
+ Reference< XNameContainer > xFact;
+ Sequence< OUString > aFilterArr[APP_COUNT];
+ Sequence< sal_Bool > aAlienArr[APP_COUNT];
+ Sequence< sal_Bool > aODFArr[APP_COUNT];
+ Sequence< OUString > aUIFilterArr[APP_COUNT];
+ OUString aDefaultArr[APP_COUNT];
+ sal_Bool aDefaultReadonlyArr[APP_COUNT];
+ sal_Bool bInitialized;
+
+ SvxSaveTabPage_Impl();
+ ~SvxSaveTabPage_Impl();
+};
+
+SvxSaveTabPage_Impl::SvxSaveTabPage_Impl() : bInitialized( sal_False )
+{
+}
+
+SvxSaveTabPage_Impl::~SvxSaveTabPage_Impl()
+{
+}
+
+// class SvxSaveTabPage --------------------------------------------------
+
+SfxSaveTabPage::SfxSaveTabPage( Window* pParent, const SfxItemSet& rCoreSet ) :
+
+ SfxTabPage( pParent, CUI_RES( RID_SFXPAGE_SAVE ), rCoreSet ),
+
+ aLoadFL ( this, CUI_RES( LB_LOAD ) ),
+ aLoadUserSettingsCB ( this, CUI_RES( CB_LOAD_SETTINGS ) ),
+ aLoadDocPrinterCB ( this, CUI_RES( CB_LOAD_DOCPRINTER ) ),
+
+ aSaveFL ( this, CUI_RES( GB_SAVE ) ),
+ aDocInfoCB ( this, CUI_RES( BTN_DOCINFO ) ),
+ aBackupFI ( this, CUI_RES( FI_BACKUP ) ),
+ aBackupCB ( this, CUI_RES( BTN_BACKUP ) ),
+ aAutoSaveCB ( this, CUI_RES( BTN_AUTOSAVE ) ),
+ aAutoSaveEdit ( this, CUI_RES( ED_AUTOSAVE ) ),
+ aMinuteFT ( this, CUI_RES( FT_MINUTE ) ),
+ aRelativeFsysCB ( this, CUI_RES( BTN_RELATIVE_FSYS ) ),
+ aRelativeInetCB ( this, CUI_RES( BTN_RELATIVE_INET ) ),
+
+ aDefaultFormatFL ( this, CUI_RES( FL_FILTER ) ),
+ aODFVersionFT ( this, CUI_RES( FT_ODF_VERSION ) ),
+ aODFVersionLB ( this, CUI_RES( LB_ODF_VERSION ) ),
+ aSizeOptimizationCB ( this, CUI_RES( BTN_NOPRETTYPRINTING ) ),
+ aWarnAlienFormatCB ( this, CUI_RES( BTN_WARNALIENFORMAT ) ),
+ aDocTypeFT ( this, CUI_RES( FT_APP ) ),
+ aDocTypeLB ( this, CUI_RES( LB_APP ) ),
+ aSaveAsFT ( this, CUI_RES( FT_FILTER ) ),
+ aSaveAsFI ( this, CUI_RES( FI_FILTER ) ),
+ aSaveAsLB ( this, CUI_RES( LB_FILTER ) ),
+ aODFWarningFI ( this, CUI_RES( FI_ODF_WARNING ) ),
+ aODFWarningFT ( this, CUI_RES( FT_WARN ) ),
+
+ pImpl ( new SvxSaveTabPage_Impl )
+
+{
+ sal_Bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
+ aODFWarningFI.SetImage(
+ Image( CUI_RES( bHighContrast ? IMG_ODF_WARNING_HC : IMG_ODF_WARNING ) ) );
+
+ FreeResource();
+
+ Link aLink = LINK( this, SfxSaveTabPage, AutoClickHdl_Impl );
+ aAutoSaveCB.SetClickHdl( aLink );
+ aAutoSaveEdit.SetMaxTextLen( 2 );
+
+ SvtModuleOptions aModuleOpt;
+ if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) )
+ {
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_MATH ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_MATH ));
+ }
+ else
+ {
+ pImpl->aDefaultArr[APP_MATH] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH);
+ pImpl->aDefaultReadonlyArr[APP_MATH] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_MATH);
+ }
+
+ if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SDRAW ) )
+ {
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_DRAW ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_DRAW ));
+ }
+ else
+ {
+ pImpl->aDefaultArr[APP_DRAW] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW);
+ pImpl->aDefaultReadonlyArr[APP_DRAW] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_DRAW);
+ }
+
+ if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) )
+ {
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_IMPRESS ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_IMPRESS ));
+ }
+ else
+ {
+ pImpl->aDefaultArr[APP_IMPRESS] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS);
+ pImpl->aDefaultReadonlyArr[APP_IMPRESS] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_IMPRESS);
+ }
+
+ if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) )
+ {
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_CALC ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_CALC ));
+ }
+ else
+ {
+ pImpl->aDefaultArr[APP_CALC] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC);
+ pImpl->aDefaultReadonlyArr[APP_CALC] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_CALC);
+ }
+
+ if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
+ {
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_WRITER ));
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_WRITER_WEB ));
+ aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_WRITER_GLOBAL ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_WRITER ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_WRITER_WEB ));
+ aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_WRITER_GLOBAL ));
+ }
+ else
+ {
+ pImpl->aDefaultArr[APP_WRITER] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER);
+ pImpl->aDefaultArr[APP_WRITER_WEB] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB);
+ pImpl->aDefaultArr[APP_WRITER_GLOBAL] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL);
+ pImpl->aDefaultReadonlyArr[APP_WRITER] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITER);
+ pImpl->aDefaultReadonlyArr[APP_WRITER_WEB] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERWEB);
+ pImpl->aDefaultReadonlyArr[APP_WRITER_GLOBAL] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERGLOBAL);
+ }
+
+ aLink = LINK( this, SfxSaveTabPage, ODFVersionHdl_Impl );
+ aODFVersionLB.SetSelectHdl( aLink );
+ aLink = LINK( this, SfxSaveTabPage, FilterHdl_Impl );
+ aDocTypeLB.SetSelectHdl( aLink );
+ aSaveAsLB.SetSelectHdl( aLink );
+
+ DetectHiddenControls();
+}
+
+// -----------------------------------------------------------------------
+
+SfxSaveTabPage::~SfxSaveTabPage()
+{
+ delete pImpl;
+}
+
+// -----------------------------------------------------------------------
+
+SfxTabPage* SfxSaveTabPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet )
+{
+ return ( new SfxSaveTabPage( pParent, rAttrSet ) );
+}
+
+/* -----------------------------05.04.01 13:10--------------------------------
+
+ ---------------------------------------------------------------------------*/
+OUString lcl_ExtractUIName(const Sequence<PropertyValue> rProperties)
+{
+ OUString sRet;
+ const PropertyValue* pProperties = rProperties.getConstArray();
+ for(int nProp = 0; nProp < rProperties.getLength(); nProp++)
+ {
+ if(!pProperties[nProp].Name.compareToAscii("UIName"))
+ {
+ pProperties[nProp].Value >>= sRet;
+ break;
+ }
+ }
+ return sRet;
+}
+// -----------------------------------------------------------------------
+bool SfxSaveTabPage::AcceptFilter( USHORT nPos )
+{
+ const OUString* pFilters = pImpl->aFilterArr[nPos].getConstArray();
+ sal_Bool bAlien = sal_False, bODF = sal_False;
+ OUString* pUIFilters = pImpl->aUIFilterArr[nPos].getArray();
+ OUString sUIName;
+ for(int nFilter = 0; nFilter < pImpl->aFilterArr[nPos].getLength(); nFilter++)
+ {
+ if( pImpl->aDefaultArr[nPos] == pFilters[nFilter] )
+ {
+ bAlien = pImpl->aAlienArr[nPos][nFilter];
+ bODF = pImpl->aODFArr[nPos][nFilter];
+ sUIName = pUIFilters[nFilter];;
+ break;
+ }
+ }
+ bool bSet = true;
+ return bSet;
+}
+// -----------------------------------------------------------------------
+void SfxSaveTabPage::DetectHiddenControls()
+{
+ long nDelta = 0;
+ // the index of the first child window which perhaps have to move upwards
+ USHORT nWinIndex = WININDEX_SAVEURL_RELFSYS;
+ SvtOptionsDialogOptions aOptionsDlgOpt;
+
+ if ( aOptionsDlgOpt.IsOptionHidden( C2S("Backup"), CFG_PAGE_AND_GROUP ) )
+ {
+ // hide controls of "Backup"
+ aBackupFI.Hide();
+ aBackupCB.Hide();
+ // the other controls have to move upwards the height of checkbox + space
+ nDelta = aAutoSaveCB.GetPosPixel().Y() - aBackupCB.GetPosPixel().Y();
+ }
+
+ if ( aOptionsDlgOpt.IsOptionHidden( C2S("AutoSave"), CFG_PAGE_AND_GROUP ) )
+ {
+ // hide controls of "AutoSave"
+ aAutoSaveCB.Hide();
+ aAutoSaveEdit.Hide();
+ aMinuteFT.Hide();
+ // the other controls have to move upwards the height of checkbox + space
+ nDelta += aRelativeFsysCB.GetPosPixel().Y() - aAutoSaveCB.GetPosPixel().Y();
+ }
+ else if ( nDelta > 0 )
+ // the "AutoSave" controls have to move upwards too
+ nWinIndex = WININDEX_AUTOSAVE;
+
+ if ( nDelta > 0 )
+ {
+ USHORT i, nChildCount = GetChildCount();
+ for ( i = nWinIndex; i < nChildCount; ++i )
+ {
+ Window* pWin = GetChild(i);
+ Point aPos = pWin->GetPosPixel();
+ aPos.Y() -= nDelta;
+ pWin->SetPosPixel( aPos );
+ }
+ }
+}
+// -----------------------------------------------------------------------
+BOOL SfxSaveTabPage::FillItemSet( SfxItemSet& rSet )
+{
+ BOOL bModified = FALSE;
+ SvtSaveOptions aSaveOpt;
+ if(aLoadUserSettingsCB.IsChecked() != aLoadUserSettingsCB.GetSavedValue())
+ {
+ aSaveOpt.SetLoadUserSettings(aLoadUserSettingsCB.IsChecked());
+ }
+
+ if ( aLoadDocPrinterCB.IsChecked() != aLoadDocPrinterCB.GetSavedValue() )
+ aSaveOpt.SetLoadDocumentPrinter( aLoadDocPrinterCB.IsChecked() );
+
+ if ( aODFVersionLB.GetSelectEntryPos() != aODFVersionLB.GetSavedValue() )
+ {
+ long nVersion = long( aODFVersionLB.GetEntryData( aODFVersionLB.GetSelectEntryPos() ) );
+ aSaveOpt.SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion( nVersion ) );
+ }
+
+ if ( aDocInfoCB.IsChecked() != aDocInfoCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_DOCINFO ),
+ aDocInfoCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+
+ if ( aBackupCB.IsEnabled() && aBackupCB.IsChecked() != aBackupCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_BACKUP ),
+ aBackupCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+
+ if ( aSizeOptimizationCB.IsChecked() != aSizeOptimizationCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_PRETTYPRINTING ), !aSizeOptimizationCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+
+ if ( aAutoSaveCB.IsChecked() != aAutoSaveCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_AUTOSAVE ),
+ aAutoSaveCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+ if ( aWarnAlienFormatCB.IsChecked() != aWarnAlienFormatCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_WARNALIENFORMAT ),
+ aWarnAlienFormatCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+
+ if ( aAutoSaveEdit.GetText() != aAutoSaveEdit.GetSavedValue() )
+ {
+ rSet.Put( SfxUInt16Item( GetWhich( SID_ATTR_AUTOSAVEMINUTE ),
+ (UINT16)aAutoSaveEdit.GetValue() ) );
+ bModified |= TRUE;
+ }
+ // relativ speichern
+ if ( aRelativeFsysCB.IsChecked() != aRelativeFsysCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_SAVEREL_FSYS ),
+ aRelativeFsysCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+
+ if ( aRelativeInetCB.IsChecked() != aRelativeInetCB.GetSavedValue() )
+ {
+ rSet.Put( SfxBoolItem( GetWhich( SID_SAVEREL_INET ),
+ aRelativeInetCB.IsChecked() ) );
+ bModified |= TRUE;
+ }
+
+ SvtModuleOptions aModuleOpt;
+ if(pImpl->aDefaultArr[APP_MATH].getLength() &&
+ pImpl->aDefaultArr[APP_MATH] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH) &&
+ AcceptFilter( APP_MATH ))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_MATH, pImpl->aDefaultArr[APP_MATH]);
+
+ if( pImpl->aDefaultArr[APP_DRAW].getLength() &&
+ pImpl->aDefaultArr[APP_DRAW] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW) &&
+ AcceptFilter( APP_DRAW ))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_DRAW, pImpl->aDefaultArr[APP_DRAW]);
+
+ if(pImpl->aDefaultArr[APP_IMPRESS].getLength() &&
+ pImpl->aDefaultArr[APP_IMPRESS] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS)&&
+ AcceptFilter( APP_IMPRESS ))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS, pImpl->aDefaultArr[APP_IMPRESS]);
+
+ if(pImpl->aDefaultArr[APP_CALC].getLength() &&
+ pImpl->aDefaultArr[APP_CALC] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC)&&
+ AcceptFilter( APP_CALC ))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_CALC, pImpl->aDefaultArr[APP_CALC]);
+
+ if(pImpl->aDefaultArr[APP_WRITER].getLength() &&
+ pImpl->aDefaultArr[APP_WRITER] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER)&&
+ AcceptFilter( APP_WRITER))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITER, pImpl->aDefaultArr[APP_WRITER]);
+
+ if(pImpl->aDefaultArr[APP_WRITER_WEB].getLength() &&
+ pImpl->aDefaultArr[APP_WRITER_WEB] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB)&&
+ AcceptFilter( APP_WRITER_WEB ))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB, pImpl->aDefaultArr[APP_WRITER_WEB]);
+
+ if(pImpl->aDefaultArr[APP_WRITER_GLOBAL].getLength() &&
+ pImpl->aDefaultArr[APP_WRITER_GLOBAL] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL)&&
+ AcceptFilter( APP_WRITER_GLOBAL ))
+ aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL, pImpl->aDefaultArr[APP_WRITER_GLOBAL]);
+
+ return bModified;
+}
+
+// -----------------------------------------------------------------------
+
+sal_Bool isODFFormat( OUString sFilter )
+{
+ static const char* aODFFormats[] =
+ {
+ "writer8",
+ "writer8_template",
+ "writerglobal8",
+ "writerglobal8_writer",
+ "calc8",
+ "calc8_template",
+ "draw8",
+ "draw8_template",
+ "impress8",
+ "impress8_template",
+ "impress8_draw",
+ "chart8",
+ "math8",
+ NULL
+ };
+
+ sal_Bool bRet = sal_False;
+ int i = 0;
+ while ( aODFFormats[i] != NULL )
+ {
+ if ( sFilter.equalsAscii( aODFFormats[i++] ) )
+ {
+ bRet = sal_True;
+ break;
+ }
+ }
+
+ return bRet;
+}
+
+void SfxSaveTabPage::Reset( const SfxItemSet& )
+{
+ SvtSaveOptions aSaveOpt;
+ aLoadUserSettingsCB.Check(aSaveOpt.IsLoadUserSettings());
+ aLoadUserSettingsCB.SaveValue();
+ aLoadDocPrinterCB.Check( aSaveOpt.IsLoadDocumentPrinter() );
+ aLoadDocPrinterCB.SaveValue();
+
+ if ( !pImpl->bInitialized )
+ {
+ try
+ {
+ Reference< XMultiServiceFactory > xMSF = comphelper::getProcessServiceFactory();
+ pImpl->xFact = Reference<XNameContainer>(
+ xMSF->createInstance(C2U("com.sun.star.document.FilterFactory")), UNO_QUERY);
+
+ DBG_ASSERT(pImpl->xFact.is(), "service com.sun.star.document.FilterFactory unavailable");
+ Reference< XContainerQuery > xQuery(pImpl->xFact, UNO_QUERY);
+ if(xQuery.is())
+ {
+ for(USHORT n = 0; n < aDocTypeLB.GetEntryCount(); n++)
+ {
+ long nData = (long) aDocTypeLB.GetEntryData(n);
+ OUString sCommand;
+ sCommand = C2U("matchByDocumentService=%1:iflags=");
+ sCommand += String::CreateFromInt32(SFX_FILTER_IMPORT|SFX_FILTER_EXPORT);
+ sCommand += C2U(":eflags=");
+ sCommand += String::CreateFromInt32(SFX_FILTER_NOTINFILEDLG);
+ sCommand += C2U(":default_first");
+ String sReplace;
+ switch(nData)
+ {
+ case APP_WRITER : sReplace = C2U("com.sun.star.text.TextDocument"); break;
+ case APP_WRITER_WEB : sReplace = C2U("com.sun.star.text.WebDocument"); break;
+ case APP_WRITER_GLOBAL : sReplace = C2U("com.sun.star.text.GlobalDocument"); break;
+ case APP_CALC : sReplace = C2U("com.sun.star.sheet.SpreadsheetDocument");break;
+ case APP_IMPRESS : sReplace = C2U("com.sun.star.presentation.PresentationDocument");break;
+ case APP_DRAW : sReplace = C2U("com.sun.star.drawing.DrawingDocument");break;
+ case APP_MATH : sReplace = C2U("com.sun.star.formula.FormulaProperties");break;
+ default: DBG_ERROR("illegal user data");
+ }
+ String sTmp(sCommand);
+ sTmp.SearchAndReplaceAscii("%1", sReplace);
+ sCommand = sTmp;
+ Reference< XEnumeration > xList = xQuery->createSubSetEnumerationByQuery(sCommand);
+ SequenceAsVector< OUString > lList;
+ SequenceAsVector< sal_Bool > lAlienList;
+ SequenceAsVector< sal_Bool > lODFList;
+ while(xList->hasMoreElements())
+ {
+ SequenceAsHashMap aFilter(xList->nextElement());
+ OUString sFilter = aFilter.getUnpackedValueOrDefault(OUString::createFromAscii("Name"),OUString());
+ if (sFilter.getLength())
+ {
+ sal_Int32 nFlags = aFilter.getUnpackedValueOrDefault(OUString::createFromAscii("Flags"),sal_Int32());
+ lList.push_back(sFilter);
+ lAlienList.push_back(0 != (nFlags & SFX_FILTER_ALIEN));
+ lODFList.push_back( isODFFormat( sFilter ) );
+ }
+ }
+ pImpl->aFilterArr[nData] = lList.getAsConstList();
+ pImpl->aAlienArr[nData] = lAlienList.getAsConstList();
+ pImpl->aODFArr[nData] = lODFList.getAsConstList();
+ }
+ }
+ aDocTypeLB.SelectEntryPos(0);
+ FilterHdl_Impl(&aDocTypeLB);
+ }
+ catch(Exception& )
+ {
+ DBG_ERROR("exception in FilterFactory access");
+ }
+
+ pImpl->bInitialized = sal_True;
+ }
+
+ aDocInfoCB.Check(aSaveOpt.IsDocInfoSave());
+// aDocInfoCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_DOCINFSAVE));
+
+ aBackupCB.Check(aSaveOpt.IsBackup());
+ BOOL bBackupRO = aSaveOpt.IsReadOnly(SvtSaveOptions::E_BACKUP);
+ aBackupCB.Enable(!bBackupRO);
+ aBackupFI.Show(bBackupRO);
+
+ aAutoSaveCB.Check(aSaveOpt.IsAutoSave());
+ aWarnAlienFormatCB.Check(aSaveOpt.IsWarnAlienFormat());
+ aWarnAlienFormatCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_WARNALIENFORMAT));
+// aAutoSaveCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_AUTOSAVE));
+
+ // the pretty printing
+ aSizeOptimizationCB.Check( !aSaveOpt.IsPrettyPrinting());
+// aSizeOptimizationCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_DOPRETTYPRINTING ));
+
+
+ aAutoSaveEdit.SetValue( aSaveOpt.GetAutoSaveTime() );
+// aAutoSaveEdit.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_AUTOSAVETIME));
+
+ // relativ speichern
+ aRelativeFsysCB.Check( aSaveOpt.IsSaveRelFSys() );
+// aRelativeFsysCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_SAVERELFSYS));
+
+ aRelativeInetCB.Check( aSaveOpt.IsSaveRelINet() );
+// aRelativeInetCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_SAVERELINET));
+
+ void* pDefaultVersion = (void*)long( aSaveOpt.GetODFDefaultVersion() );
+ aODFVersionLB.SelectEntryPos( aODFVersionLB.GetEntryPos( pDefaultVersion ) );
+
+ AutoClickHdl_Impl( &aAutoSaveCB );
+ ODFVersionHdl_Impl( &aODFVersionLB );
+
+ aDocInfoCB.SaveValue();
+ aBackupCB.SaveValue();
+ aWarnAlienFormatCB.SaveValue();
+ aSizeOptimizationCB.SaveValue();
+ aAutoSaveCB.SaveValue();
+ aAutoSaveEdit.SaveValue();
+// aAutoSavePromptBtn.SaveValue();
+
+ aRelativeFsysCB.SaveValue();
+ aRelativeInetCB.SaveValue();
+ aODFVersionLB.SaveValue();
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SfxSaveTabPage, AutoClickHdl_Impl, CheckBox *, pBox )
+{
+ if ( pBox == &aAutoSaveCB )
+ {
+ if ( aAutoSaveCB.IsChecked() )
+ {
+ aAutoSaveEdit.Enable();
+ aMinuteFT.Enable();
+// aAutoSavePromptBtn.Enable();
+ aAutoSaveEdit.GrabFocus();
+ }
+ else
+ {
+ aAutoSaveEdit.Disable();
+ aMinuteFT.Disable();
+// aAutoSavePromptBtn.Disable();
+ }
+ }
+ return 0;
+}
+/* -----------------------------05.04.01 13:10--------------------------------
+
+ ---------------------------------------------------------------------------*/
+OUString lcl_ExtracUIName(const Sequence<PropertyValue> rProperties)
+{
+ OUString sRet;
+ sal_Int32 nFlags;
+ const PropertyValue* pProperties = rProperties.getConstArray();
+ for(int nProp = 0; nProp < rProperties.getLength(); nProp++)
+ {
+ if(!pProperties[nProp].Name.compareToAscii("UIName"))
+ {
+ pProperties[nProp].Value >>= sRet;
+//! break;
+ }
+ else if(!pProperties[nProp].Name.compareToAscii("Flags"))
+ {
+ if ( pProperties[nProp].Value >>= nFlags )
+ {
+ nFlags &= 0x100;
+ }
+ }
+ else if(!pProperties[nProp].Name.compareToAscii("Name"))
+ {
+ pProperties[nProp].Value >>= sRet;
+ }
+ }
+ return sRet;
+}
+/* -----------------------------05.04.01 13:37--------------------------------
+
+ ---------------------------------------------------------------------------*/
+IMPL_LINK( SfxSaveTabPage, FilterHdl_Impl, ListBox *, pBox )
+{
+ USHORT nCurPos = aDocTypeLB.GetSelectEntryPos();
+
+ long nData = -1;
+ if(nCurPos < APP_COUNT)
+ nData = (long) aDocTypeLB.GetEntryData(nCurPos);
+
+ if ( nData >= 0 && nData < APP_COUNT )
+ {
+ if(&aDocTypeLB == pBox)
+ {
+ aSaveAsLB.Clear();
+ const OUString* pFilters = pImpl->aFilterArr[nData].getConstArray();
+ if(!pImpl->aUIFilterArr[nData].getLength())
+ {
+ pImpl->aUIFilterArr[nData].realloc(pImpl->aFilterArr[nData].getLength());
+ OUString* pUIFilters = pImpl->aUIFilterArr[nData].getArray();
+ for(int nFilter = 0; nFilter < pImpl->aFilterArr[nData].getLength(); nFilter++)
+ {
+ Any aProps = pImpl->xFact->getByName(pFilters[nFilter]);
+ Sequence<PropertyValue> aProperties;
+ aProps >>= aProperties;
+ pUIFilters[nFilter] = lcl_ExtracUIName(aProperties);
+ }
+ }
+ const OUString* pUIFilters = pImpl->aUIFilterArr[nData].getConstArray();
+ OUString sSelect;
+ for(int i = 0; i < pImpl->aUIFilterArr[nData].getLength(); i++)
+ {
+ USHORT nEntryPos = aSaveAsLB.InsertEntry(pUIFilters[i]);
+ if ( pImpl->aODFArr[nData][i] )
+ aSaveAsLB.SetEntryData( nEntryPos, (void*)pImpl );
+ if(pFilters[i] == pImpl->aDefaultArr[nData])
+ sSelect = pUIFilters[i];
+ }
+ if(sSelect.getLength())
+ aSaveAsLB.SelectEntry(sSelect);
+ aSaveAsFI.Show(pImpl->aDefaultReadonlyArr[nData]);
+ aSaveAsFT.Enable(!pImpl->aDefaultReadonlyArr[nData]);
+ aSaveAsLB.Enable(!pImpl->aDefaultReadonlyArr[nData]);
+ }
+ else
+ {
+ OUString sSelect = pBox->GetSelectEntry();
+ const OUString* pFilters = pImpl->aFilterArr[nData].getConstArray();
+ OUString* pUIFilters = pImpl->aUIFilterArr[nData].getArray();
+ for(int i = 0; i < pImpl->aUIFilterArr[nData].getLength(); i++)
+ if(pUIFilters[i] == sSelect)
+ {
+ sSelect = pFilters[i];
+ break;
+ }
+
+ pImpl->aDefaultArr[nData] = sSelect;
+ }
+ }
+
+ ODFVersionHdl_Impl( &aSaveAsLB );
+ return 0;
+};
+
+IMPL_LINK( SfxSaveTabPage, ODFVersionHdl_Impl, ListBox *, EMPTYARG )
+{
+ long nVersion = long( aODFVersionLB.GetEntryData( aODFVersionLB.GetSelectEntryPos() ) );
+ bool bShown = SvtSaveOptions::ODFDefaultVersion( nVersion ) != SvtSaveOptions::ODFVER_LATEST;
+ if ( bShown )
+ {
+ bool bHasODFFormat = false;
+ USHORT i = 0, nCount = aSaveAsLB.GetEntryCount();
+ for ( ; i < nCount; ++ i )
+ {
+ if ( aSaveAsLB.GetEntryData(i) != NULL )
+ {
+ bHasODFFormat = true;
+ break;
+ }
+ }
+
+ bShown = !bHasODFFormat
+ || ( aSaveAsLB.GetEntryData( aSaveAsLB.GetSelectEntryPos() ) != NULL );
+ }
+
+ aODFWarningFI.Show( bShown );
+ aODFWarningFT.Show( bShown );
+
+ return 0;
+}
+