LibreOffice Module sc (master) 1
conditio.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 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include <tools/solar.h>
23#include <tools/color.hxx>
24#include "address.hxx"
25#include <formula/grammar.hxx>
26#include "scdllapi.h"
27#include "rangelst.hxx"
28#include "tokenarray.hxx"
29
30#include <svl/listener.hxx>
31
32#include <com/sun/star/sheet/ConditionOperator.hpp>
33
34#include <rtl/math.hxx>
35#include <tools/date.hxx>
36#include <tools/link.hxx>
37
38#include <optional>
39#include <map>
40#include <memory>
41#include <set>
42
43class ScFormulaCell;
44class ScTokenArray;
45struct ScRefCellValue;
46
47namespace sc {
48
49struct RefUpdateContext;
50struct RefUpdateInsertTabContext;
51struct RefUpdateDeleteTabContext;
52struct RefUpdateMoveTabContext;
53
54}
55
56// nOptions Flags
57#define SC_COND_NOBLANKS 1
58
60{
61 Equal,
62 Less,
63 Greater,
64 EqLess,
67 Between,
71 Direct,
72 Top10,
80 Error,
81 NoError,
86 NONE
87};
88
89// For use in SAL_DEBUG etc. Output format not guaranteed to be stable.
90template<typename charT, typename traits>
91inline std::basic_ostream<charT, traits> & operator <<(std::basic_ostream<charT, traits> & stream, const ScConditionMode& rMode)
92{
93 switch (rMode)
94 {
96 stream << "EQUAL";
97 break;
99 stream << "LESS";
100 break;
102 stream << "GREATER";
103 break;
105 stream << "EQLESS";
106 break;
108 stream << "EQGREATER";
109 break;
111 stream << "NOTEQUAL";
112 break;
114 stream << "BETWEEN";
115 break;
117 stream << "NOTBETWEEN";
118 break;
120 stream << "DUPLICATE";
121 break;
123 stream << "NOTDUPLICATE";
124 break;
126 stream << "DIRECT";
127 break;
129 stream << "TOP10";
130 break;
132 stream << "BOTTOM10";
133 break;
135 stream << "TOPPERCENT";
136 break;
138 stream << "BOTTOMPERCENT";
139 break;
141 stream << "ABOVEAVERAGE";
142 break;
144 stream << "BELOWAVERAGE";
145 break;
147 stream << "ABOVEEQUALAVERAGE";
148 break;
150 stream << "BELOWEQUALAVERAGE";
151 break;
153 stream << "ERROR";
154 break;
156 stream << "NOERROR";
157 break;
159 stream << "BEGINSWITH";
160 break;
162 stream << "ENDSWITH";
163 break;
165 stream << "CONTAINSTEXT";
166 break;
168 stream << "NOTCONTAINSTEXT";
169 break;
171 stream << "NONE";
172 break;
173 default:
174 stream << "?(" << static_cast<int>(rMode) << ")";
175 break;
176 }
177
178 return stream;
179}
180
181class ScFormulaListener final : public SvtListener
182{
183private:
184 mutable bool mbDirty;
186 std::function<void()> maCallbackFunction;
187
188 void startListening(const ScTokenArray* pTokens, const ScRange& rPos);
189 void startListening(const ScRangeList& rPos);
190
191public:
192 explicit ScFormulaListener(ScFormulaCell* pCell);
193 explicit ScFormulaListener(ScDocument& rDoc);
194 explicit ScFormulaListener(ScDocument& rDoc, const ScRangeList& rRange);
195 virtual ~ScFormulaListener() override;
196
197 void Notify( const SfxHint& rHint ) override;
198
199 bool NeedsRepaint() const;
200
201 void addTokenArray(const ScTokenArray* pTokens, const ScRange& rRange);
202 void stopListening();
203 void setCallback(const std::function<void()>& aCallbackFunction);
204
205};
206
208struct ScDataBarInfo;
209struct ScIconSetInfo;
210
212{
216
217 std::optional<Color> mxColorScale;
218 std::unique_ptr<ScDataBarInfo> pDataBar;
219 std::unique_ptr<ScIconSetInfo> pIconSet;
220 OUString aStyleName;
221};
222
224{
225public:
227 virtual ~ScFormatEntry() {}
228
229 enum class Type
230 {
231 Condition,
232 ExtCondition,
233 Colorscale,
234 Databar,
235 Iconset,
236 Date
237 };
238
239 virtual Type GetType() const = 0;
240 virtual void UpdateReference( sc::RefUpdateContext& rCxt ) = 0;
244
245 virtual ScFormatEntry* Clone( ScDocument* pDoc ) const = 0;
246
247 virtual void SetParent( ScConditionalFormat* pNew ) = 0;
248
249 bool operator==( const ScFormatEntry& ) const;
250 virtual bool IsEqual( const ScFormatEntry&, bool bIgnoreSrcPos ) const;
251
252 virtual void startRendering();
253 virtual void endRendering();
254protected:
256
257};
258
259template<typename charT, typename traits>
260inline std::basic_ostream<charT, traits> & operator <<(std::basic_ostream<charT, traits> & stream, const ScFormatEntry::Type& rType)
261{
262 switch (rType)
263 {
265 stream << "Condition";
266 break;
268 stream << "ExtCondition";
269 break;
271 stream << "Colorscale";
272 break;
274 stream << "Databar";
275 break;
277 stream << "Iconset";
278 break;
280 stream << "Date";
281 break;
282 default:
283 stream << "?(" << static_cast<int>(rType) << ")";
284 break;
285 }
286 return stream;
287}
288
290{
291public:
292 bool operator() (double nVal1, double nVal2) const
293 {
294 if(nVal1 < nVal2 && !rtl::math::approxEqual(nVal1, nVal2))
295 return true;
296
297 return false;
298 }
299};
300
302{
303 // stored data:
305 sal_uInt16 nOptions;
306 double nVal1; // input or calculated
307 double nVal2;
308 OUString aStrVal1; // input or calculated
309 OUString aStrVal2;
310 const OUString aStrNmsp1; // namespace to be used on (re)compilation, e.g. in XML import
311 const OUString aStrNmsp2; // namespace to be used on (re)compilation, e.g. in XML import
312 const formula::FormulaGrammar::Grammar eTempGrammar1; // grammar to be used on (re)compilation, e.g. in XML import
313 const formula::FormulaGrammar::Grammar eTempGrammar2; // grammar to be used on (re)compilation, e.g. in XML import
314 bool bIsStr1; // for recognition of empty strings
316 std::unique_ptr<ScTokenArray> pFormula1; // entered formula
317 std::unique_ptr<ScTokenArray> pFormula2;
318 ScAddress aSrcPos; // source position for formulas
319 // temporary data:
320 OUString aSrcString; // formula source position as text during XML import
321 std::unique_ptr<ScFormulaCell> pFCell1;
322 std::unique_ptr<ScFormulaCell> pFCell2;
326 std::unique_ptr<ScFormulaListener> mpListener;
327 Type eConditionType; //It can be Condition or ExtCondition
328
329 static void SimplifyCompiledFormula( std::unique_ptr<ScTokenArray>& rFormula,
330 double& rVal,
331 bool& rIsStr,
332 OUString& rStrVal );
333
334 void MakeCells( const ScAddress& rPos );
335 void Compile( const OUString& rExpr1, const OUString& rExpr2,
336 const OUString& rExprNmsp1, const OUString& rExprNmsp2,
339 bool bTextToReal );
340 void Interpret( const ScAddress& rPos );
341
342 bool IsValid( double nArg, const ScAddress& rPos ) const;
343 bool IsValidStr( const OUString& rArg, const ScAddress& rPos ) const;
344 void StartListening();
345
346public:
348 const OUString& rExpr1, const OUString& rExpr2,
349 ScDocument& rDocument, const ScAddress& rPos,
350 const OUString& rExprNmsp1, const OUString& rExprNmsp2,
353 Type eType = Type::Condition );
355 const ScTokenArray* pArr1, const ScTokenArray* pArr2,
356 ScDocument& rDocument, const ScAddress& rPos );
357 ScConditionEntry( const ScConditionEntry& r ); // flat copy of formulas
358 // true copy of formulas (for Ref-Undo):
359 ScConditionEntry( ScDocument& rDocument, const ScConditionEntry& r );
360 virtual ~ScConditionEntry() override;
361
362 bool IsEqual( const ScFormatEntry& r, bool bIgnoreSrcPos ) const override;
363
364 virtual void SetParent( ScConditionalFormat* pNew ) override;
365
366 bool IsCellValid( ScRefCellValue& rCell, const ScAddress& rPos ) const;
367
368 ScConditionMode GetOperation() const { return eOp; }
369 void SetOperation(ScConditionMode eMode);
370 bool IsIgnoreBlank() const { return ( nOptions & SC_COND_NOBLANKS ) == 0; }
371 void SetIgnoreBlank(bool bSet);
372 const OUString& GetSrcString() const { return aSrcString; }
373 const ScAddress& GetSrcPos() const { return aSrcPos; }
374
375 ScAddress GetValidSrcPos() const; // adjusted to allow textual representation of expressions
376
377 void SetSrcString( const OUString& rNew ); // for XML import
378
379 void SetFormula1( const ScTokenArray& rArray );
380 void SetFormula2( const ScTokenArray& rArray );
381
382 OUString GetExpression( const ScAddress& rCursor, sal_uInt16 nPos, sal_uInt32 nNumFmt = 0,
384
387 std::unique_ptr<ScTokenArray> CreateFlatCopiedTokenArray( sal_uInt16 nPos ) const;
388
389 void CompileAll();
390 void CompileXML();
391 virtual void UpdateReference( sc::RefUpdateContext& rCxt ) override;
392 virtual void UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt ) override;
393 virtual void UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt ) override;
394 virtual void UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt ) override;
395
396 bool MarkUsedExternalReferences() const;
397
398 virtual Type GetType() const override { return eConditionType; }
399
400 virtual ScFormatEntry* Clone(ScDocument* pDoc) const override;
401
402 static ScConditionMode GetModeFromApi(css::sheet::ConditionOperator nOperator);
403
404 virtual void endRendering() override;
405 virtual void startRendering() override;
406
407 bool NeedsRepaint() const;
408 void CalcAll();
409
410protected:
411 virtual void DataChanged() const;
412 ScDocument* GetDocument() const { return mpDoc; }
414
415private:
416
417 bool IsDuplicate(double nArg, const OUString& rStr) const;
418 bool IsTopNElement( double nArg ) const;
419 bool IsTopNPercent( double nArg ) const;
420 bool IsBottomNElement( double nArg ) const;
421 bool IsBottomNPercent( double nArg ) const;
422 bool IsAboveAverage( double nArg, bool bEqual ) const;
423 bool IsBelowAverage( double nArg, bool bEqual ) const;
424
425 bool IsError( const ScAddress& rPos ) const;
426
427 void FillCache() const;
428
430 {
431 typedef std::map<OUString, sal_Int32> StringCacheType;
433 typedef std::map<double, sal_Int32, approx_less> ValueCacheType;
435
436 // cache them for easier access
438
440 nValueItems(0) {}
441 };
442
443 mutable std::unique_ptr<ScConditionEntryCache> mpCache;
444};
445
446// single condition entry for conditional formatting
448{
449 OUString aStyleName;
450 Type eCondFormatType = Type::Condition;
451
452public:
454 const OUString& rExpr1, const OUString& rExpr2,
455 ScDocument& rDocument, const ScAddress& rPos,
456 OUString aStyle,
457 const OUString& rExprNmsp1 = OUString(),
458 const OUString& rExprNmsp2 = OUString(),
461 Type eType = Type::Condition);
463 const ScTokenArray* pArr1, const ScTokenArray* pArr2,
464 ScDocument& rDocument, const ScAddress& rPos,
465 OUString aStyle );
467 ScCondFormatEntry( ScDocument& rDocument, const ScCondFormatEntry& r );
468 virtual ~ScCondFormatEntry() override;
469
470 bool IsEqual( const ScFormatEntry& r, bool bIgnoreSrcPos ) const override;
471
472 const OUString& GetStyle() const { return aStyleName; }
473 void UpdateStyleName(const OUString& rNew) { aStyleName=rNew; }
474 virtual ScFormatEntry* Clone(ScDocument* pDoc) const override;
475 virtual Type GetType() const override { return eCondFormatType; }
476
477private:
478 virtual void DataChanged() const override;
479};
480
481namespace condformat {
482
484{
499
500}
501
503{
504public:
507
508 bool IsValid( const ScAddress& rPos ) const;
509
510 void SetDateType(condformat::ScCondFormatDateType eType);
512
513 const OUString& GetStyleName() const { return maStyleName;}
514 void SetStyleName( const OUString& rStyleName );
515
516 virtual Type GetType() const override { return Type::Date; }
517 virtual void UpdateReference( sc::RefUpdateContext& ) override {}
520 virtual void UpdateMoveTab( sc::RefUpdateMoveTabContext& ) override {}
521
522 virtual ScFormatEntry* Clone( ScDocument* pDoc ) const override;
523
524 virtual void SetParent( ScConditionalFormat* ) override {}
525
526 virtual void startRendering() override;
527 virtual void endRendering() override;
528
529private:
531
532 mutable std::unique_ptr<Date> mpCache;
533
534 OUString maStyleName;
535};
536
537// complete conditional formatting
539{
541 sal_uInt32 nKey; // Index in attributes
542
543 std::vector<std::unique_ptr<ScFormatEntry>> maEntries;
544 ScRangeList maRanges; // Ranges for conditional format
545
546public:
547 ScConditionalFormat(sal_uInt32 nNewKey, ScDocument* pDocument);
551
552 // true copy of formulas (for Ref-Undo / between documents)
553 std::unique_ptr<ScConditionalFormat> Clone(ScDocument* pNewDoc = nullptr) const;
554
555 void AddEntry( ScFormatEntry* pNew );
556 void RemoveEntry(size_t nIndex);
557 void SetRange( const ScRangeList& rRanges );
558 const ScRangeList& GetRange() const { return maRanges; }
559 // don't use the same name as for the const version
560 ScRangeList& GetRangeList() { return maRanges; }
561
562 bool IsEmpty() const;
563 size_t size() const;
564
565 ScDocument* GetDocument();
566
567 void CompileAll();
568 void CompileXML();
569 void UpdateReference( sc::RefUpdateContext& rCxt, bool bCopyAsMove = false );
570 void UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt );
571 void UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt );
572 void UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt );
573
574 void InsertRow(SCTAB nTab, SCCOL nColStart, SCCOL nColEnd, SCROW nRowStart, SCSIZE nSize);
575 void InsertCol(SCTAB nTab, SCROW nRowStart, SCROW nRowEnd, SCCOL nColStart, SCSIZE nSize);
576
577 void DeleteArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 );
578 void RenameCellStyle( std::u16string_view rOld, const OUString& rNew );
579
580 const ScFormatEntry* GetEntry( sal_uInt16 nPos ) const;
581
582 OUString GetCellStyle( ScRefCellValue& rCell, const ScAddress& rPos ) const;
583
584 ScCondFormatData GetData( ScRefCellValue& rCell, const ScAddress& rPos ) const;
585
586 bool EqualEntries( const ScConditionalFormat& r, bool bIgnoreSrcPos = false ) const;
587
588 void DoRepaint();
589
590 sal_uInt32 GetKey() const { return nKey; }
591 void SetKey(sal_uInt32 nNew) { nKey = nNew; } // only if not inserted!
592
593 bool MarkUsedExternalReferences() const;
594
595 // sorted (via std::set) by Index
596 bool operator < ( const ScConditionalFormat& r ) const { return nKey < r.nKey; }
597
598 void startRendering();
599 void endRendering();
600
601 // Forced recalculation for formulas
602 void CalcAll();
603};
604
606{
607 using is_transparent = void;
608 bool operator()(std::unique_ptr<ScConditionalFormat> const& lhs,
609 std::unique_ptr<ScConditionalFormat> const& rhs) const
610 {
611 return (*lhs) < (*rhs);
612 }
613 bool operator()(sal_uInt32 nKey, std::unique_ptr<ScConditionalFormat> const& rpFormat) const
614 {
615 return nKey < rpFormat->GetKey();
616 }
617 bool operator()(std::unique_ptr<ScConditionalFormat> const& rpFormat, sal_uInt32 nKey) const
618 {
619 return rpFormat->GetKey() < nKey;
620 }
621};
622
623// List of all conditional formats in a sheet
625{
626private:
627 typedef std::set<std::unique_ptr<ScConditionalFormat>,
630
631 void operator =(ScConditionalFormatList const &) = delete;
632
633public:
637
638 void InsertNew( std::unique_ptr<ScConditionalFormat> pNew );
639
646 bool CheckAllEntries(const Link<ScConditionalFormat*,void>& rLink = Link<ScConditionalFormat*,void>());
647
648 ScConditionalFormat* GetFormat( sal_uInt32 nKey );
649 const ScConditionalFormat* GetFormat( sal_uInt32 nKey ) const;
650
651 void CompileAll();
652 void CompileXML();
653 void UpdateReference( sc::RefUpdateContext& rCxt );
654 void UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt );
655 void UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt );
656 void UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt );
657
658 void InsertRow(SCTAB nTab, SCCOL nColStart, SCCOL nColEnd, SCROW nRowStart, SCSIZE nSize);
659 void InsertCol(SCTAB nTab, SCROW nRowStart, SCROW nRowEnd, SCCOL nColStart, SCSIZE nSize);
660
661 void RenameCellStyle( std::u16string_view rOld, const OUString& rNew );
662 void DeleteArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 );
663
664 typedef ConditionalFormatContainer::iterator iterator;
665 typedef ConditionalFormatContainer::const_iterator const_iterator;
666
667 ScRangeList GetCombinedRange() const;
668
669 void RemoveFromDocument(ScDocument& rDoc) const;
670 void AddToDocument(ScDocument& rDoc) const;
671
672 iterator begin();
673 const_iterator begin() const;
674 iterator end();
675 const_iterator end() const;
676
677 size_t size() const;
678 bool empty() const;
679
680 void erase(sal_uLong nIndex);
681 void clear();
682
683 void startRendering();
684 void endRendering();
685
686 sal_uInt32 getMaxKey() const;
687
689 void CalcAll();
690};
691
692/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
size_t SCSIZE
size_t typedef to be able to find places where code was changed from USHORT to size_t and is used to ...
Definition: address.hxx:44
std::unique_ptr< Date > mpCache
Definition: conditio.hxx:532
condformat::ScCondFormatDateType GetDateType() const
Definition: conditio.hxx:511
virtual Type GetType() const override
Definition: conditio.hxx:516
virtual void UpdateInsertTab(sc::RefUpdateInsertTabContext &) override
Definition: conditio.hxx:518
virtual void SetParent(ScConditionalFormat *) override
Definition: conditio.hxx:524
condformat::ScCondFormatDateType meType
Definition: conditio.hxx:530
virtual void UpdateReference(sc::RefUpdateContext &) override
Definition: conditio.hxx:517
virtual void UpdateMoveTab(sc::RefUpdateMoveTabContext &) override
Definition: conditio.hxx:520
virtual void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &) override
Definition: conditio.hxx:519
const OUString & GetStyleName() const
Definition: conditio.hxx:513
const OUString & GetStyle() const
Definition: conditio.hxx:472
virtual Type GetType() const override
Definition: conditio.hxx:475
OUString aStyleName
Definition: conditio.hxx:449
ScCondFormatEntry(ScConditionMode eOper, const OUString &rExpr1, const OUString &rExpr2, ScDocument &rDocument, const ScAddress &rPos, OUString aStyle, const OUString &rExprNmsp1=OUString(), const OUString &rExprNmsp2=OUString(), formula::FormulaGrammar::Grammar eGrammar1=formula::FormulaGrammar::GRAM_DEFAULT, formula::FormulaGrammar::Grammar eGrammar2=formula::FormulaGrammar::GRAM_DEFAULT, Type eType=Type::Condition)
void UpdateStyleName(const OUString &rNew)
Definition: conditio.hxx:473
ScConditionEntry(ScConditionMode eOper, const OUString &rExpr1, const OUString &rExpr2, ScDocument &rDocument, const ScAddress &rPos, const OUString &rExprNmsp1, const OUString &rExprNmsp2, formula::FormulaGrammar::Grammar eGrammar1, formula::FormulaGrammar::Grammar eGrammar2, Type eType=Type::Condition)
const OUString aStrNmsp2
Definition: conditio.hxx:311
const OUString aStrNmsp1
Definition: conditio.hxx:310
const formula::FormulaGrammar::Grammar eTempGrammar1
Definition: conditio.hxx:312
const formula::FormulaGrammar::Grammar eTempGrammar2
Definition: conditio.hxx:313
std::unique_ptr< ScFormulaCell > pFCell1
Definition: conditio.hxx:321
virtual Type GetType() const override
Definition: conditio.hxx:398
std::unique_ptr< ScFormulaCell > pFCell2
Definition: conditio.hxx:322
std::unique_ptr< ScFormulaListener > mpListener
Definition: conditio.hxx:326
std::unique_ptr< ScConditionEntryCache > mpCache
Definition: conditio.hxx:443
ScConditionMode eOp
Definition: conditio.hxx:304
OUString aStrVal1
Definition: conditio.hxx:308
std::unique_ptr< ScTokenArray > pFormula1
Definition: conditio.hxx:316
ScConditionMode GetOperation() const
Definition: conditio.hxx:368
ScDocument * GetDocument() const
Definition: conditio.hxx:412
ScConditionalFormat * pCondFormat
Definition: conditio.hxx:413
OUString aStrVal2
Definition: conditio.hxx:309
ScAddress aSrcPos
Definition: conditio.hxx:318
const ScAddress & GetSrcPos() const
Definition: conditio.hxx:373
sal_uInt16 nOptions
Definition: conditio.hxx:305
std::unique_ptr< ScTokenArray > pFormula2
Definition: conditio.hxx:317
bool IsIgnoreBlank() const
Definition: conditio.hxx:370
const OUString & GetSrcString() const
Definition: conditio.hxx:372
OUString aSrcString
Definition: conditio.hxx:320
ConditionalFormatContainer::iterator iterator
Definition: conditio.hxx:664
ConditionalFormatContainer m_ConditionalFormats
Definition: conditio.hxx:629
std::set< std::unique_ptr< ScConditionalFormat >, CompareScConditionalFormat > ConditionalFormatContainer
Definition: conditio.hxx:628
ConditionalFormatContainer::const_iterator const_iterator
Definition: conditio.hxx:665
ScDocument * pDoc
Definition: conditio.hxx:540
void SetKey(sal_uInt32 nNew)
Definition: conditio.hxx:591
ScRangeList maRanges
Definition: conditio.hxx:544
ScRangeList & GetRangeList()
Definition: conditio.hxx:560
const ScRangeList & GetRange() const
Definition: conditio.hxx:558
std::vector< std::unique_ptr< ScFormatEntry > > maEntries
Definition: conditio.hxx:543
sal_uInt32 GetKey() const
Definition: conditio.hxx:590
ScConditionalFormat(const ScConditionalFormat &)=delete
const ScConditionalFormat & operator=(const ScConditionalFormat &)=delete
virtual Type GetType() const =0
virtual ScFormatEntry * Clone(ScDocument *pDoc) const =0
virtual void UpdateReference(sc::RefUpdateContext &rCxt)=0
virtual ~ScFormatEntry()
Definition: conditio.hxx:227
virtual void SetParent(ScConditionalFormat *pNew)=0
virtual void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &rCxt)=0
virtual void UpdateMoveTab(sc::RefUpdateMoveTabContext &rCxt)=0
ScDocument * mpDoc
Definition: conditio.hxx:255
virtual void UpdateInsertTab(sc::RefUpdateInsertTabContext &rCxt)=0
ScDocument & mrDoc
Definition: conditio.hxx:185
void Notify(const SfxHint &rHint) override
Definition: colorscale.cxx:136
std::function< void()> maCallbackFunction
Definition: conditio.hxx:186
bool NeedsRepaint() const
Definition: colorscale.cxx:147
void addTokenArray(const ScTokenArray *pTokens, const ScRange &rRange)
Definition: colorscale.cxx:113
virtual ~ScFormulaListener() override
Definition: colorscale.cxx:131
void startListening(const ScTokenArray *pTokens, const ScRange &rPos)
Definition: colorscale.cxx:48
void setCallback(const std::function< void()> &aCallbackFunction)
Definition: colorscale.cxx:118
ScFormulaListener(ScFormulaCell *pCell)
Definition: colorscale.cxx:28
bool operator()(double nVal1, double nVal2) const
Definition: conditio.hxx:292
ScConditionMode
Definition: conditio.hxx:60
std::basic_ostream< charT, traits > & operator<<(std::basic_ostream< charT, traits > &stream, const ScConditionMode &rMode)
Definition: conditio.hxx:91
#define SC_COND_NOBLANKS
Definition: conditio.hxx:57
virtual SotClipboardFormatId GetFormat(const TransferableDataHelper &aHelper) override
Reference< XOutputStream > stream
bool operator<(const ScDPCollection::DBType &left, const ScDPCollection::DBType &right)
Definition: dpobject.cxx:3941
DocumentType eType
@ StartListening
If set, cloned formula cells will start to listen to the document.
NONE
size
ScCondFormatDateType
Definition: conditio.hxx:484
Type
Error
enumrange< T >::Iterator begin(enumrange< T >)
end
CAUTION! The following defines must be in the same namespace as the respective type.
css::uno::Reference< css::animations::XAnimationNode > Clone(const css::uno::Reference< css::animations::XAnimationNode > &xSourceNode, const SdPage *pSource=nullptr, const SdPage *pTarget=nullptr)
#define SC_DLLPUBLIC
Definition: scdllapi.h:27
sal_uIntPtr sal_uLong
bool operator()(std::unique_ptr< ScConditionalFormat > const &rpFormat, sal_uInt32 nKey) const
Definition: conditio.hxx:617
bool operator()(std::unique_ptr< ScConditionalFormat > const &lhs, std::unique_ptr< ScConditionalFormat > const &rhs) const
Definition: conditio.hxx:608
bool operator()(sal_uInt32 nKey, std::unique_ptr< ScConditionalFormat > const &rpFormat) const
Definition: conditio.hxx:613
std::unique_ptr< ScIconSetInfo > pIconSet
Definition: conditio.hxx:219
ScCondFormatData(ScCondFormatData &&)
std::optional< Color > mxColorScale
Definition: conditio.hxx:217
OUString aStyleName
Definition: conditio.hxx:220
std::unique_ptr< ScDataBarInfo > pDataBar
Definition: conditio.hxx:218
std::map< double, sal_Int32, approx_less > ValueCacheType
Definition: conditio.hxx:433
std::map< OUString, sal_Int32 > StringCacheType
Definition: conditio.hxx:431
This is very similar to ScCellValue, except that it references the original value instead of copying ...
Definition: cellvalue.hxx:108
Context for reference update during shifting, moving or copying of cell ranges.
sal_Int16 SCTAB
Definition: types.hxx:22
sal_Int16 SCCOL
Definition: types.hxx:21
sal_Int32 SCROW
Definition: types.hxx:17
RedlineType meType
bool operator==(const XclFontData &rLeft, const XclFontData &rRight)
Definition: xlstyle.cxx:519