sc/inc/colorscale.hxx | 6 -- sc/inc/fillinfo.hxx | 1 sc/qa/unit/subsequent_filters_test4.cxx | 14 ----- sc/qa/unit/ucalc_condformat.cxx | 9 +-- sc/source/core/data/colorscale.cxx | 66 ++++++------------------- sc/source/ui/condformat/condformatdlgentry.cxx | 29 ++++++---- sc/uiconfig/scalc/ui/conditionaliconset.ui | 12 +--- 7 files changed, 41 insertions(+), 96 deletions(-)
New commits: commit 27be65a7d5326608f75839e3964ac322e88224a1 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Fri Sep 13 08:14:47 2024 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Fri Sep 13 11:23:11 2024 +0200 tdf#162938: Revert "tdf#61313 Replace the static ">="... ... with a dropdown of different operators" Why was this patch submitted in the first place? It added a call to convertToOldCondFormat in testTdf101104, testComplexIconSetsXLSX and testTdf64401 to make those tests pass but the issue was already reproducible with those files This reverts commit fcc5770dd1e33dcb4f4f0c28683569af5d1d8368. Change-Id: Ifd8904de26d39d23e52ec2188d917bec34ad93b7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173310 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index 85b57bb6e7b9..bc3b646fe457 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -48,13 +48,11 @@ private: ScConditionalFormat* mpFormat; Color maColor; ScColorScaleEntryType meType; - ScConditionMode meMode; void setListener(); public: - SC_DLLPUBLIC ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType = COLORSCALE_VALUE, - ScConditionMode eMode = ScConditionMode::Equal); + SC_DLLPUBLIC ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType = COLORSCALE_VALUE); SC_DLLPUBLIC ScColorScaleEntry(); ScColorScaleEntry(const ScColorScaleEntry& rEntry); ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& rEntry); @@ -76,9 +74,7 @@ public: SC_DLLPUBLIC OUString GetFormula( formula::FormulaGrammar::Grammar eGrammar ) const; ScColorScaleEntryType GetType() const { return meType;} - ScConditionMode GetMode() const { return meMode; } SC_DLLPUBLIC void SetType( ScColorScaleEntryType eType ); - SC_DLLPUBLIC void SetMode( ScConditionMode eMode ) { meMode = eMode; } void SetRepaintCallback(ScConditionalFormat* pParent); void SetRepaintCallback(const std::function<void()>& func); diff --git a/sc/inc/fillinfo.hxx b/sc/inc/fillinfo.hxx index e9c713373724..caecd6a7072b 100644 --- a/sc/inc/fillinfo.hxx +++ b/sc/inc/fillinfo.hxx @@ -92,7 +92,6 @@ struct ScIconSetInfo { sal_Int32 nIconIndex; ScIconSetType eIconSetType; - ScConditionMode eConditionMode; tools::Long mnHeight = 0; bool mbShowValue; }; diff --git a/sc/qa/unit/subsequent_filters_test4.cxx b/sc/qa/unit/subsequent_filters_test4.cxx index 31d2d9c5c4eb..0fc2b9d16767 100644 --- a/sc/qa/unit/subsequent_filters_test4.cxx +++ b/sc/qa/unit/subsequent_filters_test4.cxx @@ -884,17 +884,6 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testCondFormatThemeColor3XLSX) namespace { -// This function is used temporarily so we don't have to update test files. -void convertToOldCondFormat(const ScIconSetFormat* pIconSet) -{ - auto itr = pIconSet->begin(); - (*itr)->SetMode(ScConditionMode::Less); - (*itr)->SetValue((*(itr + 1))->GetValue()); - (*itr)->SetType((*(++itr))->GetType()); - for (; itr != pIconSet->end(); ++itr) - (*itr)->SetMode(ScConditionMode::EqGreater); -} - void testComplexIconSetsXLSX_Impl(const ScDocument& rDoc, SCCOL nCol, ScIconSetType eType) { ScConditionalFormat* pFormat = rDoc.GetCondFormat(nCol, 1, 0); @@ -917,7 +906,6 @@ void testCustomIconSetsXLSX_Impl(const ScDocument& rDoc, SCCOL nCol, SCROW nRow, CPPUNIT_ASSERT(pEntry); CPPUNIT_ASSERT_EQUAL(ScFormatEntry::Type::Iconset, pEntry->GetType()); const ScIconSetFormat* pIconSet = static_cast<const ScIconSetFormat*>(pEntry); - convertToOldCondFormat(pIconSet); std::unique_ptr<ScIconSetInfo> pInfo(pIconSet->GetIconSetInfo(ScAddress(nCol, nRow, 1))); if (nIndex == -1) CPPUNIT_ASSERT(!pInfo); @@ -966,7 +954,6 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testTdf101104) CPPUNIT_ASSERT(pEntry); CPPUNIT_ASSERT_EQUAL(ScFormatEntry::Type::Iconset, pEntry->GetType()); const ScIconSetFormat* pIconSet = static_cast<const ScIconSetFormat*>(pEntry); - convertToOldCondFormat(pIconSet); for (size_t i = 1; i < 10; ++i) { @@ -993,7 +980,6 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testTdf64401) CPPUNIT_ASSERT(pEntry); CPPUNIT_ASSERT_EQUAL(ScFormatEntry::Type::Iconset, pEntry->GetType()); const ScIconSetFormat* pIconSet = static_cast<const ScIconSetFormat*>(pEntry); - convertToOldCondFormat(pIconSet); for (size_t i = 0; i < 10; ++i) { diff --git a/sc/qa/unit/ucalc_condformat.cxx b/sc/qa/unit/ucalc_condformat.cxx index 9f7d7cf39443..87a169b1a2c5 100644 --- a/sc/qa/unit/ucalc_condformat.cxx +++ b/sc/qa/unit/ucalc_condformat.cxx @@ -731,9 +731,9 @@ CPPUNIT_TEST_FIXTURE(TestCondformat, testIconSet) ScIconSetFormat* pEntry = new ScIconSetFormat(m_pDoc); ScIconSetFormatData* pData = new ScIconSetFormatData; - pData->m_Entries.emplace_back(new ScColorScaleEntry(0, COL_BLUE, COLORSCALE_VALUE, ScConditionMode::EqGreater)); - pData->m_Entries.emplace_back(new ScColorScaleEntry(1, COL_GREEN, COLORSCALE_VALUE, ScConditionMode::EqGreater)); - pData->m_Entries.emplace_back(new ScColorScaleEntry(2, COL_RED, COLORSCALE_VALUE, ScConditionMode::Equal)); + pData->m_Entries.emplace_back(new ScColorScaleEntry(0, COL_BLUE)); + pData->m_Entries.emplace_back(new ScColorScaleEntry(1, COL_GREEN)); + pData->m_Entries.emplace_back(new ScColorScaleEntry(2, COL_RED)); pEntry->SetIconSetData(pData); m_pDoc->AddCondFormatData(pFormat->GetRange(), 0, 1); @@ -742,10 +742,11 @@ CPPUNIT_TEST_FIXTURE(TestCondformat, testIconSet) static struct { double nVal; sal_Int32 nIndex; } const aTests[] = { + { -1.0, 0 }, { 0.0, 0 }, { 1.0, 1 }, { 2.0, 2 }, - { 3.0, 1 } + { 3.0, 2 } }; for(size_t i = 0; i < SAL_N_ELEMENTS(aTests); ++i) { diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index 5c1ffe880dd6..24c662adffa9 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -154,17 +154,15 @@ bool ScFormulaListener::NeedsRepaint() const ScColorScaleEntry::ScColorScaleEntry(): mnVal(0), mpFormat(nullptr), - meType(COLORSCALE_VALUE), - meMode(ScConditionMode::Equal) + meType(COLORSCALE_VALUE) { } -ScColorScaleEntry::ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType, ScConditionMode eMode): +ScColorScaleEntry::ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType): mnVal(nVal), mpFormat(nullptr), maColor(rCol), - meType(eType), - meMode(eMode) + meType(eType) { } @@ -172,8 +170,7 @@ ScColorScaleEntry::ScColorScaleEntry(const ScColorScaleEntry& rEntry): mnVal(rEntry.mnVal), mpFormat(rEntry.mpFormat), maColor(rEntry.maColor), - meType(rEntry.meType), - meMode(rEntry.meMode) + meType(rEntry.meType) { setListener(); if(rEntry.mpCell) @@ -188,8 +185,7 @@ ScColorScaleEntry::ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& mnVal(rEntry.mnVal), mpFormat(rEntry.mpFormat), maColor(rEntry.maColor), - meType(rEntry.meType), - meMode(rEntry.meMode) + meType(rEntry.meType) { setListener(); if(rEntry.mpCell) @@ -1070,30 +1066,6 @@ void ScDataBarFormat::EnsureSize() } } -static bool Compare(double nVal1, double nVal2, const ScIconSetFormat::const_iterator& itr) -{ - switch ((*itr)->GetMode()) - { - case ScConditionMode::Equal: - return nVal1 == nVal2; - case ScConditionMode::Less: - return nVal1 < nVal2; - case ScConditionMode::Greater: - return nVal1 > nVal2; - case ScConditionMode::EqLess: - return nVal1 <= nVal2; - case ScConditionMode::EqGreater: - return nVal1 >= nVal2; - case ScConditionMode::NotEqual: - return nVal1 != nVal2; - - default: - break; - } - - return false; -} - ScIconSetFormatData::ScIconSetFormatData(ScIconSetFormatData const& rOther) : eIconSetType(rOther.eIconSetType) , mbShowValue(rOther.mbShowValue) @@ -1159,32 +1131,27 @@ std::unique_ptr<ScIconSetInfo> ScIconSetFormat::GetIconSetInfo(const ScAddress& // now we have for sure a value double nVal = rCell.getValue(); - if (mpFormatData->m_Entries.size() < 1) + if (mpFormatData->m_Entries.size() < 2) return nullptr; double nMin = GetMinValue(); double nMax = GetMaxValue(); - sal_Int32 nIndex = -1; - ScConditionMode eMode = ScConditionMode::EqGreater; + sal_Int32 nIndex = 0; const_iterator itr = begin(); - double nValRef = 0; + ++itr; + double nValMax = CalcValue(nMin, nMax, itr); - int i = 0; - while(itr != end()) + ++itr; + while(itr != end() && nVal >= nValMax) { - nValRef = CalcValue(nMin, nMax, itr); - if (Compare(nVal, nValRef, itr)) - { - nIndex = i; - eMode = (*itr)->GetMode(); - } - itr++; - i++; + ++nIndex; + nValMax = CalcValue(nMin, nMax, itr); + ++itr; } - if (nIndex == -1) - return nullptr; + if(nVal >= nValMax) + ++nIndex; std::unique_ptr<ScIconSetInfo> pInfo(new ScIconSetInfo); @@ -1217,7 +1184,6 @@ std::unique_ptr<ScIconSetInfo> ScIconSetFormat::GetIconSetInfo(const ScAddress& } pInfo->mbShowValue = mpFormatData->mbShowValue; - pInfo->eConditionMode = eMode; return pInfo; } diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx index 605b960c15de..0bff49e32f44 100644 --- a/sc/source/ui/condformat/condformatdlgentry.cxx +++ b/sc/source/ui/condformat/condformatdlgentry.cxx @@ -1250,9 +1250,9 @@ protected: private: std::unique_ptr<weld::Container> mxGrid; std::unique_ptr<weld::Image> mxImgIcon; + std::unique_ptr<weld::Label> mxFtEntry; std::unique_ptr<weld::Entry> mxEdEntry; std::unique_ptr<weld::ComboBox> mxLbEntryType; - std::unique_ptr<weld::ComboBox> mxConditionMode; weld::Container* mpContainer; public: @@ -1268,6 +1268,8 @@ public: } ScColorScaleEntry* CreateEntry(ScDocument& rDoc, const ScAddress& rPos) const; + + void SetFirstEntry(); }; ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry(weld::Container* pParent, ScIconSetType eType, const ScDocument* pDoc, sal_Int32 i, const ScColorScaleEntry* pEntry) @@ -1276,17 +1278,11 @@ ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry(weld::Container* pParent, ScIconS , mxImgIcon(mxBuilder->weld_image(u"icon"_ustr)) , mxEdEntry(mxBuilder->weld_entry(u"entry"_ustr)) , mxLbEntryType(mxBuilder->weld_combo_box(u"listbox"_ustr)) - , mxConditionMode(mxBuilder->weld_combo_box(u"conditionMode"_ustr)) , mpContainer(pParent) { mxImgIcon->set_from_icon_name(ScIconSetFormat::getIconName(eType, i)); if(pEntry) { - if (pEntry->GetMode() >= ScConditionMode::Equal && pEntry->GetMode() <= ScConditionMode::NotEqual) - mxConditionMode->set_active(static_cast<int>(pEntry->GetMode())); - else - assert(false && "ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry: Invalid condition mode"); - switch(pEntry->GetType()) { case COLORSCALE_VALUE: @@ -1312,7 +1308,6 @@ ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry(weld::Container* pParent, ScIconS else { mxLbEntryType->set_active(1); - mxConditionMode->set_active(0); } } @@ -1323,8 +1318,7 @@ ScIconSetFrmtDataEntry::~ScIconSetFrmtDataEntry() ScColorScaleEntry* ScIconSetFrmtDataEntry::CreateEntry(ScDocument& rDoc, const ScAddress& rPos) const { - sal_Int32 nTypePos = mxLbEntryType->get_active(); - sal_Int32 nModePos = mxConditionMode->get_active(); + sal_Int32 nPos = mxLbEntryType->get_active(); OUString aText = mxEdEntry->get_text(); ScColorScaleEntry* pEntry = new ScColorScaleEntry(); @@ -1334,7 +1328,7 @@ ScColorScaleEntry* ScIconSetFrmtDataEntry::CreateEntry(ScDocument& rDoc, const S (void)pNumberFormatter->IsNumberFormat(aText, nIndex, nVal); pEntry->SetValue(nVal); - switch(nTypePos) + switch(nPos) { case 0: pEntry->SetType(COLORSCALE_VALUE); @@ -1353,11 +1347,18 @@ ScColorScaleEntry* ScIconSetFrmtDataEntry::CreateEntry(ScDocument& rDoc, const S assert(false); } - pEntry->SetMode(static_cast<ScConditionMode>(nModePos)); - return pEntry; } +void ScIconSetFrmtDataEntry::SetFirstEntry() +{ + mxEdEntry->hide(); + mxLbEntryType->hide(); + mxFtEntry->hide(); + mxEdEntry->set_text("0"); + mxLbEntryType->set_active(1); +} + ScIconSetFrmtEntry::ScIconSetFrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScIconSetFormat* pFormat) : ScCondFrmtEntry(pParent, pDoc, rPos) , mxLbColorFormat(mxBuilder->weld_combo_box(u"colorformat"_ustr)) @@ -1384,6 +1385,7 @@ ScIconSetFrmtEntry::ScIconSetFrmtEntry(ScCondFormatList* pParent, ScDocument* pD mxIconParent.get(), eType, pDoc, i, pIconSetFormatData->m_Entries[i].get())); maEntries[i]->set_grid_top_attach(i); } + maEntries[0]->SetFirstEntry(); } else IconSetTypeHdl(*mxLbIconSetType); @@ -1417,6 +1419,7 @@ IMPL_LINK_NOARG( ScIconSetFrmtEntry, IconSetTypeHdl, weld::ComboBox&, void ) maEntries[i]->set_grid_top_attach(i); maEntries[i]->Show(); } + maEntries[0]->SetFirstEntry(); } OUString ScIconSetFrmtEntry::GetExpressionString() diff --git a/sc/uiconfig/scalc/ui/conditionaliconset.ui b/sc/uiconfig/scalc/ui/conditionaliconset.ui index 27c0bf9cdb96..88eef18113af 100644 --- a/sc/uiconfig/scalc/ui/conditionaliconset.ui +++ b/sc/uiconfig/scalc/ui/conditionaliconset.ui @@ -16,17 +16,11 @@ <property name="row-spacing">6</property> <property name="column-spacing">12</property> <child> - <object class="GtkComboBoxText" id="conditionMode"> + <object class="GtkLabel" id="label"> <property name="visible">True</property> <property name="can-focus">False</property> - <items> - <item context="conditionaliconset|conditionMode"> = </item> - <item context="conditionaliconset|conditionMode"> < </item> - <item context="conditionaliconset|conditionMode"> > </item> - <item context="conditionaliconset|conditionMode"> <= </item> - <item context="conditionaliconset|conditionMode"> >= </item> - <item context="conditionaliconset|conditionMode"> <> </item> - </items> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="conditionaliconset|label"> >= </property> </object> <packing> <property name="left-attach">1</property>