LibreOffice Module sc (master) 1
colorscale.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
9
10#pragma once
11
12#include <formula/grammar.hxx>
13#include <tools/color.hxx>
14#include "conditio.hxx"
15#include "document.hxx"
16
17#include <memory>
18#include <vector>
19#include <optional>
20
21//TODO: merge this with conditio.hxx
22
23class ScFormulaCell;
24class ScTokenArray;
25struct ScDataBarInfo;
26class BitmapEx;
27
28// don't change the order
29// they are also used in the dialog to determine the position
30// in the list box
32{
40};
41
43{
44private:
45 double mnVal;
46 std::unique_ptr<ScFormulaCell> mpCell;
47 std::unique_ptr<ScFormulaListener> mpListener;
51
52 void setListener();
53
54public:
55 ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType = COLORSCALE_VALUE);
59 ~ScColorScaleEntry() COVERITY_NOEXCEPT_FALSE;
60
61 const Color& GetColor() const { return maColor;}
62 void SetColor(const Color&);
63 double GetValue() const;
64 void SetValue(double nValue);
65 void SetFormula(const OUString& rFormula, ScDocument& rDoc, const ScAddress& rAddr,
67
68 void UpdateReference( const sc::RefUpdateContext& rCxt );
69 void UpdateInsertTab( const sc::RefUpdateInsertTabContext& rCxt );
70 void UpdateDeleteTab( const sc::RefUpdateDeleteTabContext& rCxt );
71 void UpdateMoveTab( const sc::RefUpdateMoveTabContext& rCxt );
72
73 const ScTokenArray* GetFormula() const;
74 OUString GetFormula( formula::FormulaGrammar::Grammar eGrammar ) const;
75
77 void SetType( ScColorScaleEntryType eType );
78
79 void SetRepaintCallback(ScConditionalFormat* pParent);
80 void SetRepaintCallback(const std::function<void()>& func);
81};
82
83namespace databar
84{
85
87{
90 MIDDLE
91};
92
93}
94
96{
98 maAxisColor(COL_BLACK),
99 mbGradient(true),
100 mbNeg(true),
101 meAxisPosition(databar::AUTOMATIC),
102 mnMinLength(0),
103 mnMaxLength(100),
104 mbOnlyBar(false),
105 mpUpperLimit(new ScColorScaleEntry()),
106 mpLowerLimit(new ScColorScaleEntry())
107 {}
108
110 maPositiveColor(r.maPositiveColor),
111 maAxisColor(r.maAxisColor),
112 mbGradient(r.mbGradient),
113 mbNeg(r.mbNeg),
114 meAxisPosition(r.meAxisPosition),
115 mnMinLength(r.mnMinLength),
116 mnMaxLength(r.mnMaxLength),
117 mbOnlyBar(r.mbOnlyBar)
118 {
119 mxNegativeColor = r.mxNegativeColor;
120
121 if(r.mpLowerLimit)
122 mpLowerLimit.reset( new ScColorScaleEntry(*r.mpLowerLimit));
123 else
124 mpLowerLimit.reset(new ScColorScaleEntry());
125 if(r.mpUpperLimit)
126 mpUpperLimit.reset( new ScColorScaleEntry(*r.mpUpperLimit));
127 else
128 mpUpperLimit.reset(new ScColorScaleEntry());
129 }
130
140 std::optional<Color> mxNegativeColor;
159 bool mbNeg; //differentiate between negative values
178
183
184 std::unique_ptr<ScColorScaleEntry, o3tl::default_delete<ScColorScaleEntry>> mpUpperLimit;
185 std::unique_ptr<ScColorScaleEntry, o3tl::default_delete<ScColorScaleEntry>> mpLowerLimit;
186};
187
189{
213
215 const char* pName;
217 sal_Int32 nElements;
218};
219
221{
222public:
224 virtual ~ScColorFormat() override;
225
226 const ScRangeList& GetRange() const;
227
228 virtual void SetParent(ScConditionalFormat* pParent) override;
229
230 virtual void startRendering() override;
231 virtual void endRendering() override;
232
233protected:
234 std::vector<double>& getValues() const;
235
236 double getMinValue() const;
237 double getMaxValue() const;
238
240
241private:
242
244 {
245 std::vector<double> maValues;
246 };
247 mutable std::unique_ptr<ScColorFormatCache> mpCache;
248};
249
250typedef std::vector<std::unique_ptr<ScColorScaleEntry, o3tl::default_delete<ScColorScaleEntry>>> ScColorScaleEntries;
251
253{
254private:
256
257 double GetMinValue() const;
258 double GetMaxValue() const;
259
260 void calcMinMax(double& nMin, double& nMax) const;
261 double CalcValue(double nMin, double nMax, const ScColorScaleEntries::const_iterator& rItr) const;
262public:
264 ScColorScaleFormat(ScDocument* pDoc, const ScColorScaleFormat& rFormat);
265 virtual ~ScColorScaleFormat() override;
266 virtual ScColorFormat* Clone(ScDocument* pDoc) const override;
267
268 virtual void SetParent(ScConditionalFormat* pParent) override;
269
270 std::optional<Color> GetColor(const ScAddress& rAddr) const;
271 void AddEntry(ScColorScaleEntry* pEntry);
272
273 virtual void UpdateReference( sc::RefUpdateContext& rCxt ) override;
274 virtual void UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt ) override;
275 virtual void UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt ) override;
276 virtual void UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt ) override;
277
278 virtual Type GetType() const override;
279 ScColorScaleEntries::iterator begin();
280 ScColorScaleEntries::const_iterator begin() const;
281 ScColorScaleEntries::iterator end();
282 ScColorScaleEntries::const_iterator end() const;
283
284 ScColorScaleEntry* GetEntry(size_t nPos);
285 const ScColorScaleEntry* GetEntry(size_t nPos) const;
286
287 size_t size() const;
288
293 void EnsureSize();
294};
295
297{
298public:
300 ScDataBarFormat(ScDocument* pDoc, const ScDataBarFormat& rFormat);
301 virtual ScColorFormat* Clone(ScDocument* pDoc) const override;
302
303 virtual void SetParent(ScConditionalFormat* pParent) override;
304
305 std::unique_ptr<ScDataBarInfo> GetDataBarInfo(const ScAddress& rAddr) const;
306
307 void SetDataBarData( ScDataBarFormatData* pData );
308 const ScDataBarFormatData* GetDataBarData() const;
309 ScDataBarFormatData* GetDataBarData();
310
311 virtual void UpdateReference( sc::RefUpdateContext& rCxt ) override;
312 virtual void UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt ) override;
313 virtual void UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt ) override;
314 virtual void UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt ) override;
315
316 virtual Type GetType() const override;
317
322 void EnsureSize();
323
324private:
325 double getMin(double nMin, double nMax) const;
326 double getMax(double nMin, double nMax) const;
327
328 std::unique_ptr<ScDataBarFormatData> mpFormatData;
329};
330
332{
339 typedef std::vector<std::unique_ptr<ScColorScaleEntry, o3tl::default_delete<ScColorScaleEntry>>> Entries_t;
342 // the std::pair points to exactly one image
343 // std..pair::second == -1 means no image
344 std::vector<std::pair<ScIconSetType, sal_Int32> > maCustomVector;
345
348 mbShowValue(true),
349 mbReverse(false),
350 mbCustom(false)
351 {}
352
355};
356
358{
359public:
361 ScIconSetFormat(ScDocument* pDoc, const ScIconSetFormat& rFormat);
362
363 virtual ScColorFormat* Clone(ScDocument* pDoc) const override;
364
365 virtual void SetParent(ScConditionalFormat* pParent) override;
366
367 std::unique_ptr<ScIconSetInfo> GetIconSetInfo(const ScAddress& rAddr) const;
368
369 void SetIconSetData( ScIconSetFormatData* pData );
370 const ScIconSetFormatData* GetIconSetData() const;
371 ScIconSetFormatData* GetIconSetData();
372
373 virtual void UpdateReference( sc::RefUpdateContext& rCxt ) override;
374 virtual void UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt ) override;
375 virtual void UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt ) override;
376 virtual void UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt ) override;
377
378 virtual Type GetType() const override;
379
380 static const ScIconSetMap g_IconSetMap[];
381 static const char* getIconSetName( ScIconSetType eType );
382 static sal_Int32 getIconSetElements( ScIconSetType eType );
383 static OUString getIconName(ScIconSetType eType, sal_Int32 nIndex);
384 static BitmapEx& getBitmap(sc::IconSetBitmapMap& rBitmapMap, ScIconSetType eType, sal_Int32 nIndex);
385
386 typedef ScIconSetFormatData::Entries_t::iterator iterator;
387 typedef ScIconSetFormatData::Entries_t::const_iterator const_iterator;
388
389 iterator begin();
390 const_iterator begin() const;
391 iterator end();
392 const_iterator end() const;
393
394 size_t size() const;
395
400 void EnsureSize();
401
402private:
403
404 double GetMinValue() const;
405 double GetMaxValue() const;
406 double CalcValue(double nMin, double nMax, const ScIconSetFormat::const_iterator& itr) const;
407
408 std::unique_ptr<ScIconSetFormatData> mpFormatData;
409};
410
411/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
basegfx::BColor maColor
ScConditionalFormat * mpParent
Definition: colorscale.hxx:239
std::unique_ptr< ScColorFormatCache > mpCache
Definition: colorscale.hxx:247
std::unique_ptr< ScFormulaListener > mpListener
Definition: colorscale.hxx:47
ScColorScaleEntryType meType
Definition: colorscale.hxx:50
ScColorScaleEntryType GetType() const
Definition: colorscale.hxx:76
std::unique_ptr< ScFormulaCell > mpCell
Definition: colorscale.hxx:46
ScConditionalFormat * mpFormat
Definition: colorscale.hxx:48
ScColorScaleEntries maColorScales
Definition: colorscale.hxx:255
std::unique_ptr< ScDataBarFormatData > mpFormatData
Definition: colorscale.hxx:328
std::unique_ptr< ScIconSetFormatData > mpFormatData
Definition: colorscale.hxx:408
ScIconSetFormatData::Entries_t::iterator iterator
Definition: colorscale.hxx:386
ScIconSetFormatData::Entries_t::const_iterator const_iterator
Definition: colorscale.hxx:387
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
std::vector< std::unique_ptr< ScColorScaleEntry, o3tl::default_delete< ScColorScaleEntry > > > ScColorScaleEntries
Definition: colorscale.hxx:250
ScIconSetType
Definition: colorscale.hxx:189
@ IconSet_3Arrows
Definition: colorscale.hxx:190
@ IconSet_3TrafficLights1
Definition: colorscale.hxx:193
@ IconSet_4Arrows
Definition: colorscale.hxx:202
@ IconSet_3Symbols2
Definition: colorscale.hxx:197
@ IconSet_3ArrowsGray
Definition: colorscale.hxx:191
@ IconSet_3Symbols
Definition: colorscale.hxx:196
@ IconSet_3Triangles
Definition: colorscale.hxx:200
@ IconSet_4TrafficLights
Definition: colorscale.hxx:206
@ IconSet_5Arrows
Definition: colorscale.hxx:207
@ IconSet_4Rating
Definition: colorscale.hxx:205
@ IconSet_3ColorSmilies
Definition: colorscale.hxx:201
@ IconSet_3Signs
Definition: colorscale.hxx:195
@ IconSet_5Quarters
Definition: colorscale.hxx:210
@ IconSet_5Boxes
Definition: colorscale.hxx:211
@ IconSet_5ArrowsGray
Definition: colorscale.hxx:208
@ IconSet_3TrafficLights2
Definition: colorscale.hxx:194
@ IconSet_4ArrowsGray
Definition: colorscale.hxx:203
@ IconSet_5Ratings
Definition: colorscale.hxx:209
@ IconSet_3Smilies
Definition: colorscale.hxx:198
@ IconSet_4RedToBlack
Definition: colorscale.hxx:204
@ IconSet_3Flags
Definition: colorscale.hxx:192
@ IconSet_3Stars
Definition: colorscale.hxx:199
ScColorScaleEntryType
Definition: colorscale.hxx:32
@ COLORSCALE_MAX
Definition: colorscale.hxx:35
@ COLORSCALE_VALUE
Definition: colorscale.hxx:37
@ COLORSCALE_FORMULA
Definition: colorscale.hxx:39
@ COLORSCALE_PERCENT
Definition: colorscale.hxx:38
@ COLORSCALE_PERCENTILE
Definition: colorscale.hxx:36
@ COLORSCALE_AUTO
Definition: colorscale.hxx:33
@ COLORSCALE_MIN
Definition: colorscale.hxx:34
virtual void SetValue(tools::Long nNew) override
DocumentType eType
AUTOMATIC
std::unique_ptr< sal_Int32[]> pData
size
enumrange< T >::Iterator begin(enumrange< T >)
end
std::map< OUString, BitmapEx > IconSetBitmapMap
Definition: document.hxx:216
css::uno::Reference< css::animations::XAnimationNode > Clone(const css::uno::Reference< css::animations::XAnimationNode > &xSourceNode, const SdPage *pSource=nullptr, const SdPage *pTarget=nullptr)
const char GetValue[]
#define SC_DLLPUBLIC
Definition: scdllapi.h:27
std::vector< double > maValues
Definition: colorscale.hxx:245
Color maAxisColor
Color of the axis if used Default color is black.
Definition: colorscale.hxx:145
std::optional< Color > mxNegativeColor
Specifies the color for negative values.
Definition: colorscale.hxx:140
std::unique_ptr< ScColorScaleEntry, o3tl::default_delete< ScColorScaleEntry > > mpLowerLimit
Definition: colorscale.hxx:185
databar::ScAxisPosition meAxisPosition
Paint negative values into the same direction as positive values If false we will set the mid point a...
Definition: colorscale.hxx:167
double mnMinLength
Minimal length of a databar in percent of cell length Value has to be in the range [0,...
Definition: colorscale.hxx:172
double mnMaxLength
Maximal length of a databar in percent of cell length Value has to be in the range (0,...
Definition: colorscale.hxx:177
ScDataBarFormatData(const ScDataBarFormatData &r)
Definition: colorscale.hxx:109
Color maPositiveColor
Color for all Positive Values and if mbNeg == false also for negative ones.
Definition: colorscale.hxx:134
bool mbNeg
Use different color for negative values.
Definition: colorscale.hxx:159
bool mbGradient
Paint the bars with gradient.
Definition: colorscale.hxx:152
bool mbOnlyBar
If TRUE we only show the bar and not the value.
Definition: colorscale.hxx:182
std::unique_ptr< ScColorScaleEntry, o3tl::default_delete< ScColorScaleEntry > > mpUpperLimit
Definition: colorscale.hxx:184
ScIconSetFormatData(ScIconSetType eType=IconSet_3Arrows)
Definition: colorscale.hxx:346
std::vector< std::unique_ptr< ScColorScaleEntry, o3tl::default_delete< ScColorScaleEntry > > > Entries_t
Definition: colorscale.hxx:339
ScIconSetType eIconSetType
Definition: colorscale.hxx:333
bool mbReverse
Specifies whether the icons should be shown in reverse order.
Definition: colorscale.hxx:338
std::vector< std::pair< ScIconSetType, sal_Int32 > > maCustomVector
Definition: colorscale.hxx:344
ScIconSetFormatData & operator=(ScIconSetFormatData const &)=delete
ScIconSetType eType
Definition: colorscale.hxx:216
const char * pName
Definition: colorscale.hxx:215
sal_Int32 nElements
Definition: colorscale.hxx:217
Context for reference update during shifting, moving or copying of cell ranges.
RedlineType meType