blob: f1b742abb89ef9c1e159229b29e39480baad67a9 (
plain)
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
66
67
68
69
70
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "spreadformula.h"
#include "spreadcell.h"
#include "spreadrole.h"
#include "spreadmodel.h"
bool SpreadCell::isNull() const
{
return !has(spread::Role::Display) && !has(spread::Role::Hightlight);
}
bool SpreadCell::has(int role) const
{
switch (role) {
case spread::Role::Display:
case spread::Role::Edit:
return !text.isNull() && !text.isEmpty();
case spread::Role::Hightlight:
return highlight; // false highlight equals to no highlight set
default:
return false;
}
}
void SpreadCell::set(int role, const QVariant &data)
{
switch (role) {
case spread::Role::Edit:
text = data.toString();
break;
case spread::Role::Hightlight:
highlight = data.toBool();
break;
default:
break;
}
}
QVariant SpreadCell::get(int role) const
{
switch (role) {
case spread::Role::Edit:
return text;
case spread::Role::Display: {
const QString display_text = displayText();
return display_text.isNull() ? QVariant{} : display_text;
}
case spread::Role::Hightlight:
return highlight;
default:
return QVariant{};
}
}
QString SpreadCell::displayText() const
{
SpreadModel *model = SpreadModel::instance();
const Formula formula = model->parseFormulaString(text);
if (!formula.isValid())
return text;
if (formula.firstOperandId() <= 0) // at least one arg should be available
return "#ERROR!";
if ((formula.firstOperandId() == id) || (formula.secondOperandId() == id))
return "#ERROR!"; // found loop
if (formula.includesLoop(model, model->dataModel()))
return "#ERROR!";
return model->formulaValueText(formula);
}
|