-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspreadsheet.h
65 lines (54 loc) · 1.38 KB
/
spreadsheet.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef SPREADSHEET_H
#define SPREADSHEET_H
#include <QMap>
#include <QString>
#include <QColor>
#include <QPair>
#include "exprparser.h"
class EvalError : public std::exception
{
public:
EvalError(QString message) : message(message) {}
QString message;
};
class RecursionError : public std::exception
{
public:
RecursionError(QString message) : message(message) {}
QString message;
};
struct CellStyle
{
inline static CellStyle basic();
bool bold;
bool italic;
};
QDataStream &operator<<(QDataStream &out, const CellStyle &in);
QDataStream &operator>>(QDataStream &in, CellStyle &out);
typedef QPair<quint32, quint32> Coordinate;
class SpreadSheet
{
public:
SpreadSheet();
QString getAt(int, int);
void setAt(int, int, QString);
void clearReferences();
bool contains(int, int);
CellStyle *getStyle(int row, int col);
QString evalAt(int, int);
QList<Coordinate> refStack;
QMap<Coordinate, QString> cellData;
QMap<Coordinate, CellStyle> cellStyles;
};
QDataStream &operator<<(QDataStream &out, const SpreadSheet &in);
QDataStream &operator>>(QDataStream &in, SpreadSheet &out);
class SheetEval : public ExprParser
{
public:
SheetEval(SpreadSheet *sheet) : sheet(sheet) {}
private:
SpreadSheet *sheet;
double getVar(QString) override;
double getFunc(QString named, QList<double> args) override;
};
#endif // SPREADSHEET_H