32#include <com/sun/star/sheet/ConditionOperator.hpp>
34#include <rtl/math.hxx>
49struct RefUpdateContext;
50struct RefUpdateInsertTabContext;
51struct RefUpdateDeleteTabContext;
52struct RefUpdateMoveTabContext;
57#define SC_COND_NOBLANKS 1
90template<
typename charT,
typename traits>
91inline std::basic_ostream<charT, traits> &
operator <<(std::basic_ostream<charT, traits> & stream,
const ScConditionMode& rMode)
138 stream <<
"BOTTOMPERCENT";
147 stream <<
"ABOVEEQUALAVERAGE";
150 stream <<
"BELOWEQUALAVERAGE";
168 stream <<
"NOTCONTAINSTEXT";
174 stream <<
"?(" <<
static_cast<int>(rMode) <<
")";
203 void setCallback(
const std::function<
void()>& aCallbackFunction);
250 virtual bool IsEqual(
const ScFormatEntry&,
bool bIgnoreSrcPos )
const;
252 virtual void startRendering();
253 virtual void endRendering();
259template<
typename charT,
typename traits>
283 stream <<
"?(" <<
static_cast<int>(rType) <<
")";
294 if(nVal1 < nVal2 && !rtl::math::approxEqual(nVal1, nVal2))
329 static void SimplifyCompiledFormula( std::unique_ptr<ScTokenArray>& rFormula,
335 void Compile(
const OUString& rExpr1,
const OUString& rExpr2,
336 const OUString& rExprNmsp1,
const OUString& rExprNmsp2,
342 bool IsValid(
double nArg,
const ScAddress& rPos )
const;
343 bool IsValidStr(
const OUString& rArg,
const ScAddress& rPos )
const;
348 const OUString& rExpr1,
const OUString& rExpr2,
350 const OUString& rExprNmsp1,
const OUString& rExprNmsp2,
353 Type eType = Type::Condition );
362 bool IsEqual(
const ScFormatEntry& r,
bool bIgnoreSrcPos )
const override;
371 void SetIgnoreBlank(
bool bSet);
377 void SetSrcString(
const OUString& rNew );
382 OUString GetExpression(
const ScAddress& rCursor, sal_uInt16 nPos, sal_uInt32 nNumFmt = 0,
387 std::unique_ptr<ScTokenArray> CreateFlatCopiedTokenArray( sal_uInt16 nPos )
const;
396 bool MarkUsedExternalReferences()
const;
402 static ScConditionMode GetModeFromApi(css::sheet::ConditionOperator nOperator);
404 virtual void endRendering()
override;
405 virtual void startRendering()
override;
407 bool NeedsRepaint()
const;
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;
425 bool IsError(
const ScAddress& rPos )
const;
427 void FillCache()
const;
443 mutable std::unique_ptr<ScConditionEntryCache>
mpCache;
450 Type eCondFormatType = Type::Condition;
454 const OUString& rExpr1,
const OUString& rExpr2,
456 const OUString& rStyle,
457 const OUString& rExprNmsp1 = OUString(),
458 const OUString& rExprNmsp2 = OUString(),
461 Type eType = Type::Condition);
465 const OUString& rStyle );
470 bool IsEqual(
const ScFormatEntry& r,
bool bIgnoreSrcPos )
const override;
472 const OUString&
GetStyle()
const {
return aStyleName; }
508 bool IsValid(
const ScAddress& rPos )
const;
514 void SetStyleName(
const OUString& rStyleName );
526 virtual void startRendering()
override;
527 virtual void endRendering()
override;
553 std::unique_ptr<ScConditionalFormat>
Clone(
ScDocument* pNewDoc =
nullptr)
const;
556 void RemoveEntry(
size_t nIndex);
562 bool IsEmpty()
const;
578 void RenameCellStyle( std::u16string_view rOld,
const OUString& rNew );
590 sal_uInt32
GetKey()
const {
return nKey; }
591 void SetKey(sal_uInt32 nNew) { nKey = nNew; }
593 bool MarkUsedExternalReferences()
const;
598 void startRendering();
608 bool operator()(std::unique_ptr<ScConditionalFormat>
const& lhs,
609 std::unique_ptr<ScConditionalFormat>
const& rhs)
const
611 return (*lhs) < (*rhs);
613 bool operator()(sal_uInt32 nKey, std::unique_ptr<ScConditionalFormat>
const& rpFormat)
const
615 return nKey < rpFormat->GetKey();
617 bool operator()(std::unique_ptr<ScConditionalFormat>
const& rpFormat, sal_uInt32 nKey)
const
619 return rpFormat->GetKey() < nKey;
627 typedef std::set<std::unique_ptr<ScConditionalFormat>,
638 void InsertNew( std::unique_ptr<ScConditionalFormat> pNew );
661 void RenameCellStyle( std::u16string_view rOld,
const OUString& rNew );
664 typedef ConditionalFormatContainer::iterator
iterator;
669 void RemoveFromDocument(
ScDocument& rDoc)
const;
683 void startRendering();
686 sal_uInt32 getMaxKey()
const;
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 ...
std::unique_ptr< Date > mpCache
condformat::ScCondFormatDateType GetDateType() const
virtual Type GetType() const override
virtual void UpdateInsertTab(sc::RefUpdateInsertTabContext &) override
virtual void SetParent(ScConditionalFormat *) override
condformat::ScCondFormatDateType meType
virtual void UpdateReference(sc::RefUpdateContext &) override
virtual void UpdateMoveTab(sc::RefUpdateMoveTabContext &) override
virtual void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &) override
const OUString & GetStyleName() const
const OUString & GetStyle() const
virtual Type GetType() const override
ScCondFormatEntry(ScConditionMode eOper, const OUString &rExpr1, const OUString &rExpr2, ScDocument &rDocument, const ScAddress &rPos, const OUString &rStyle, 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)
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 formula::FormulaGrammar::Grammar eTempGrammar1
const formula::FormulaGrammar::Grammar eTempGrammar2
std::unique_ptr< ScFormulaCell > pFCell1
virtual Type GetType() const override
std::unique_ptr< ScFormulaCell > pFCell2
std::unique_ptr< ScFormulaListener > mpListener
std::unique_ptr< ScConditionEntryCache > mpCache
std::unique_ptr< ScTokenArray > pFormula1
ScConditionMode GetOperation() const
ScDocument * GetDocument() const
ScConditionalFormat * pCondFormat
const ScAddress & GetSrcPos() const
std::unique_ptr< ScTokenArray > pFormula2
bool IsIgnoreBlank() const
const OUString & GetSrcString() const
virtual Type GetType() const =0
virtual ScFormatEntry * Clone(ScDocument *pDoc) const =0
virtual void UpdateReference(sc::RefUpdateContext &rCxt)=0
virtual void SetParent(ScConditionalFormat *pNew)=0
virtual void UpdateDeleteTab(sc::RefUpdateDeleteTabContext &rCxt)=0
virtual void UpdateMoveTab(sc::RefUpdateMoveTabContext &rCxt)=0
virtual void UpdateInsertTab(sc::RefUpdateInsertTabContext &rCxt)=0
bool operator()(double nVal1, double nVal2) const
std::basic_ostream< charT, traits > & operator<<(std::basic_ostream< charT, traits > &stream, const ScConditionMode &rMode)
virtual SotClipboardFormatId GetFormat(const TransferableDataHelper &aHelper) override
Reference< XOutputStream > stream
bool operator<(const ScDPCollection::DBType &left, const ScDPCollection::DBType &right)
@ StartListening
If set, cloned formula cells will start to listen to the document.
enumrange< T >::Iterator begin(enumrange< T >)
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)
StringCacheType maStrings
std::map< double, sal_Int32, approx_less > ValueCacheType
std::map< OUString, sal_Int32 > StringCacheType
This is very similar to ScCellValue, except that it references the original value instead of copying ...
Context for reference update during shifting, moving or copying of cell ranges.
bool operator==(const XclFontData &rLeft, const XclFontData &rRight)