summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-09-28 10:17:04 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-10-01 08:17:07 +0200
commit30e0a64209f11ee596bcdd9eda1a320217ef31cd (patch)
treec5adba0e39c943a02d68585a79c582910dea1310
parent39f563ca59cd70a208c5fbc81e40bbe51d689ee4 (diff)
loplugin:useuniqueptr in ScCondFormatData
Change-Id: I93c906bfb84143ff101577e8e1ef8f5ffb07a0a7 Reviewed-on: https://gerrit.libreoffice.org/61114 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sc/inc/colorscale.hxx6
-rw-r--r--sc/inc/conditio.hxx18
-rw-r--r--sc/inc/fillinfo.hxx3
-rw-r--r--sc/qa/unit/ucalc_condformat.cxx3
-rw-r--r--sc/source/core/data/colorscale.cxx19
-rw-r--r--sc/source/core/data/conditio.cxx12
-rw-r--r--sc/source/core/data/fillinfo.cxx12
-rw-r--r--sc/source/ui/view/output.cxx18
8 files changed, 49 insertions, 42 deletions
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx
index 90889484ab07..fcfa3fa3966d 100644
--- a/sc/inc/colorscale.hxx
+++ b/sc/inc/colorscale.hxx
@@ -268,7 +268,7 @@ public:
virtual void SetParent(ScConditionalFormat* pParent) override;
- Color* GetColor(const ScAddress& rAddr) const;
+ boost::optional<Color> GetColor(const ScAddress& rAddr) const;
void AddEntry(ScColorScaleEntry* pEntry);
virtual void UpdateReference( sc::RefUpdateContext& rCxt ) override;
@@ -303,7 +303,7 @@ public:
virtual void SetParent(ScConditionalFormat* pParent) override;
- ScDataBarInfo* GetDataBarInfo(const ScAddress& rAddr) const;
+ std::unique_ptr<ScDataBarInfo> GetDataBarInfo(const ScAddress& rAddr) const;
void SetDataBarData( ScDataBarFormatData* pData );
const ScDataBarFormatData* GetDataBarData() const;
@@ -365,7 +365,7 @@ public:
virtual void SetParent(ScConditionalFormat* pParent) override;
- ScIconSetInfo* GetIconSetInfo(const ScAddress& rAddr) const;
+ std::unique_ptr<ScIconSetInfo> GetIconSetInfo(const ScAddress& rAddr) const;
void SetIconSetData( ScIconSetFormatData* pData );
const ScIconSetFormatData* GetIconSetData() const;
diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx
index be9c1362742c..e1bda2ba71d7 100644
--- a/sc/inc/conditio.hxx
+++ b/sc/inc/conditio.hxx
@@ -22,6 +22,7 @@
#include "global.hxx"
#include <tools/solar.h>
+#include <tools/color.hxx>
#include "address.hxx"
#include <formula/grammar.hxx>
#include "scdllapi.h"
@@ -36,6 +37,7 @@
#include <tools/date.hxx>
#include <tools/link.hxx>
+#include <boost/optional.hpp>
#include <map>
#include <memory>
#include <set>
@@ -43,7 +45,6 @@
class ScFormulaCell;
class ScTokenArray;
struct ScRefCellValue;
-class Color;
namespace sc {
@@ -211,14 +212,13 @@ struct ScIconSetInfo;
struct ScCondFormatData
{
- ScCondFormatData():
- pColorScale(nullptr),
- pDataBar(nullptr),
- pIconSet(nullptr) {}
-
- Color* pColorScale;
- ScDataBarInfo* pDataBar;
- ScIconSetInfo* pIconSet;
+ ScCondFormatData();
+ ScCondFormatData(ScCondFormatData&&);
+ ~ScCondFormatData();
+
+ boost::optional<Color> mxColorScale;
+ std::unique_ptr<ScDataBarInfo> pDataBar;
+ std::unique_ptr<ScIconSetInfo> pIconSet;
OUString aStyleName;
};
diff --git a/sc/inc/fillinfo.hxx b/sc/inc/fillinfo.hxx
index 41cac93beae9..6b9ff623bf6a 100644
--- a/sc/inc/fillinfo.hxx
+++ b/sc/inc/fillinfo.hxx
@@ -28,6 +28,7 @@
#include "colorscale.hxx"
#include "cellvalue.hxx"
#include <o3tl/typed_flags_set.hxx>
+#include <boost/optional.hpp>
class SfxItemSet;
class SvxBrushItem;
@@ -133,7 +134,7 @@ struct CellInfo
const ScPatternAttr* pPatternAttr;
const SfxItemSet* pConditionSet;
- std::unique_ptr<const Color> pColorScale;
+ boost::optional<Color> mxColorScale;
std::unique_ptr<const ScDataBarInfo> pDataBar;
std::unique_ptr<const ScIconSetInfo> pIconSet;
diff --git a/sc/qa/unit/ucalc_condformat.cxx b/sc/qa/unit/ucalc_condformat.cxx
index d2bf5d23c6df..5adf22ec57ae 100644
--- a/sc/qa/unit/ucalc_condformat.cxx
+++ b/sc/qa/unit/ucalc_condformat.cxx
@@ -574,9 +574,8 @@ void Test::testIconSet()
for(size_t i = 0; i < SAL_N_ELEMENTS(aTests); ++i)
{
m_pDoc->SetValue(0,0,0,aTests[i].nVal);
- ScIconSetInfo* pInfo = pEntry->GetIconSetInfo(ScAddress(0,0,0));
+ std::unique_ptr<ScIconSetInfo> pInfo = pEntry->GetIconSetInfo(ScAddress(0,0,0));
CPPUNIT_ASSERT_EQUAL(aTests[i].nIndex, pInfo->nIconIndex);
- delete pInfo;
}
delete pEntry;
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index 7b79ec56beb8..da205819e895 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -585,17 +585,17 @@ double ScColorScaleFormat::CalcValue(double nMin, double nMax, const ScColorScal
return (*itr)->GetValue();
}
-Color* ScColorScaleFormat::GetColor( const ScAddress& rAddr ) const
+boost::optional<Color> ScColorScaleFormat::GetColor( const ScAddress& rAddr ) const
{
ScRefCellValue rCell(*mpDoc, rAddr);
if(!rCell.hasNumeric())
- return nullptr;
+ return boost::optional<Color>();
// now we have for sure a value
double nVal = rCell.getValue();
if (maColorScales.size() < 2)
- return nullptr;
+ return boost::optional<Color>();
double nMin = std::numeric_limits<double>::max();
double nMax = std::numeric_limits<double>::min();
@@ -603,7 +603,7 @@ Color* ScColorScaleFormat::GetColor( const ScAddress& rAddr ) const
// this check is for safety
if(nMin >= nMax)
- return nullptr;
+ return boost::optional<Color>();
ScColorScaleEntries::const_iterator itr = begin();
double nValMin = CalcValue(nMin, nMax, itr);
@@ -624,7 +624,7 @@ Color* ScColorScaleFormat::GetColor( const ScAddress& rAddr ) const
Color aColor = CalcColor(nVal, nValMin, rColMin, nValMax, rColMax);
- return new Color(aColor);
+ return aColor;
}
void ScColorScaleFormat::UpdateReference( sc::RefUpdateContext& rCxt )
@@ -832,7 +832,7 @@ double ScDataBarFormat::getMax(double nMin, double nMax) const
return mpFormatData->mpUpperLimit->GetValue();
}
-ScDataBarInfo* ScDataBarFormat::GetDataBarInfo(const ScAddress& rAddr) const
+std::unique_ptr<ScDataBarInfo> ScDataBarFormat::GetDataBarInfo(const ScAddress& rAddr) const
{
ScRefCellValue rCell(*mpDoc, rAddr);
if(!rCell.hasNumeric())
@@ -849,7 +849,7 @@ ScDataBarInfo* ScDataBarFormat::GetDataBarInfo(const ScAddress& rAddr) const
double nValue = rCell.getValue();
- ScDataBarInfo* pInfo = new ScDataBarInfo;
+ std::unique_ptr<ScDataBarInfo> pInfo(new ScDataBarInfo);
if(mpFormatData->meAxisPosition == databar::NONE)
{
if(nValue <= nMin)
@@ -1023,7 +1023,7 @@ const ScIconSetFormatData* ScIconSetFormat::GetIconSetData() const
return mpFormatData.get();
}
-ScIconSetInfo* ScIconSetFormat::GetIconSetInfo(const ScAddress& rAddr) const
+std::unique_ptr<ScIconSetInfo> ScIconSetFormat::GetIconSetInfo(const ScAddress& rAddr) const
{
ScRefCellValue rCell(*mpDoc, rAddr);
if(!rCell.hasNumeric())
@@ -1054,7 +1054,7 @@ ScIconSetInfo* ScIconSetFormat::GetIconSetInfo(const ScAddress& rAddr) const
if(nVal >= nValMax)
++nIndex;
- ScIconSetInfo* pInfo = new ScIconSetInfo;
+ std::unique_ptr<ScIconSetInfo> pInfo(new ScIconSetInfo);
if(mpFormatData->mbReverse)
{
@@ -1068,7 +1068,6 @@ ScIconSetInfo* ScIconSetFormat::GetIconSetInfo(const ScAddress& rAddr) const
sal_Int32 nCustomIndex = mpFormatData->maCustomVector[nIndex].second;
if (nCustomIndex == -1)
{
- delete pInfo;
return nullptr;
}
diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index 546953c0dfd8..f2799f366005 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -42,6 +42,7 @@
#include <cellvalue.hxx>
#include <editutil.hxx>
#include <tokenarray.hxx>
+#include <fillinfo.hxx>
#include <refupdatecontext.hxx>
#include <formula/errorcodes.hxx>
#include <svl/sharedstring.hxx>
@@ -1824,10 +1825,10 @@ ScCondFormatData ScConditionalFormat::GetData( ScRefCellValue& rCell, const ScAd
if (rEntry.IsCellValid(rCell, rPos))
aData.aStyleName = rEntry.GetStyle();
}
- else if((*itr)->GetType() == ScFormatEntry::Type::Colorscale && !aData.pColorScale)
+ else if((*itr)->GetType() == ScFormatEntry::Type::Colorscale && !aData.mxColorScale)
{
const ScColorScaleFormat& rEntry = static_cast<const ScColorScaleFormat&>(**itr);
- aData.pColorScale = rEntry.GetColor(rPos);
+ aData.mxColorScale = rEntry.GetColor(rPos);
}
else if((*itr)->GetType() == ScFormatEntry::Type::Databar && !aData.pDataBar)
{
@@ -2299,4 +2300,11 @@ void ScConditionalFormatList::CalcAll()
}
+ScCondFormatData::ScCondFormatData() {}
+
+ScCondFormatData::ScCondFormatData(ScCondFormatData&&) = default;
+
+ScCondFormatData::~ScCondFormatData() {}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx
index 7c78d4dd5dc6..3a06da0b7c0d 100644
--- a/sc/source/core/data/fillinfo.cxx
+++ b/sc/source/core/data/fillinfo.cxx
@@ -327,21 +327,21 @@ bool handleConditionalFormat(ScConditionalFormatList& rCondFormList, const std::
// if style is not there, treat like no condition
}
- if(aData.pColorScale)
+ if(aData.mxColorScale)
{
- pInfo->pColorScale.reset(aData.pColorScale);
+ pInfo->mxColorScale = aData.mxColorScale;
bFound = true;
}
if(aData.pDataBar)
{
- pInfo->pDataBar.reset(aData.pDataBar);
+ pInfo->pDataBar = std::move(aData.pDataBar);
bFound = true;
}
if(aData.pIconSet)
{
- pInfo->pIconSet.reset(aData.pIconSet);
+ pInfo->pIconSet = std::move(aData.pIconSet);
bFound = true;
}
}
@@ -700,10 +700,10 @@ void ScDocument::FillInfo(
bAnyShadow = true;
}
}
- if( bAnyCondition && pInfo->pColorScale)
+ if( bAnyCondition && pInfo->mxColorScale)
{
pRowInfo[nArrRow].bEmptyBack = false;
- pInfo->pBackground = new SvxBrushItem(*pInfo->pColorScale, ATTR_BACKGROUND);
+ pInfo->pBackground = new SvxBrushItem(*pInfo->mxColorScale, ATTR_BACKGROUND);
}
}
}
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 95303e7e7664..9555b8f72b97 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -784,8 +784,8 @@ static bool lcl_EqualBack( const RowInfo& rFirst, const RowInfo& rOther,
for ( nX=nX1; nX<=nX2; nX++ )
{
- const Color* pCol1 = rFirst.pCellInfo[nX+1].pColorScale.get();
- const Color* pCol2 = rOther.pCellInfo[nX+1].pColorScale.get();
+ boost::optional<Color> const & pCol1 = rFirst.pCellInfo[nX+1].mxColorScale;
+ boost::optional<Color> const & pCol2 = rOther.pCellInfo[nX+1].mxColorScale;
if( (pCol1 && !pCol2) || (!pCol1 && pCol2) )
return false;
@@ -919,7 +919,7 @@ void drawIconSets(vcl::RenderContext& rRenderContext, const ScIconSetInfo* pOldI
rRenderContext.DrawBitmapEx( Point( rRect.Left() + 2 * nOneX, rRect.Top() + 2 * nOneY), Size(aOrigSize, aOrigSize), rIcon );
}
-void drawCells(vcl::RenderContext& rRenderContext, const Color* pColor, const SvxBrushItem* pBackground, const Color*& pOldColor, const SvxBrushItem*& pOldBackground,
+void drawCells(vcl::RenderContext& rRenderContext, boost::optional<Color> const & pColor, const SvxBrushItem* pBackground, boost::optional<Color>& pOldColor, const SvxBrushItem*& pOldBackground,
tools::Rectangle& rRect, long nPosX, long nLayoutSign, long nOneX, long nOneY, const ScDataBarInfo* pDataBarInfo, const ScDataBarInfo*& pOldDataBarInfo,
const ScIconSetInfo* pIconSetInfo, const ScIconSetInfo*& pOldIconSetInfo,
sc::IconSetBitmapMap & rIconSetBitmapMap)
@@ -981,7 +981,7 @@ void drawCells(vcl::RenderContext& rRenderContext, const Color* pColor, const Sv
else if(pBackground)
{
pOldBackground = pBackground;
- pOldColor = nullptr;
+ pOldColor.reset();
}
if(pDataBarInfo)
@@ -1069,7 +1069,7 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext)
const SvxBrushItem* pOldBackground = nullptr;
const SvxBrushItem* pBackground = nullptr;
- const Color* pOldColor = nullptr;
+ boost::optional<Color> pOldColor;
const ScDataBarInfo* pOldDataBarInfo = nullptr;
const ScIconSetInfo* pOldIconSetInfo = nullptr;
SCCOL nMergedCols = 1;
@@ -1114,7 +1114,7 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext)
pBackground = lcl_FindBackground( mpDoc, nX, nY, nTab );
}
- const Color* pColor = pInfo->pColorScale.get();
+ boost::optional<Color> const & pColor = pInfo->mxColorScale;
const ScDataBarInfo* pDataBarInfo = pInfo->pDataBar.get();
const ScIconSetInfo* pIconSetInfo = pInfo->pIconSet.get();
@@ -1146,7 +1146,7 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext)
if (bWorksInPixels)
nPosXLogic = rRenderContext.PixelToLogic(Point(nPosX, 0)).X();
- drawCells(rRenderContext, nullptr, nullptr, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, nullptr, pOldDataBarInfo, nullptr, pOldIconSetInfo, mpDoc->GetIconSetBitmapMap());
+ drawCells(rRenderContext, boost::optional<Color>(), nullptr, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, nullptr, pOldDataBarInfo, nullptr, pOldIconSetInfo, mpDoc->GetIconSetBitmapMap());
nArrY += nSkip;
}
@@ -1632,7 +1632,7 @@ void ScOutputData::DrawRotatedFrame(vcl::RenderContext& rRenderContext)
// high contrast for cell borders and backgrounds -> empty background
pBackground = ScGlobal::GetEmptyBrushItem();
}
- if (!pInfo->pColorScale)
+ if (!pInfo->mxColorScale)
{
const Color& rColor = pBackground->GetColor();
if (rColor.GetTransparency() != 255)
@@ -1660,7 +1660,7 @@ void ScOutputData::DrawRotatedFrame(vcl::RenderContext& rRenderContext)
else
{
tools::Polygon aPoly(4, aPoints);
- const Color* pColor = pInfo->pColorScale.get();
+ boost::optional<Color> const & pColor = pInfo->mxColorScale;
// for DrawPolygon, whitout Pen one pixel is left out
// to the right and below...