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
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef DATAMODEL_H
#define DATAMODEL_H
#include "spreadcell.h"
#include "spreadkey.h"
/**********************************************************
* The DataModel struct manages the binding of data, keys,
* and ids. There are some special functionalities that are
* only related to data and keys, like
* shifting columns and rows
* inserting column and row
* removing columns and rows, and
* managing only the data.
* This struct is extracted from the SpreadModel, and the
* intention is to simplify the SpreadModel class and also
* encapsulate any data-related concepts.
**********************************************************/
struct DataModel
{
bool empty() const;
/******************************************************
* Unsets highlight of highlighted data.
* Returns a pair of top-left and bottom-right keys of updated cells
******************************************************/
std::pair<SpreadKey, SpreadKey> clearHighlight();
/******************************************************
* Sets highlight role of data.
* Returns true if any cell updated, otherwise, false.
******************************************************/
bool setHighlight(const SpreadKey &key, bool highlight);
QVariant getData(int id, int role) const;
QVariant getData(const SpreadKey &key, int role) const;
bool setData(const SpreadKey &key, const QVariant &value, int role);
bool clearData(const SpreadKey &key);
void shiftColumns(int from, int count);
void removeColumnCells(int column);
void shiftRows(int from, int count);
void removeRowCells(int row);
/******************************************************
* If the key already exists in the model, returns the
* id; otherwise, adds the key, assignes an id, and
* returns the id.
******************************************************/
int createId(const SpreadKey &key);
int getId(const SpreadKey &key) const;
SpreadKey getKey(int id) const;
private:
uint lastId = 0;
QMap<SpreadKey, SpreadCell> m_cells;
QMap<int, SpreadKey> m_keys;
};
#endif // DATAMODEL_H
|