sc/inc/printopt.hxx | 5 +- sc/source/core/tool/printopt.cxx | 58 +++++++---------------- sc/source/ui/app/scmod.cxx | 2 test/source/sheet/globalsheetsettings.cxx | 74 ++++++++++++------------------ 4 files changed, 53 insertions(+), 86 deletions(-)
New commits: commit 6c09362c257b26ebf26fea0168f7db752212da70 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sun Nov 28 13:49:05 2021 +0200 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Sun Nov 28 13:41:48 2021 +0100 tdf#132145: Synchronize ScPrintCfg with configuration Change-Id: I903e8277fea5c223081244ae30dff31bbda7d554 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125904 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sc/inc/printopt.hxx b/sc/inc/printopt.hxx index 1f00ab1cf486..f646a3548246 100644 --- a/sc/inc/printopt.hxx +++ b/sc/inc/printopt.hxx @@ -69,16 +69,17 @@ private: // config item -class ScPrintCfg final : public ScPrintOptions, public utl::ConfigItem +class ScPrintCfg final : private ScPrintOptions, public utl::ConfigItem { private: static css::uno::Sequence<OUString> GetPropertyNames(); - + void ReadCfg(); virtual void ImplCommit() override; public: ScPrintCfg(); + const ScPrintOptions& GetOptions() const { return *this; } void SetOptions( const ScPrintOptions& rNew ); virtual void Notify( const css::uno::Sequence< OUString >& aPropertyNames ) override; diff --git a/sc/source/core/tool/printopt.cxx b/sc/source/core/tool/printopt.cxx index b598672b2442..930de81d6fa3 100644 --- a/sc/source/core/tool/printopt.cxx +++ b/sc/source/core/tool/printopt.cxx @@ -88,32 +88,24 @@ ScPrintCfg::ScPrintCfg() : ConfigItem( CFGPATH_PRINT ) { Sequence<OUString> aNames = GetPropertyNames(); - Sequence<Any> aValues = GetProperties(aNames); - const Any* pValues = aValues.getConstArray(); + EnableNotification(aNames); + ReadCfg(); +} + +void ScPrintCfg::ReadCfg() +{ + const Sequence<OUString> aNames = GetPropertyNames(); + const Sequence<Any> aValues = GetProperties(aNames); OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed"); if(aValues.getLength() != aNames.getLength()) return; - for(int nProp = 0; nProp < aNames.getLength(); nProp++) - { - OSL_ENSURE(pValues[nProp].hasValue(), "property value missing"); - if(pValues[nProp].hasValue()) - { - switch(nProp) - { - case SCPRINTOPT_EMPTYPAGES: - // reversed - SetSkipEmpty( !ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCPRINTOPT_ALLSHEETS: - SetAllSheets( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCPRINTOPT_FORCEBREAKS: - SetForceBreaks( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - } - } - } + if (bool bVal; aValues[SCPRINTOPT_EMPTYPAGES] >>= bVal) + SetSkipEmpty(!bVal); // reversed + if (bool bVal; aValues[SCPRINTOPT_ALLSHEETS] >>= bVal) + SetAllSheets(bVal); + if (bool bVal; aValues[SCPRINTOPT_FORCEBREAKS] >>= bVal) + SetForceBreaks(bVal); } void ScPrintCfg::ImplCommit() @@ -122,22 +114,9 @@ void ScPrintCfg::ImplCommit() Sequence<Any> aValues(aNames.getLength()); Any* pValues = aValues.getArray(); - for(int nProp = 0; nProp < aNames.getLength(); nProp++) - { - switch(nProp) - { - case SCPRINTOPT_EMPTYPAGES: - // reversed - pValues[nProp] <<= !GetSkipEmpty(); - break; - case SCPRINTOPT_ALLSHEETS: - pValues[nProp] <<= GetAllSheets(); - break; - case SCPRINTOPT_FORCEBREAKS: - pValues[nProp] <<= GetForceBreaks(); - break; - } - } + pValues[SCPRINTOPT_EMPTYPAGES] <<= !GetSkipEmpty(); // reversed + pValues[SCPRINTOPT_ALLSHEETS] <<= GetAllSheets(); + pValues[SCPRINTOPT_FORCEBREAKS] <<= GetForceBreaks(); PutProperties(aNames, aValues); } @@ -145,8 +124,9 @@ void ScPrintCfg::SetOptions( const ScPrintOptions& rNew ) { *static_cast<ScPrintOptions*>(this) = rNew; SetModified(); + Commit(); } -void ScPrintCfg::Notify( const css::uno::Sequence< OUString >& ) {} +void ScPrintCfg::Notify( const css::uno::Sequence< OUString >& ) { ReadCfg(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index dee33b48a509..d97a10248115 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -793,7 +793,7 @@ const ScPrintOptions& ScModule::GetPrintOptions() if ( !m_pPrintCfg ) m_pPrintCfg.reset( new ScPrintCfg ); - return *m_pPrintCfg; + return m_pPrintCfg->GetOptions(); } ScNavipiCfg& ScModule::GetNavipiCfg() diff --git a/test/source/sheet/globalsheetsettings.cxx b/test/source/sheet/globalsheetsettings.cxx index 0d07ace15abf..b707a770f921 100644 --- a/test/source/sheet/globalsheetsettings.cxx +++ b/test/source/sheet/globalsheetsettings.cxx @@ -30,24 +30,25 @@ void GlobalSheetSettings::testGlobalSheetSettingsProperties() uno::Reference<beans::XPropertySet> xGlobalSheetSettings(init(), UNO_QUERY_THROW); auto configProvider = css::configuration::theDefaultProvider::get(comphelper::getProcessComponentContext()); - css::uno::Sequence<css::uno::Any> args{ css::uno::Any(css::beans::NamedValue( - "nodepath", css::uno::makeAny(OUString("/org.openoffice.Office.Calc/Input")))) }; - css::uno::Reference<beans::XPropertySet> xRegNodeRO( - configProvider->createInstanceWithArguments( - "com.sun.star.configuration.ConfigurationAccess", args), - css::uno::UNO_QUERY_THROW); - css::uno::Reference<beans::XPropertySet> xRegNodeRW( - configProvider->createInstanceWithArguments( - "com.sun.star.configuration.ConfigurationUpdateAccess", args), - css::uno::UNO_QUERY_THROW); - css::uno::Reference<css::util::XChangesBatch> xBatch(xRegNodeRW, css::uno::UNO_QUERY_THROW); - - auto DoCheck = [&xGlobalSheetSettings, &xRegNodeRO, &xRegNodeRW, - &xBatch](const OUString& propName, const auto& origValue, const auto& newValue, - const OUString& regValueName) { + + auto DoCheck = [&xGlobalSheetSettings, &configProvider]( + const OUString& propName, const auto& origValue, const auto& newValue, + const OUString& regNodeName, const OUString& regValueName) { OString sMessage = "PropertyValue " + propName.toUtf8(); css::uno::Any aOrigValue(origValue), aNewValue(newValue); + css::uno::Sequence<css::uno::Any> args{ css::uno::Any( + css::beans::NamedValue("nodepath", css::uno::makeAny(regNodeName))) }; + css::uno::Reference<beans::XPropertySet> xRegNodeRO( + configProvider->createInstanceWithArguments( + "com.sun.star.configuration.ConfigurationAccess", args), + css::uno::UNO_QUERY_THROW); + css::uno::Reference<beans::XPropertySet> xRegNodeRW( + configProvider->createInstanceWithArguments( + "com.sun.star.configuration.ConfigurationUpdateAccess", args), + css::uno::UNO_QUERY_THROW); + css::uno::Reference<css::util::XChangesBatch> xBatch(xRegNodeRW, css::uno::UNO_QUERY_THROW); + // 1. Check initial value CPPUNIT_ASSERT_EQUAL_MESSAGE(sMessage.getStr(), aOrigValue, xGlobalSheetSettings->getPropertyValue(propName)); @@ -70,16 +71,17 @@ void GlobalSheetSettings::testGlobalSheetSettingsProperties() xGlobalSheetSettings->getPropertyValue(propName)); }; - DoCheck("MoveSelection", true, false, "MoveSelection"); - DoCheck("MoveDirection", sal_Int16(0), sal_Int16(1), "MoveSelectionDirection"); - DoCheck("EnterEdit", false, true, "SwitchToEditMode"); - DoCheck("ExtendFormat", false, true, "ExpandFormatting"); - DoCheck("RangeFinder", true, false, "ShowReference"); - DoCheck("ExpandReferences", false, true, "ExpandReference"); - DoCheck("MarkHeader", true, false, "HighlightSelection"); - DoCheck("UseTabCol", false, true, "UseTabCol"); - DoCheck("UsePrinterMetrics", false, true, "UsePrinterMetrics"); - DoCheck("ReplaceCellsWarning", true, false, "ReplaceCellsWarning"); + OUString node = "/org.openoffice.Office.Calc/Input"; + DoCheck("MoveSelection", true, false, node, "MoveSelection"); + DoCheck("MoveDirection", sal_Int16(0), sal_Int16(1), node, "MoveSelectionDirection"); + DoCheck("EnterEdit", false, true, node, "SwitchToEditMode"); + DoCheck("ExtendFormat", false, true, node, "ExpandFormatting"); + DoCheck("RangeFinder", true, false, node, "ShowReference"); + DoCheck("ExpandReferences", false, true, node, "ExpandReference"); + DoCheck("MarkHeader", true, false, node, "HighlightSelection"); + DoCheck("UseTabCol", false, true, node, "UseTabCol"); + DoCheck("UsePrinterMetrics", false, true, node, "UsePrinterMetrics"); + DoCheck("ReplaceCellsWarning", true, false, node, "ReplaceCellsWarning"); OUString propName; uno::Any aNewValue; @@ -162,25 +164,9 @@ void GlobalSheetSettings::testGlobalSheetSettingsProperties() CPPUNIT_ASSERT_EQUAL_MESSAGE("Unable to set PropertyValue LinkUpdateMode", sal_Int16(1), aLinkUpdateMode); - propName = "PrintAllSheets"; - bool aPrintAllSheets = true; - CPPUNIT_ASSERT(xGlobalSheetSettings->getPropertyValue(propName) >>= aPrintAllSheets); - CPPUNIT_ASSERT_MESSAGE("Unable to get PropertyValue PrintAllSheets", !aPrintAllSheets); - - aNewValue <<= true; - xGlobalSheetSettings->setPropertyValue(propName, aNewValue); - CPPUNIT_ASSERT(xGlobalSheetSettings->getPropertyValue(propName) >>= aPrintAllSheets); - CPPUNIT_ASSERT_MESSAGE("Unable to set PropertyValue PrintAllSheets", aPrintAllSheets); - - propName = "PrintEmptyPages"; - bool aPrintEmptyPages = true; - CPPUNIT_ASSERT(xGlobalSheetSettings->getPropertyValue(propName) >>= aPrintEmptyPages); - CPPUNIT_ASSERT_MESSAGE("Unable to get PropertyValue PrintEmptyPages", !aPrintEmptyPages); - - aNewValue <<= true; - xGlobalSheetSettings->setPropertyValue(propName, aNewValue); - CPPUNIT_ASSERT(xGlobalSheetSettings->getPropertyValue(propName) >>= aPrintEmptyPages); - CPPUNIT_ASSERT_MESSAGE("Unable to set PropertyValue PrintEmptyPages", aPrintEmptyPages); + node = "/org.openoffice.Office.Calc/Print/"; + DoCheck("PrintAllSheets", false, true, node + "Other", "AllSheets"); + DoCheck("PrintEmptyPages", false, true, node + "Page", "EmptyPages"); } }