File indexing completed on 2025-07-13 10:51:49

0001 /* This file is part of the KDE project
0002    SPDX-FileCopyrightText: 2003 Norbert Andres <nandres@web.de>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 
0008 #ifndef OPENCALCSTYLEEXPORT_H
0009 #define OPENCALCSTYLEEXPORT_H
0010 
0011 #include "sheets/core/Style.h"
0012 
0013 #include <QColor>
0014 #include <QFont>
0015 #include <QPen>
0016 #include <QString>
0017 #include <QList>
0018 
0019 namespace Calligra
0020 {
0021 namespace Sheets
0022 {
0023 class Cell;
0024 }
0025 }
0026 
0027 class QDomDocument;
0028 class QDomElement;
0029 
0030 class Style
0031 {
0032 public:
0033     enum breakBefore { none, automatic, page };
0034 
0035     Style() : breakB(none), size(0.0) {}
0036 
0037     QString name;
0038     uint    breakB;
0039     double  size;
0040 };
0041 
0042 class SheetStyle
0043 {
0044 public:
0045     SheetStyle() : visible(true) {}
0046 
0047     void copyData(SheetStyle const & ts) {
0048         visible = ts.visible;
0049     }
0050     static bool isEqual(SheetStyle const * const t1, SheetStyle const & t2);
0051 
0052     QString     name;
0053     bool        visible;
0054 };
0055 
0056 class NumberStyle
0057 {
0058 public:
0059     NumberStyle() {}
0060 
0061     enum NumberType { Boolean, Date, Number, Percentage, Time };
0062 
0063     void copyData(NumberStyle const & ts) {
0064         type = ts.type;
0065     }
0066     static bool isEqual(NumberStyle const * const t1, NumberStyle const & t2);
0067 
0068     QString     name;
0069 
0070     NumberType  type;
0071     QString     pattern;
0072 };
0073 
0074 class CellStyle
0075 {
0076 public:
0077     CellStyle();
0078 
0079     void copyData(CellStyle const & ts);
0080     static bool isEqual(CellStyle const * const t1, CellStyle const & t2);
0081 
0082     // all except the number style
0083     static void loadData(CellStyle & cs, const Calligra::Sheets::Cell& cell);
0084 
0085     QString     name;
0086 
0087     QFont       font;
0088     QString     numberStyle;
0089     QColor      color;
0090     QColor      bgColor;
0091     double      indent;
0092     bool        wrap;
0093     bool        vertical;
0094     int         angle;
0095     bool        print;
0096     QPen        left;
0097     QPen        right;
0098     QPen        top;
0099     QPen        bottom;
0100     bool        hideAll;
0101     bool        hideFormula;
0102     bool        notProtected;
0103 
0104     Calligra::Sheets::Style::HAlign  alignX;
0105     Calligra::Sheets::Style::VAlign  alignY;
0106 };
0107 
0108 class ColumnStyle : public Style
0109 {
0110 public:
0111     ColumnStyle() : Style() {}
0112 
0113     void copyData(ColumnStyle const & cs);
0114     static bool isEqual(ColumnStyle const * const c1, ColumnStyle const & c2);
0115 };
0116 
0117 class RowStyle : public Style
0118 {
0119 public:
0120     RowStyle() : Style() {}
0121 
0122     void copyData(RowStyle const & cs);
0123     static bool isEqual(RowStyle const * const c1, RowStyle const & c2);
0124 };
0125 
0126 class OpenCalcStyles
0127 {
0128 public:
0129     OpenCalcStyles();
0130     ~OpenCalcStyles();
0131 
0132     void    writeStyles(QDomDocument & doc, QDomElement & autoStyles);
0133     void    writeFontDecl(QDomDocument & doc, QDomElement & content);
0134 
0135     void    addFont(QFont const & font, bool def = false);
0136 
0137     QString cellStyle(CellStyle const & cs);
0138     QString columnStyle(ColumnStyle const & cs);
0139     QString numberStyle(NumberStyle const & ns);
0140     QString rowStyle(RowStyle const & rs);
0141     QString sheetStyle(SheetStyle const & ts);
0142 
0143 private:
0144     QList<CellStyle*>   m_cellStyles;
0145     QList<ColumnStyle*> m_columnStyles;
0146     QList<NumberStyle*> m_numberStyles;
0147     QList<RowStyle*>    m_rowStyles;
0148     QList<SheetStyle*>  m_sheetStyles;
0149     QList<QFont*>       m_fontList;
0150 
0151     QFont                 m_defaultFont;
0152 
0153     void addCellStyles(QDomDocument & doc, QDomElement & autoStyles);
0154     void addColumnStyles(QDomDocument & doc, QDomElement & autoStyles);
0155     void addNumberStyles(QDomDocument & doc, QDomElement & autoStyles);
0156     void addRowStyles(QDomDocument & doc, QDomElement & autoStyles);
0157     void addSheetStyles(QDomDocument & doc, QDomElement & autoStyles);
0158 };
0159 
0160 
0161 
0162 #endif