1
0
Fork 0
libreoffice/sc/source/core/tool/appoptio.cxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

664 lines
22 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <appoptio.hxx>
#include <global.hxx>
#include <userlist.hxx>
#include <formula/compiler.hxx>
#include <miscuno.hxx>
#include <vector>
#include <osl/diagnose.h>
using namespace utl;
using namespace com::sun::star::uno;
// ScAppOptions - Application Options
ScAppOptions::ScAppOptions()
{
SetDefaults();
}
ScAppOptions::ScAppOptions( const ScAppOptions& rCpy )
{
*this = rCpy;
}
ScAppOptions::~ScAppOptions()
{
}
void ScAppOptions::SetDefaults()
{
if ( ScOptionsUtil::IsMetricSystem() )
eMetric = FieldUnit::CM; // default for countries with metric system
else
eMetric = FieldUnit::INCH; // default for others
nZoom = 100;
eZoomType = SvxZoomType::PERCENT;
bSynchronizeZoom = true;
nStatusFunc = ( 1 << SUBTOTAL_FUNC_SUM );
bAutoComplete = true;
bDetectiveAuto = true;
pLRUList.reset( new sal_uInt16[5] ); // sensible initialization
pLRUList[0] = SC_OPCODE_SUM;
pLRUList[1] = SC_OPCODE_AVERAGE;
pLRUList[2] = SC_OPCODE_MIN;
pLRUList[3] = SC_OPCODE_MAX;
pLRUList[4] = SC_OPCODE_IF;
nLRUFuncCount = 5;
nTrackContentColor = COL_TRANSPARENT;
nTrackInsertColor = COL_TRANSPARENT;
nTrackDeleteColor = COL_TRANSPARENT;
nTrackMoveColor = COL_TRANSPARENT;
eLinkMode = LM_ON_DEMAND;
nDefaultObjectSizeWidth = 8000;
nDefaultObjectSizeHeight = 5000;
mbShowSharedDocumentWarning = true;
meKeyBindingType = ScOptionsUtil::KEY_DEFAULT;
mbLinksInsertedLikeMSExcel = false;
}
ScAppOptions& ScAppOptions::operator=( const ScAppOptions& rCpy )
{
eMetric = rCpy.eMetric;
eZoomType = rCpy.eZoomType;
bSynchronizeZoom = rCpy.bSynchronizeZoom;
nZoom = rCpy.nZoom;
SetLRUFuncList( rCpy.pLRUList.get(), rCpy.nLRUFuncCount );
nStatusFunc = rCpy.nStatusFunc;
bAutoComplete = rCpy.bAutoComplete;
bDetectiveAuto = rCpy.bDetectiveAuto;
nTrackContentColor = rCpy.nTrackContentColor;
nTrackInsertColor = rCpy.nTrackInsertColor;
nTrackDeleteColor = rCpy.nTrackDeleteColor;
nTrackMoveColor = rCpy.nTrackMoveColor;
eLinkMode = rCpy.eLinkMode;
nDefaultObjectSizeWidth = rCpy.nDefaultObjectSizeWidth;
nDefaultObjectSizeHeight = rCpy.nDefaultObjectSizeHeight;
mbShowSharedDocumentWarning = rCpy.mbShowSharedDocumentWarning;
meKeyBindingType = rCpy.meKeyBindingType;
mbLinksInsertedLikeMSExcel = rCpy.mbLinksInsertedLikeMSExcel;
return *this;
}
void ScAppOptions::SetLRUFuncList( const sal_uInt16* pList, const sal_uInt16 nCount )
{
nLRUFuncCount = nCount;
if ( nLRUFuncCount > 0 )
{
pLRUList.reset( new sal_uInt16[nLRUFuncCount] );
for ( sal_uInt16 i=0; i<nLRUFuncCount; i++ )
pLRUList[i] = pList[i];
}
else
pLRUList.reset();
}
// Config Item containing app options
static void lcl_GetLastFunctions( Any& rDest, const ScAppOptions& rOpt )
{
tools::Long nCount = rOpt.GetLRUFuncListCount();
sal_uInt16* pUShorts = rOpt.GetLRUFuncList();
if ( nCount && pUShorts )
{
Sequence<sal_Int32> aSeq( nCount );
sal_Int32* pArray = aSeq.getArray();
for (tools::Long i=0; i<nCount; i++)
pArray[i] = pUShorts[i];
rDest <<= aSeq;
}
else
rDest <<= Sequence<sal_Int32>(0); // empty
}
static void lcl_GetSortList( Any& rDest )
{
const ScUserList& rUserList = ScGlobal::GetUserList();
size_t nCount = rUserList.size();
Sequence<OUString> aSeq( nCount );
OUString* pArray = aSeq.getArray();
for (size_t i=0; i<nCount; ++i)
pArray[i] = rUserList[sal::static_int_cast<sal_uInt16>(i)].GetString();
rDest <<= aSeq;
}
constexpr OUStringLiteral CFGPATH_LAYOUT = u"Office.Calc/Layout";
#define SCLAYOUTOPT_MEASURE 0
#define SCLAYOUTOPT_STATUSBAR 1
#define SCLAYOUTOPT_ZOOMVAL 2
#define SCLAYOUTOPT_ZOOMTYPE 3
#define SCLAYOUTOPT_SYNCZOOM 4
#define SCLAYOUTOPT_STATUSBARMULTI 5
constexpr OUStringLiteral CFGPATH_INPUT = u"Office.Calc/Input";
#define SCINPUTOPT_LASTFUNCS 0
#define SCINPUTOPT_AUTOINPUT 1
#define SCINPUTOPT_DET_AUTO 2
constexpr OUStringLiteral CFGPATH_REVISION = u"Office.Calc/Revision/Color";
#define SCREVISOPT_CHANGE 0
#define SCREVISOPT_INSERTION 1
#define SCREVISOPT_DELETION 2
#define SCREVISOPT_MOVEDENTRY 3
constexpr OUStringLiteral CFGPATH_CONTENT = u"Office.Calc/Content/Update";
#define SCCONTENTOPT_LINK 0
constexpr OUStringLiteral CFGPATH_SORTLIST = u"Office.Calc/SortList";
#define SCSORTLISTOPT_LIST 0
constexpr OUStringLiteral CFGPATH_MISC = u"Office.Calc/Misc";
#define SCMISCOPT_DEFOBJWIDTH 0
#define SCMISCOPT_DEFOBJHEIGHT 1
#define SCMISCOPT_SHOWSHAREDDOCWARN 2
constexpr OUStringLiteral CFGPATH_COMPAT = u"Office.Calc/Compatibility";
#define SCCOMPATOPT_KEY_BINDING 0
#define SCCOMPATOPT_LINK_LIKE_MS 1
// Default value of Layout/Other/StatusbarMultiFunction
#define SCLAYOUTOPT_STATUSBARMULTI_DEFAULTVAL 514
// Default value of Layout/Other/StatusbarFunction
#define SCLAYOUTOPT_STATUSBAR_DEFAULTVAL 1
// Legacy default value of Layout/Other/StatusbarFunction
// prior to multiple statusbar functions feature addition
#define SCLAYOUTOPT_STATUSBAR_DEFAULTVAL_LEGACY 9
static sal_uInt32 lcl_ConvertStatusBarFuncSetToSingle( sal_uInt32 nFuncSet )
{
if ( !nFuncSet )
return 0;
for ( sal_uInt32 nFunc = 1; nFunc < 32; ++nFunc )
if ( nFuncSet & ( 1U << nFunc ) )
return nFunc;
return 0;
}
Sequence<OUString> ScAppCfg::GetLayoutPropertyNames()
{
const bool bIsMetric = ScOptionsUtil::IsMetricSystem();
return {(bIsMetric ? u"Other/MeasureUnit/Metric"_ustr
: u"Other/MeasureUnit/NonMetric"_ustr), // SCLAYOUTOPT_MEASURE
u"Other/StatusbarFunction"_ustr, // SCLAYOUTOPT_STATUSBAR
u"Zoom/Value"_ustr, // SCLAYOUTOPT_ZOOMVAL
u"Zoom/Type"_ustr, // SCLAYOUTOPT_ZOOMTYPE
u"Zoom/Synchronize"_ustr, // SCLAYOUTOPT_SYNCZOOM
u"Other/StatusbarMultiFunction"_ustr}; // SCLAYOUTOPT_STATUSBARMULTI
}
Sequence<OUString> ScAppCfg::GetInputPropertyNames()
{
return {u"LastFunctions"_ustr, // SCINPUTOPT_LASTFUNCS
u"AutoInput"_ustr, // SCINPUTOPT_AUTOINPUT
u"DetectiveAuto"_ustr}; // SCINPUTOPT_DET_AUTO
}
Sequence<OUString> ScAppCfg::GetRevisionPropertyNames()
{
return {u"Change"_ustr, // SCREVISOPT_CHANGE
u"Insertion"_ustr, // SCREVISOPT_INSERTION
u"Deletion"_ustr, // SCREVISOPT_DELETION
u"MovedEntry"_ustr}; // SCREVISOPT_MOVEDENTRY
}
Sequence<OUString> ScAppCfg::GetContentPropertyNames()
{
return {u"Link"_ustr}; // SCCONTENTOPT_LINK
}
Sequence<OUString> ScAppCfg::GetSortListPropertyNames()
{
return {u"List"_ustr}; // SCSORTLISTOPT_LIST
}
Sequence<OUString> ScAppCfg::GetMiscPropertyNames()
{
return {u"DefaultObjectSize/Width"_ustr, // SCMISCOPT_DEFOBJWIDTH
u"DefaultObjectSize/Height"_ustr, // SCMISCOPT_DEFOBJHEIGHT
u"SharedDocument/ShowWarning"_ustr}; // SCMISCOPT_SHOWSHAREDDOCWARN
}
Sequence<OUString> ScAppCfg::GetCompatPropertyNames()
{
return {u"KeyBindings/BaseGroup"_ustr, // SCCOMPATOPT_KEY_BINDING
u"Links"_ustr }; // SCCOMPATOPT_LINK_LIKE_MS
}
ScAppCfg::ScAppCfg() :
aLayoutItem( CFGPATH_LAYOUT ),
aInputItem( CFGPATH_INPUT ),
aRevisionItem( CFGPATH_REVISION ),
aContentItem( CFGPATH_CONTENT ),
aSortListItem( CFGPATH_SORTLIST ),
aMiscItem( CFGPATH_MISC ),
aCompatItem( CFGPATH_COMPAT )
{
aLayoutItem.EnableNotification(GetLayoutPropertyNames());
ReadLayoutCfg();
aLayoutItem.SetCommitLink( LINK( this, ScAppCfg, LayoutCommitHdl ) );
aLayoutItem.SetNotifyLink( LINK( this, ScAppCfg, LayoutNotifyHdl ) );
aInputItem.EnableNotification(GetInputPropertyNames());
ReadInputCfg();
aInputItem.SetCommitLink( LINK( this, ScAppCfg, InputCommitHdl ) );
aInputItem.SetNotifyLink( LINK( this, ScAppCfg, InputNotifyHdl ) );
aRevisionItem.EnableNotification(GetRevisionPropertyNames());
ReadRevisionCfg();
aRevisionItem.SetCommitLink( LINK( this, ScAppCfg, RevisionCommitHdl ) );
aRevisionItem.SetNotifyLink( LINK( this, ScAppCfg, RevisionNotifyHdl ) );
aContentItem.EnableNotification(GetContentPropertyNames());
ReadContentCfg();
aContentItem.SetCommitLink( LINK( this, ScAppCfg, ContentCommitHdl ) );
aContentItem.SetNotifyLink( LINK( this, ScAppCfg, ContentNotifyHdl ) );
aSortListItem.EnableNotification(GetSortListPropertyNames());
ReadSortListCfg();
aSortListItem.SetCommitLink( LINK( this, ScAppCfg, SortListCommitHdl ) );
aSortListItem.SetNotifyLink( LINK( this, ScAppCfg, SortListNotifyHdl ) );
aMiscItem.EnableNotification(GetMiscPropertyNames());
ReadMiscCfg();
aMiscItem.SetCommitLink( LINK( this, ScAppCfg, MiscCommitHdl ) );
aMiscItem.SetNotifyLink( LINK( this, ScAppCfg, MiscNotifyHdl ) );
aCompatItem.EnableNotification(GetCompatPropertyNames());
ReadCompatCfg();
aCompatItem.SetCommitLink( LINK(this, ScAppCfg, CompatCommitHdl) );
aCompatItem.SetNotifyLink( LINK(this, ScAppCfg, CompatNotifyHdl) );
}
void ScAppCfg::ReadLayoutCfg()
{
const Sequence<OUString> aNames = GetLayoutPropertyNames();
const Sequence<Any> aValues = aLayoutItem.GetProperties(aNames);
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
if (aValues.getLength() != aNames.getLength())
return;
sal_uInt32 nStatusBarFuncSingle = 0;
sal_uInt32 nStatusBarFuncMulti = 0;
if (sal_Int32 nIntVal; aValues[SCLAYOUTOPT_MEASURE] >>= nIntVal)
SetAppMetric(static_cast<FieldUnit>(nIntVal));
if (sal_uInt32 nUIntVal; aValues[SCLAYOUTOPT_STATUSBAR] >>= nUIntVal)
nStatusBarFuncSingle = nUIntVal;
if (sal_uInt32 nUIntVal; aValues[SCLAYOUTOPT_STATUSBARMULTI] >>= nUIntVal)
nStatusBarFuncMulti = nUIntVal;
if (sal_Int32 nIntVal; aValues[SCLAYOUTOPT_ZOOMVAL] >>= nIntVal)
SetZoom(static_cast<sal_uInt16>(nIntVal));
if (sal_Int32 nIntVal; aValues[SCLAYOUTOPT_ZOOMTYPE] >>= nIntVal)
SetZoomType(static_cast<SvxZoomType>(nIntVal));
SetSynchronizeZoom(ScUnoHelpFunctions::GetBoolFromAny(aValues[SCLAYOUTOPT_SYNCZOOM]));
if (nStatusBarFuncMulti != SCLAYOUTOPT_STATUSBARMULTI_DEFAULTVAL)
SetStatusFunc(nStatusBarFuncMulti);
else if (nStatusBarFuncSingle != SCLAYOUTOPT_STATUSBAR_DEFAULTVAL
&& nStatusBarFuncSingle != SCLAYOUTOPT_STATUSBAR_DEFAULTVAL_LEGACY)
{
if (nStatusBarFuncSingle)
SetStatusFunc(1 << nStatusBarFuncSingle);
else
SetStatusFunc(0);
}
else
SetStatusFunc(SCLAYOUTOPT_STATUSBARMULTI_DEFAULTVAL);
}
void ScAppCfg::ReadInputCfg()
{
const Sequence<OUString> aNames = GetInputPropertyNames();
const Sequence<Any> aValues = aInputItem.GetProperties(aNames);
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
if (aValues.getLength() != aNames.getLength())
return;
if (Sequence<sal_Int32> aSeq; aValues[SCINPUTOPT_LASTFUNCS] >>= aSeq)
{
sal_Int32 nCount = aSeq.getLength();
if (nCount < SAL_MAX_UINT16)
{
sal_uInt16 nLRUCount = nCount;
std::vector<sal_uInt16> pUShorts(nLRUCount);
for (sal_uInt16 i = 0; i < nLRUCount; ++i)
pUShorts[i] = aSeq[i];
SetLRUFuncList(pUShorts.data(), nLRUCount);
}
}
SetAutoComplete(ScUnoHelpFunctions::GetBoolFromAny(aValues[SCINPUTOPT_AUTOINPUT]));
SetDetectiveAuto(ScUnoHelpFunctions::GetBoolFromAny(aValues[SCINPUTOPT_DET_AUTO]));
}
void ScAppCfg::ReadRevisionCfg()
{
const Sequence<OUString> aNames = GetRevisionPropertyNames();
const Sequence<Any> aValues = aRevisionItem.GetProperties(aNames);
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
if (aValues.getLength() != aNames.getLength())
return;
if (sal_Int32 nIntVal; aValues[SCREVISOPT_CHANGE] >>= nIntVal)
SetTrackContentColor(Color(ColorTransparency, nIntVal));
if (sal_Int32 nIntVal; aValues[SCREVISOPT_INSERTION] >>= nIntVal)
SetTrackInsertColor(Color(ColorTransparency, nIntVal));
if (sal_Int32 nIntVal; aValues[SCREVISOPT_DELETION] >>= nIntVal)
SetTrackDeleteColor(Color(ColorTransparency, nIntVal));
if (sal_Int32 nIntVal; aValues[SCREVISOPT_MOVEDENTRY] >>= nIntVal)
SetTrackMoveColor(Color(ColorTransparency, nIntVal));
}
void ScAppCfg::ReadContentCfg()
{
const Sequence<OUString> aNames = GetContentPropertyNames();
const Sequence<Any> aValues = aContentItem.GetProperties(aNames);
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
if (aValues.getLength() != aNames.getLength())
return;
if (sal_Int32 nIntVal; aValues[SCCONTENTOPT_LINK] >>= nIntVal)
SetLinkMode(static_cast<ScLkUpdMode>(nIntVal));
}
void ScAppCfg::ReadSortListCfg()
{
const Sequence<OUString> aNames = GetSortListPropertyNames();
const Sequence<Any> aValues = aSortListItem.GetProperties(aNames);
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
if (aValues.getLength() != aNames.getLength())
return;
if (Sequence<OUString> aSeq; aValues[SCSORTLISTOPT_LIST] >>= aSeq)
{
ScUserList aList(false); // Do not init defaults
// if setting is "default", keep default values
//TODO: mark "default" in a safe way
const bool bDefault = (aSeq.getLength() == 1 && aSeq[0] == "NULL");
if (bDefault)
{
aList.AddDefaults();
}
else
{
for (const OUString& rStr : aSeq)
{
aList.emplace_back(rStr);
}
}
ScGlobal::SetUserList(&aList);
}
}
void ScAppCfg::ReadMiscCfg()
{
const Sequence<OUString> aNames = GetMiscPropertyNames();
const Sequence<Any> aValues = aMiscItem.GetProperties(aNames);
OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
if (aValues.getLength() != aNames.getLength())
return;
if (sal_Int32 nIntVal; aValues[SCMISCOPT_DEFOBJWIDTH] >>= nIntVal)
SetDefaultObjectSizeWidth(nIntVal);
if (sal_Int32 nIntVal; aValues[SCMISCOPT_DEFOBJHEIGHT] >>= nIntVal)
SetDefaultObjectSizeHeight(nIntVal);
SetShowSharedDocumentWarning(
ScUnoHelpFunctions::GetBoolFromAny(aValues[SCMISCOPT_SHOWSHAREDDOCWARN]));
}
void ScAppCfg::ReadCompatCfg()
{
const Sequence<OUString> aNames = GetCompatPropertyNames();
const Sequence<Any> aValues = aCompatItem.GetProperties(aNames);
if (aValues.getLength() != aNames.getLength())
return;
sal_Int32 nIntVal = 0; // 0 = 'Default'
aValues[SCCOMPATOPT_KEY_BINDING] >>= nIntVal;
SetKeyBindingType(static_cast<ScOptionsUtil::KeyBindingType>(nIntVal));
if (aValues.getLength() > SCCOMPATOPT_LINK_LIKE_MS)
SetLinksInsertedLikeMSExcel(
ScUnoHelpFunctions::GetBoolFromAny(aValues[SCCOMPATOPT_LINK_LIKE_MS]));
}
IMPL_LINK_NOARG(ScAppCfg, LayoutCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetLayoutPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case SCLAYOUTOPT_MEASURE:
pValues[nProp] <<= static_cast<sal_Int32>(GetAppMetric());
break;
case SCLAYOUTOPT_STATUSBAR:
pValues[nProp] <<= lcl_ConvertStatusBarFuncSetToSingle( GetStatusFunc() );
break;
case SCLAYOUTOPT_ZOOMVAL:
pValues[nProp] <<= static_cast<sal_Int32>(GetZoom());
break;
case SCLAYOUTOPT_ZOOMTYPE:
pValues[nProp] <<= static_cast<sal_Int32>(GetZoomType());
break;
case SCLAYOUTOPT_SYNCZOOM:
pValues[nProp] <<= GetSynchronizeZoom();
break;
case SCLAYOUTOPT_STATUSBARMULTI:
pValues[nProp] <<= GetStatusFunc();
break;
}
}
aLayoutItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, LayoutNotifyHdl, ScLinkConfigItem&, void) { ReadLayoutCfg(); }
IMPL_LINK_NOARG(ScAppCfg, InputCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetInputPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case SCINPUTOPT_LASTFUNCS:
lcl_GetLastFunctions( pValues[nProp], *this );
break;
case SCINPUTOPT_AUTOINPUT:
pValues[nProp] <<= GetAutoComplete();
break;
case SCINPUTOPT_DET_AUTO:
pValues[nProp] <<= GetDetectiveAuto();
break;
}
}
aInputItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, InputNotifyHdl, ScLinkConfigItem&, void) { ReadInputCfg(); }
IMPL_LINK_NOARG(ScAppCfg, RevisionCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetRevisionPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case SCREVISOPT_CHANGE:
pValues[nProp] <<= GetTrackContentColor();
break;
case SCREVISOPT_INSERTION:
pValues[nProp] <<= GetTrackInsertColor();
break;
case SCREVISOPT_DELETION:
pValues[nProp] <<= GetTrackDeleteColor();
break;
case SCREVISOPT_MOVEDENTRY:
pValues[nProp] <<= GetTrackMoveColor();
break;
}
}
aRevisionItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, RevisionNotifyHdl, ScLinkConfigItem&, void) { ReadRevisionCfg(); }
IMPL_LINK_NOARG(ScAppCfg, ContentCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetContentPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case SCCONTENTOPT_LINK:
pValues[nProp] <<= static_cast<sal_Int32>(GetLinkMode());
break;
}
}
aContentItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, ContentNotifyHdl, ScLinkConfigItem&, void) { ReadContentCfg(); }
IMPL_LINK_NOARG(ScAppCfg, SortListCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetSortListPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case SCSORTLISTOPT_LIST:
lcl_GetSortList( pValues[nProp] );
break;
}
}
aSortListItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, SortListNotifyHdl, ScLinkConfigItem&, void) { ReadSortListCfg(); }
IMPL_LINK_NOARG(ScAppCfg, MiscCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetMiscPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case SCMISCOPT_DEFOBJWIDTH:
pValues[nProp] <<= GetDefaultObjectSizeWidth();
break;
case SCMISCOPT_DEFOBJHEIGHT:
pValues[nProp] <<= GetDefaultObjectSizeHeight();
break;
case SCMISCOPT_SHOWSHAREDDOCWARN:
pValues[nProp] <<= GetShowSharedDocumentWarning();
break;
}
}
aMiscItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, MiscNotifyHdl, ScLinkConfigItem&, void) { ReadMiscCfg(); }
IMPL_LINK_NOARG(ScAppCfg, CompatCommitHdl, ScLinkConfigItem&, void)
{
Sequence<OUString> aNames = GetCompatPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
{
switch(nProp)
{
case SCCOMPATOPT_KEY_BINDING:
pValues[nProp] <<= static_cast<sal_Int32>(GetKeyBindingType());
break;
case SCCOMPATOPT_LINK_LIKE_MS:
pValues[nProp] <<= GetLinksInsertedLikeMSExcel();
break;
}
}
aCompatItem.PutProperties(aNames, aValues);
}
IMPL_LINK_NOARG(ScAppCfg, CompatNotifyHdl, ScLinkConfigItem&, void) { ReadCompatCfg(); }
void ScAppCfg::SetOptions( const ScAppOptions& rNew )
{
*static_cast<ScAppOptions*>(this) = rNew;
aLayoutItem.SetModified();
aInputItem.SetModified();
aRevisionItem.SetModified();
aContentItem.SetModified();
aSortListItem.SetModified();
aMiscItem.SetModified();
aCompatItem.SetModified();
aLayoutItem.Commit();
aInputItem.Commit();
aRevisionItem.Commit();
aContentItem.Commit();
aSortListItem.Commit();
aMiscItem.Commit();
aCompatItem.Commit();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */