File: datamodel.h

package info (click to toggle)
qt6-declarative 6.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 308,920 kB
  • sloc: cpp: 775,911; javascript: 514,247; xml: 10,855; python: 2,806; ansic: 2,253; java: 810; sh: 262; makefile: 41; php: 27
file content (63 lines) | stat: -rw-r--r-- 2,272 bytes parent folder | download | duplicates (2)
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