summaryrefslogtreecommitdiff
path: root/binfilter/bf_svtools/source/config/svt_saveopt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_svtools/source/config/svt_saveopt.cxx')
-rw-r--r--binfilter/bf_svtools/source/config/svt_saveopt.cxx653
1 files changed, 653 insertions, 0 deletions
diff --git a/binfilter/bf_svtools/source/config/svt_saveopt.cxx b/binfilter/bf_svtools/source/config/svt_saveopt.cxx
new file mode 100644
index 000000000000..f0f67bf1f737
--- /dev/null
+++ b/binfilter/bf_svtools/source/config/svt_saveopt.cxx
@@ -0,0 +1,653 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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 <bf_svtools/saveopt.hxx>
+
+#include "rtl/instance.hxx"
+
+#include <unotools/configmgr.hxx>
+#include <unotools/configitem.hxx>
+#include <tools/debug.hxx>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+#include <osl/mutex.hxx>
+#include <comphelper/configurationhelper.hxx>
+#include <unotools/processfactory.hxx>
+#include <rtl/logfile.hxx>
+#include "itemholder1.hxx"
+
+using namespace utl;
+using namespace rtl;
+using namespace com::sun::star::uno;
+namespace css = ::com::sun::star;
+
+namespace binfilter
+{
+
+class SvtSaveOptions_Impl;
+class SvtLoadOptions_Impl;
+
+#define CFG_READONLY_DEFAULT sal_False
+
+struct SvtLoadSaveOptions_Impl
+{
+ SvtSaveOptions_Impl* pSaveOpt;
+ SvtLoadOptions_Impl* pLoadOpt;
+};
+
+static SvtLoadSaveOptions_Impl* pOptions = NULL;
+static sal_Int32 nRefCount = 0;
+
+class SvtSaveOptions_Impl : public utl::ConfigItem
+{
+ sal_Int32 nAutoSaveTime;
+ sal_Bool bUseUserData,
+ bBackup,
+ bAutoSave,
+ bAutoSavePrompt,
+ bDocInfSave,
+ bSaveWorkingSet,
+ bSaveDocWins,
+ bSaveDocView,
+ bSaveRelINet,
+ bSaveRelFSys,
+ bSaveUnpacked,
+ bDoPrettyPrinting,
+ bWarnAlienFormat,
+ bLoadDocPrinter;
+
+ sal_Bool bROAutoSaveTime,
+ bROUseUserData,
+ bROBackup,
+ bROAutoSave,
+ bROAutoSavePrompt,
+ bRODocInfSave,
+ bROSaveWorkingSet,
+ bROSaveDocWins,
+ bROSaveDocView,
+ bROSaveRelINet,
+ bROSaveRelFSys,
+ bROSaveUnpacked,
+ bROWarnAlienFormat,
+ bRODoPrettyPrinting,
+ bROLoadDocPrinter;
+public:
+ SvtSaveOptions_Impl();
+ ~SvtSaveOptions_Impl();
+
+ virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
+ virtual void Commit();
+
+ sal_Int32 GetAutoSaveTime() const { return nAutoSaveTime; }
+ BOOL IsUseUserData() const { return bUseUserData; }
+ BOOL IsBackup() const { return bBackup; }
+ BOOL IsAutoSave() const { return bAutoSave; }
+ BOOL IsAutoSavePrompt() const { return bAutoSavePrompt; }
+ BOOL IsDocInfoSave() const { return bDocInfSave; }
+ BOOL IsSaveWorkingSet() const { return bSaveWorkingSet; }
+ BOOL IsSaveDocWins() const { return bSaveDocWins; }
+ BOOL IsSaveDocView() const { return bSaveDocView; }
+ BOOL IsSaveRelINet() const { return bSaveRelINet; }
+ BOOL IsSaveRelFSys() const { return bSaveRelFSys; }
+ BOOL IsSaveUnpacked() const { return bSaveUnpacked; }
+ sal_Bool IsPrettyPrintingEnabled( ) const { return bDoPrettyPrinting; }
+ sal_Bool IsWarnAlienFormat() const { return bWarnAlienFormat; }
+ sal_Bool IsLoadDocPrinter() const { return bLoadDocPrinter; }
+};
+
+#define FORMAT 0
+#define TIMEINTERVALL 1
+#define USEUSERDATA 2
+#define CREATEBACKUP 3
+#define AUTOSAVE 4
+#define PROMPT 5
+#define EDITPROPERTY 6
+#define SAVEDOCWINS 7
+#define SAVEVIEWINFO 8
+#define UNPACKED 9
+#define PRETTYPRINTING 10
+#define WARNALIENFORMAT 11
+#define LOADDOCPRINTER 12
+#define FILESYSTEM 13
+#define INTERNET 14
+#define SAVEWORKINGSET 15
+
+Sequence< OUString > GetPropertyNames()
+{
+ static const char* aPropNames[] =
+ {
+ "Graphic/Format",
+ "Document/AutoSaveTimeIntervall",
+ "Document/UseUserData",
+ "Document/CreateBackup",
+ "Document/AutoSave",
+ "Document/AutoSavePrompt",
+ "Document/EditProperty",
+ "Document/DocumentWindows",
+ "Document/ViewInfo",
+ "Document/Unpacked",
+ "Document/PrettyPrinting",
+ "Document/WarnAlienFormat",
+ "Document/LoadPrinter",
+ "URL/FileSystem",
+ "URL/Internet",
+ "WorkingSet",
+ };
+
+ const int nCount = sizeof( aPropNames ) / sizeof( const char* );
+ Sequence< OUString > aNames( nCount );
+ OUString* pNames = aNames.getArray();
+ for ( int i = 0; i < nCount; i++ )
+ pNames[i] = OUString::createFromAscii( aPropNames[i] );
+
+ return aNames;
+}
+
+// -----------------------------------------------------------------------
+
+SvtSaveOptions_Impl::SvtSaveOptions_Impl()
+ : ConfigItem( OUString::createFromAscii("Office.Common/Save") )
+ , nAutoSaveTime( 0 )
+ , bUseUserData( sal_False )
+ , bBackup( sal_False )
+ , bAutoSave( sal_False )
+ , bAutoSavePrompt( sal_False )
+ , bDocInfSave( sal_False )
+ , bSaveWorkingSet( sal_False )
+ , bSaveDocWins( sal_False )
+ , bSaveDocView( sal_False )
+ , bSaveRelINet( sal_False )
+ , bSaveRelFSys( sal_False )
+ , bSaveUnpacked( sal_False )
+ , bDoPrettyPrinting( sal_False )
+ , bWarnAlienFormat( sal_True )
+ , bLoadDocPrinter( sal_True )
+ , bROAutoSaveTime( CFG_READONLY_DEFAULT )
+ , bROUseUserData( CFG_READONLY_DEFAULT )
+ , bROBackup( CFG_READONLY_DEFAULT )
+ , bROAutoSave( CFG_READONLY_DEFAULT )
+ , bROAutoSavePrompt( CFG_READONLY_DEFAULT )
+ , bRODocInfSave( CFG_READONLY_DEFAULT )
+ , bROSaveWorkingSet( CFG_READONLY_DEFAULT )
+ , bROSaveDocWins( CFG_READONLY_DEFAULT )
+ , bROSaveDocView( CFG_READONLY_DEFAULT )
+ , bROSaveRelINet( CFG_READONLY_DEFAULT )
+ , bROSaveRelFSys( CFG_READONLY_DEFAULT )
+ , bROSaveUnpacked( CFG_READONLY_DEFAULT )
+ , bROWarnAlienFormat( CFG_READONLY_DEFAULT )
+ , bRODoPrettyPrinting( CFG_READONLY_DEFAULT )
+ , bROLoadDocPrinter( CFG_READONLY_DEFAULT )
+{
+ Sequence< OUString > aNames = GetPropertyNames();
+ Sequence< Any > aValues = GetProperties( aNames );
+ Sequence< sal_Bool > aROStates = GetReadOnlyStates( aNames );
+ EnableNotification( aNames );
+ const Any* pValues = aValues.getConstArray();
+ const sal_Bool* pROStates = aROStates.getConstArray();
+ DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
+ DBG_ASSERT( aROStates.getLength() == aNames.getLength(), "GetReadOnlyStates failed" );
+ if ( aValues.getLength() == aNames.getLength() && aROStates.getLength() == aNames.getLength() )
+ {
+ for ( int nProp = 0; nProp < aNames.getLength(); nProp++ )
+ {
+ DBG_ASSERT( pValues[nProp].hasValue(), "property value missing" );
+ if ( pValues[nProp].hasValue() )
+ {
+ sal_Int32 nTemp = 0;
+ switch ( nProp )
+ {
+ case TIMEINTERVALL :
+ if ( pValues[nProp] >>= nTemp )
+ nAutoSaveTime = nTemp;
+ else
+ {
+ DBG_ERROR( "Wrong Type!" );
+ }
+ bROAutoSaveTime = pROStates[nProp];
+ break;
+
+ case FORMAT:
+ // not supported anymore
+ break;
+
+ default:
+ {
+ sal_Bool bTemp = sal_Bool();
+ if ( pValues[nProp] >>= bTemp )
+ {
+ switch ( nProp )
+ {
+ case USEUSERDATA :
+ bUseUserData = bTemp;
+ bROUseUserData = pROStates[nProp];
+ break;
+ case CREATEBACKUP :
+ bBackup = bTemp;
+ bROBackup = pROStates[nProp];
+ break;
+ case AUTOSAVE :
+ bAutoSave = bTemp;
+ bROAutoSave = pROStates[nProp];
+ break;
+ case PROMPT :
+ bAutoSavePrompt = bTemp;
+ bROAutoSavePrompt = pROStates[nProp];
+ break;
+ case EDITPROPERTY :
+ bDocInfSave = bTemp;
+ bRODocInfSave = pROStates[nProp];
+ break;
+ case SAVEWORKINGSET :
+ bSaveWorkingSet = bTemp;
+ bROSaveWorkingSet = pROStates[nProp];
+ break;
+ case SAVEDOCWINS :
+ bSaveDocWins = bTemp;
+ bROSaveDocWins = pROStates[nProp];
+ break;
+ case SAVEVIEWINFO :
+ bSaveDocView = bTemp;
+ bROSaveDocView = pROStates[nProp];
+ break;
+ case FILESYSTEM :
+ bSaveRelFSys = bTemp;
+ bROSaveRelFSys = pROStates[nProp];
+ break;
+ case INTERNET :
+ bSaveRelINet = bTemp;
+ bROSaveRelINet = pROStates[nProp];
+ break;
+ case UNPACKED :
+ bSaveUnpacked = bTemp;
+ bROSaveUnpacked = pROStates[nProp];
+ break;
+
+ case PRETTYPRINTING:
+ bDoPrettyPrinting = bTemp;
+ bRODoPrettyPrinting = pROStates[nProp];
+ break;
+
+ case WARNALIENFORMAT:
+ bWarnAlienFormat = bTemp;
+ bROWarnAlienFormat = pROStates[nProp];
+ break;
+
+ case LOADDOCPRINTER:
+ bLoadDocPrinter = bTemp;
+ bROLoadDocPrinter = pROStates[nProp];
+ break;
+
+ default :
+ DBG_ERRORFILE( "invalid index to load a path" );
+ }
+ }
+ else
+ {
+ DBG_ERROR( "Wrong Type!" );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ try
+ {
+ css::uno::Reference< css::uno::XInterface > xCFG = ::comphelper::ConfigurationHelper::openConfig(
+ ::utl::getProcessServiceFactory(),
+ ::rtl::OUString::createFromAscii("org.openoffice.Office.Recovery"),
+ ::comphelper::ConfigurationHelper::E_READONLY);
+
+ ::comphelper::ConfigurationHelper::readRelativeKey(
+ xCFG,
+ ::rtl::OUString::createFromAscii("AutoSave"),
+ ::rtl::OUString::createFromAscii("Enabled")) >>= bAutoSave;
+
+ ::comphelper::ConfigurationHelper::readRelativeKey(
+ xCFG,
+ ::rtl::OUString::createFromAscii("AutoSave"),
+ ::rtl::OUString::createFromAscii("TimeIntervall")) >>= nAutoSaveTime;
+ }
+ catch(const css::uno::Exception&)
+ { DBG_ERROR("Could not find needed informations for AutoSave feature."); }
+}
+
+SvtSaveOptions_Impl::~SvtSaveOptions_Impl()
+{}
+
+void SvtSaveOptions_Impl::Commit()
+{
+ Sequence< OUString > aOrgNames = GetPropertyNames();
+ OUString* pOrgNames = aOrgNames.getArray();
+ sal_Int32 nOrgCount = aOrgNames.getLength();
+
+ Sequence< OUString > aNames( nOrgCount );
+ Sequence< Any > aValues( nOrgCount );
+ OUString* pNames = aNames.getArray();
+ Any* pValues = aValues.getArray();
+ sal_Int32 nRealCount = 0;
+
+ for (sal_Int32 i=0; i<nOrgCount; ++i)
+ {
+ switch (i)
+ {
+ case TIMEINTERVALL :
+ if (!bROAutoSaveTime)
+ {
+ pValues[nRealCount] <<= nAutoSaveTime;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case USEUSERDATA :
+ if (!bROUseUserData)
+ {
+ pValues[nRealCount] <<= bUseUserData;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case CREATEBACKUP :
+ if (!bROBackup)
+ {
+ pValues[nRealCount] <<= bBackup;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case AUTOSAVE :
+ if (!bROAutoSave)
+ {
+ pValues[nRealCount] <<= bAutoSave;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case PROMPT :
+ if (!bROAutoSavePrompt)
+ {
+ pValues[nRealCount] <<= bAutoSavePrompt;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case EDITPROPERTY :
+ if (!bRODocInfSave)
+ {
+ pValues[nRealCount] <<= bDocInfSave;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case SAVEWORKINGSET :
+ if (!bROSaveWorkingSet)
+ {
+ pValues[nRealCount] <<= bSaveWorkingSet;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case SAVEDOCWINS :
+ if (!bROSaveDocWins)
+ {
+ pValues[nRealCount] <<= bSaveDocWins;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case SAVEVIEWINFO :
+ if (!bROSaveDocView)
+ {
+ pValues[nRealCount] <<= bSaveDocView;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case FILESYSTEM :
+ if (!bROSaveRelFSys)
+ {
+ pValues[nRealCount] <<= bSaveRelFSys;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case INTERNET :
+ if (!bROSaveRelINet)
+ {
+ pValues[nRealCount] <<= bSaveRelINet;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case UNPACKED :
+ if (!bROSaveUnpacked)
+ {
+ pValues[nRealCount] <<= bSaveUnpacked;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+ case PRETTYPRINTING:
+ if (!bRODoPrettyPrinting)
+ {
+ pValues[nRealCount] <<= bDoPrettyPrinting;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+
+ case WARNALIENFORMAT:
+ if (!bROWarnAlienFormat)
+ {
+ pValues[nRealCount] <<= bWarnAlienFormat;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+
+ case LOADDOCPRINTER:
+ if (!bROLoadDocPrinter)
+ {
+ pValues[nRealCount] <<= bLoadDocPrinter;
+ pNames[nRealCount] = pOrgNames[i];
+ ++nRealCount;
+ }
+ break;
+
+ default:
+ DBG_ERRORFILE( "invalid index to save a path" );
+ }
+ }
+
+ aNames.realloc(nRealCount);
+ aValues.realloc(nRealCount);
+ PutProperties( aNames, aValues );
+
+ css::uno::Reference< css::uno::XInterface > xCFG = ::comphelper::ConfigurationHelper::openConfig(
+ ::utl::getProcessServiceFactory(),
+ ::rtl::OUString::createFromAscii("org.openoffice.Office.Recovery"),
+ ::comphelper::ConfigurationHelper::E_STANDARD);
+
+ ::comphelper::ConfigurationHelper::writeRelativeKey(
+ xCFG,
+ ::rtl::OUString::createFromAscii("AutoSave"),
+ ::rtl::OUString::createFromAscii("TimeIntervall"),
+ css::uno::makeAny(nAutoSaveTime));
+
+ ::comphelper::ConfigurationHelper::writeRelativeKey(
+ xCFG,
+ ::rtl::OUString::createFromAscii("AutoSave"),
+ ::rtl::OUString::createFromAscii("Enabled"),
+ css::uno::makeAny(bAutoSave));
+
+ ::comphelper::ConfigurationHelper::flush(xCFG);
+}
+
+// -----------------------------------------------------------------------
+
+void SvtSaveOptions_Impl::Notify( const Sequence<rtl::OUString>& )
+{
+}
+
+
+class SvtLoadOptions_Impl : public utl::ConfigItem
+{
+
+ sal_Bool bLoadUserDefinedSettings;
+
+public:
+ SvtLoadOptions_Impl();
+ ~SvtLoadOptions_Impl();
+
+ virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
+ virtual void Commit();
+
+ void SetLoadUserSettings(sal_Bool b){bLoadUserDefinedSettings = b; SetModified();}
+ sal_Bool IsLoadUserSettings() const {return bLoadUserDefinedSettings;}
+};
+// -----------------------------------------------------------------------
+const sal_Char cUserDefinedSettings[] = "UserDefinedSettings";
+
+SvtLoadOptions_Impl::SvtLoadOptions_Impl()
+ : ConfigItem( OUString::createFromAscii("Office.Common/Load") )
+ , bLoadUserDefinedSettings( sal_False )
+{
+ Sequence< OUString > aNames(1);
+ aNames[0] = OUString::createFromAscii(cUserDefinedSettings);
+ Sequence< Any > aValues = GetProperties( aNames );
+ EnableNotification( aNames );
+ const Any* pValues = aValues.getConstArray();
+ DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
+ if (pValues[0].getValueTypeClass() == ::com::sun::star::uno::TypeClass_BOOLEAN)
+ bLoadUserDefinedSettings = *(sal_Bool *)pValues[0].getValue();
+}
+// -----------------------------------------------------------------------
+SvtLoadOptions_Impl::~SvtLoadOptions_Impl()
+{
+}
+// -----------------------------------------------------------------------
+void SvtLoadOptions_Impl::Commit()
+{
+ Sequence< OUString > aNames(1);
+ aNames[0] = OUString::createFromAscii(cUserDefinedSettings);
+ Sequence< Any > aValues( 1 );
+ aValues[0].setValue(&bLoadUserDefinedSettings, ::getBooleanCppuType());
+ PutProperties( aNames, aValues );
+}
+// -----------------------------------------------------------------------
+void SvtLoadOptions_Impl::Notify( const Sequence<rtl::OUString>& )
+{
+ DBG_ERRORFILE( "properties have been changed" );
+}
+// -----------------------------------------------------------------------
+
+namespace
+{
+ class LocalSingleton : public rtl::Static< osl::Mutex, LocalSingleton >
+ {
+ };
+}
+
+// -----------------------------------------------------------------------
+SvtSaveOptions::SvtSaveOptions()
+{
+ // Global access, must be guarded (multithreading)
+ ::osl::MutexGuard aGuard( LocalSingleton::get() );
+ if ( !pOptions )
+ {
+ RTL_LOGFILE_CONTEXT(aLog, "svtools ( ??? ) ::SvtSaveOptions_Impl::ctor()");
+ pOptions = new SvtLoadSaveOptions_Impl;
+ pOptions->pSaveOpt = new SvtSaveOptions_Impl;
+ pOptions->pLoadOpt = new SvtLoadOptions_Impl;
+
+ ItemHolder1::holdConfigItem(E_SAVEOPTIONS);
+ }
+ ++nRefCount;
+ pImp = pOptions;
+}
+
+// -----------------------------------------------------------------------
+
+SvtSaveOptions::~SvtSaveOptions()
+{
+ // Global access, must be guarded (multithreading)
+ ::osl::MutexGuard aGuard( LocalSingleton::get() );
+ if ( !--nRefCount )
+ {
+ if ( pOptions->pSaveOpt->IsModified() )
+ pOptions->pSaveOpt->Commit();
+ if ( pOptions->pLoadOpt->IsModified() )
+ pOptions->pLoadOpt->Commit();
+
+ DELETEZ( pOptions->pLoadOpt );
+ DELETEZ( pOptions->pSaveOpt );
+ DELETEZ( pOptions );
+ }
+}
+
+sal_Bool SvtSaveOptions::IsBackup() const
+{
+ return pImp->pSaveOpt->IsBackup();
+}
+
+sal_Bool SvtSaveOptions::IsSaveDocView() const
+{
+ return pImp->pSaveOpt->IsSaveDocView();
+}
+
+sal_Bool SvtSaveOptions::IsSaveRelINet() const
+{
+ return pImp->pSaveOpt->IsSaveRelINet();
+}
+
+sal_Bool SvtSaveOptions::IsSaveRelFSys() const
+{
+ return pImp->pSaveOpt->IsSaveRelFSys();
+}
+
+sal_Bool SvtSaveOptions::IsSaveUnpacked() const
+{
+ return pImp->pSaveOpt->IsSaveUnpacked();
+}
+
+sal_Bool SvtSaveOptions::IsLoadUserSettings() const
+{
+ return pImp->pLoadOpt->IsLoadUserSettings();
+}
+
+sal_Bool SvtSaveOptions::IsPrettyPrinting() const
+{
+ return pImp->pSaveOpt->IsPrettyPrintingEnabled();
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */