20 #ifndef INCLUDED_SC_INC_CONDITIO_HXX
21 #define INCLUDED_SC_INC_CONDITIO_HXX
34 #include <com/sun/star/sheet/ConditionOperator.hpp>
36 #include <rtl/math.hxx>
51 struct RefUpdateContext;
52 struct RefUpdateInsertTabContext;
53 struct RefUpdateDeleteTabContext;
54 struct RefUpdateMoveTabContext;
59 #define SC_COND_NOBLANKS 1
92 template<
typename charT,
typename traits>
93 inline std::basic_ostream<charT, traits> & operator <<(std::basic_ostream<charT, traits> &
stream,
const ScConditionMode& rMode)
140 stream <<
"BOTTOMPERCENT";
149 stream <<
"ABOVEEQUALAVERAGE";
152 stream <<
"BELOWEQUALAVERAGE";
170 stream <<
"NOTCONTAINSTEXT";
176 stream <<
"?(" <<
static_cast<int>(rMode) <<
")";
205 void setCallback(
const std::function<
void()>& aCallbackFunction);
241 virtual Type GetType()
const = 0;
252 virtual bool IsEqual(
const ScFormatEntry&,
bool bIgnoreSrcPos )
const;
254 virtual void startRendering();
255 virtual void endRendering();
261 template<
typename charT,
typename traits>
267 stream <<
"Condition";
270 stream <<
"ExtCondition";
273 stream <<
"Colorscale";
285 stream <<
"?(" <<
static_cast<int>(rType) <<
")";
296 if(nVal1 < nVal2 && !rtl::math::approxEqual(nVal1, nVal2))
331 static void SimplifyCompiledFormula( std::unique_ptr<ScTokenArray>& rFormula,
337 void Compile(
const OUString& rExpr1,
const OUString& rExpr2,
338 const OUString& rExprNmsp1,
const OUString& rExprNmsp2,
344 bool IsValid(
double nArg,
const ScAddress& rPos )
const;
345 bool IsValidStr(
const OUString& rArg,
const ScAddress& rPos )
const;
350 const OUString& rExpr1,
const OUString& rExpr2,
352 const OUString& rExprNmsp1,
const OUString& rExprNmsp2,
355 Type eType = Type::Condition );
373 void SetIgnoreBlank(
bool bSet);
379 void SetSrcString(
const OUString& rNew );
384 OUString GetExpression(
const ScAddress& rCursor, sal_uInt16 nPos, sal_uInt32 nNumFmt = 0,
389 std::unique_ptr<ScTokenArray> CreateFlatCopiedTokenArray( sal_uInt16 nPos )
const;
398 bool MarkUsedExternalReferences()
const;
404 static ScConditionMode GetModeFromApi(css::sheet::ConditionOperator nOperator);
409 bool NeedsRepaint()
const;
419 bool IsDuplicate(
double nArg,
const OUString& rStr)
const;
420 bool IsTopNElement(
double nArg )
const;
421 bool IsTopNPercent(
double nArg )
const;
422 bool IsBottomNElement(
double nArg )
const;
423 bool IsBottomNPercent(
double nArg )
const;
424 bool IsAboveAverage(
double nArg,
bool bEqual )
const;
425 bool IsBelowAverage(
double nArg,
bool bEqual )
const;
427 bool IsError(
const ScAddress& rPos )
const;
429 void FillCache()
const;
445 mutable std::unique_ptr<ScConditionEntryCache>
mpCache;
456 const OUString& rExpr1,
const OUString& rExpr2,
458 const OUString& rStyle,
463 Type eType = Type::Condition);
467 const OUString& rStyle );
474 const OUString&
GetStyle()
const {
return aStyleName; }
510 bool IsValid(
const ScAddress& rPos )
const;
516 void SetStyleName(
const OUString& rStyleName );
555 std::unique_ptr<ScConditionalFormat>
Clone(
ScDocument* pNewDoc =
nullptr)
const;
558 void RemoveEntry(
size_t nIndex);
564 bool IsEmpty()
const;
580 void RenameCellStyle( std::u16string_view rOld,
const OUString& rNew );
592 sal_uInt32
GetKey()
const {
return nKey; }
593 void SetKey(sal_uInt32 nNew) { nKey = nNew; }
595 bool MarkUsedExternalReferences()
const;
600 void startRendering();
610 bool operator()(std::unique_ptr<ScConditionalFormat>
const& lhs,
611 std::unique_ptr<ScConditionalFormat>
const& rhs)
const
613 return (*lhs) < (*rhs);
615 bool operator()(sal_uInt32 nKey, std::unique_ptr<ScConditionalFormat>
const& rpFormat)
const
617 return nKey < rpFormat->GetKey();
619 bool operator()(std::unique_ptr<ScConditionalFormat>
const& rpFormat, sal_uInt32 nKey)
const
621 return rpFormat->GetKey() < nKey;
629 typedef std::set<std::unique_ptr<ScConditionalFormat>,
640 void InsertNew( std::unique_ptr<ScConditionalFormat> pNew );
663 void RenameCellStyle( std::u16string_view rOld,
const OUString& rNew );
666 typedef ConditionalFormatContainer::iterator
iterator;
671 void RemoveFromDocument(
ScDocument& rDoc)
const;
675 const_iterator
begin()
const;
677 const_iterator
end()
const;
685 void startRendering();
688 sal_uInt32 getMaxKey()
const;
If set, cloned formula cells will start to listen to the document.
bool operator==(const XclFontData &rLeft, const XclFontData &rRight)
virtual Type GetType() const override
std::unique_ptr< ScTokenArray > pFormula2
std::unique_ptr< ScConditionEntryCache > mpCache
virtual void UpdateReference(sc::RefUpdateContext &) override
Context for reference update during shifting, moving or copying of cell ranges.
const OUString & GetStyle() const
condformat::ScCondFormatDateType GetDateType() const
virtual void UpdateMoveTab(sc::RefUpdateMoveTabContext &rCxt)=0
virtual void DataChanged() const
This is very similar to ScCellValue, except that it references the original value instead of copying ...
std::map< OUString, sal_Int32 > StringCacheType
bool operator()(double nVal1, double nVal2) const
ScConditionMode GetOperation() const
virtual void endRendering()
virtual void UpdateInsertTab(sc::RefUpdateInsertTabContext &) override
virtual void UpdateInsertTab(sc::RefUpdateInsertTabContext &rCxt)=0
enumrange< T >::Iterator begin(enumrange< T >)
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 ...
const OUString & GetSrcString() const
virtual void SetParent(ScConditionalFormat *pNew)=0
std::unique_ptr< ScFormulaListener > mpListener
virtual void UpdateReference(sc::RefUpdateContext &rCxt)=0
std::unique_ptr< ScFormulaCell > pFCell1
virtual bool IsEqual(const ScFormatEntry &, bool bIgnoreSrcPos) const
Reference< XAnimationNode > Clone(const Reference< XAnimationNode > &xSourceNode, const SdPage *pSource, const SdPage *pTarget)
virtual void UpdateMoveTab(sc::RefUpdateMoveTabContext &) override
condformat::ScCondFormatDateType meType
virtual Type GetType() const override
bool IsEqual(const ScFormatEntry &r, bool bIgnoreSrcPos) const override
virtual ScFormatEntry * Clone(ScDocument *pDoc) const =0
void UpdateStyleName(const OUString &rNew)
StringCacheType maStrings
const ScAddress & GetSrcPos() const
enumrange< T >::Iterator end(enumrange< T >)
Reference< XOutputStream > stream
virtual ScFormatEntry * Clone(ScDocument *pDoc) const override
bool operator<(const ScDPCollection::DBType &left, const ScDPCollection::DBType &right)
std::unique_ptr< Date > mpCache
virtual void SetParent(ScConditionalFormat *) override
std::unique_ptr< ScTokenArray > pFormula1
const OUString & GetStyleName() const
const formula::FormulaGrammar::Grammar eTempGrammar2
virtual void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &rCxt)=0
virtual void startRendering()
ScDocument * GetDocument() const
ScConditionalFormat * pCondFormat
bool IsIgnoreBlank() const
virtual Type GetType() const override
std::map< double, sal_Int32, approx_less > ValueCacheType
const formula::FormulaGrammar::Grammar eTempGrammar1
std::unique_ptr< ScFormulaCell > pFCell2
virtual void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &) override