File indexing completed on 2024-06-23 03:45:56

0001 // xlsxconditionalformatting.h
0002 
0003 #ifndef QXLSX_XLSXCONDITIONALFORMATTING_H
0004 #define QXLSX_XLSXCONDITIONALFORMATTING_H
0005 
0006 #include <QtGlobal>
0007 #include <QString>
0008 #include <QList>
0009 #include <QColor>
0010 #include <QXmlStreamReader>
0011 #include <QXmlStreamWriter>
0012 #include <QSharedDataPointer>
0013 
0014 #include "xlsxglobal.h"
0015 #include "xlsxcellrange.h"
0016 #include "xlsxcellreference.h"
0017 
0018 class ConditionalFormattingTest;
0019 
0020 QT_BEGIN_NAMESPACE_XLSX
0021 
0022 class Format;
0023 class Worksheet;
0024 class Styles;
0025 class ConditionalFormattingPrivate;
0026 
0027 class QXLSX_EXPORT ConditionalFormatting
0028 {
0029 public:
0030     enum HighlightRuleType {
0031         Highlight_LessThan,
0032         Highlight_LessThanOrEqual,
0033         Highlight_Equal,
0034         Highlight_NotEqual,
0035         Highlight_GreaterThanOrEqual,
0036         Highlight_GreaterThan,
0037         Highlight_Between,
0038         Highlight_NotBetween,
0039 
0040         Highlight_ContainsText,
0041         Highlight_NotContainsText,
0042         Highlight_BeginsWith,
0043         Highlight_EndsWith,
0044 
0045         Highlight_TimePeriod,
0046 
0047         Highlight_Duplicate,
0048         Highlight_Unique,
0049         Highlight_Blanks,
0050         Highlight_NoBlanks,
0051         Highlight_Errors,
0052         Highlight_NoErrors,
0053 
0054         Highlight_Top,
0055         Highlight_TopPercent,
0056         Highlight_Bottom,
0057         Highlight_BottomPercent,
0058 
0059         Highlight_AboveAverage,
0060         Highlight_AboveOrEqualAverage,
0061         Highlight_AboveStdDev1,
0062         Highlight_AboveStdDev2,
0063         Highlight_AboveStdDev3,
0064         Highlight_BelowAverage,
0065         Highlight_BelowOrEqualAverage,
0066         Highlight_BelowStdDev1,
0067         Highlight_BelowStdDev2,
0068         Highlight_BelowStdDev3,
0069 
0070         Highlight_Expression
0071     };
0072 
0073     enum ValueObjectType
0074     {
0075         VOT_Formula,
0076         VOT_Max,
0077         VOT_Min,
0078         VOT_Num,
0079         VOT_Percent,
0080         VOT_Percentile
0081     };
0082 
0083 public:
0084     ConditionalFormatting();
0085     ConditionalFormatting(const ConditionalFormatting &other);
0086     ~ConditionalFormatting();
0087 
0088 public:
0089     bool addHighlightCellsRule(HighlightRuleType type, const Format &format, bool stopIfTrue=false);
0090     bool addHighlightCellsRule(HighlightRuleType type, const QString &formula1, const Format &format, bool stopIfTrue=false);
0091     bool addHighlightCellsRule(HighlightRuleType type, const QString &formula1, const QString &formula2, const Format &format, bool stopIfTrue=false);
0092     bool addDataBarRule(const QColor &color, bool showData=true, bool stopIfTrue=false);
0093     bool addDataBarRule(const QColor &color, ValueObjectType type1, const QString &val1, ValueObjectType type2, const QString &val2, bool showData=true, bool stopIfTrue=false);
0094     bool add2ColorScaleRule(const QColor &minColor, const QColor &maxColor, bool stopIfTrue=false);
0095     bool add3ColorScaleRule(const QColor &minColor, const QColor &midColor, const QColor &maxColor,  bool stopIfTrue=false);
0096 
0097     QList<CellRange> ranges() const;
0098 
0099     void addCell(const CellReference &cell);
0100     void addCell(int row, int col);
0101     void addRange(int firstRow, int firstCol, int lastRow, int lastCol);
0102     void addRange(const CellRange &range);
0103 
0104     //needed by QSharedDataPointer!!
0105     ConditionalFormatting &operator=(const ConditionalFormatting &other);
0106 
0107 private:
0108     friend class Worksheet;
0109     friend class ::ConditionalFormattingTest;
0110 
0111 private:
0112     bool saveToXml(QXmlStreamWriter &writer) const;
0113     bool loadFromXml(QXmlStreamReader &reader, Styles* styles = nullptr);
0114 
0115     QSharedDataPointer<ConditionalFormattingPrivate> d;
0116 };
0117 
0118 QT_END_NAMESPACE_XLSX
0119 
0120 #endif // QXLSX_XLSXCONDITIONALFORMATTING_H