Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_memento_item.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef KIS_MEMENTO_ITEM_H_
8#define KIS_MEMENTO_ITEM_H_
9
10#include <kis_shared.h>
11#include <kis_shared_ptr.h>
12#include "kis_tile.h"
13
14
15class KisMementoItem;
17
19{
20public:
21 enum enumType {
22 CHANGED = 0x0,
23 DELETED = 0x1
24 };
25
26public:
28 : m_tileData(0), m_committedFlag(false) {
29 }
30
32 : KisShared(),
35 m_type(rhs.m_type),
36 m_col(rhs.m_col),
37 m_row(rhs.m_row),
38 m_next(0),
39 m_parent(0) {
40 if (m_tileData) {
43 else
44 m_tileData->ref();
45 }
46 }
47
57 KisMementoItem(qint32 col, qint32 row, KisTileData* defaultTileData, KisMementoManager *mm) {
58 Q_UNUSED(mm);
59 m_tileData = defaultTileData;
60 /* acquire the tileData deliberately and completely */
62 m_col = col;
63 m_row = row;
65 m_parent = 0;
66 m_committedFlag = true; /* yes, we've committed it */
67 }
68
74 Q_UNUSED(mm);
76 /* Setting counter: m_refCount++ */
77 m_tileData->ref();
78 m_col = rhs.m_col;
79 m_row = rhs.m_row;
81 m_parent = 0;
82 m_committedFlag = false;
83 }
84
88
90 // just to resemble KisTile...
91 }
92
94 // just to resemble KisTile...
95 }
96
98 Q_UNUSED(mm);
99 // just to resemble KisTile...
100 }
101
102
103 void reset() {
105 m_tileData = 0;
106 m_committedFlag = false;
107 }
108
109 void deleteTile(KisTile* tile, KisTileData* defaultTileData) {
110 m_tileData = defaultTileData;
111 /* Setting counter: m_refCount++ */
112 m_tileData->ref();
113
114 m_col = tile->col();
115 m_row = tile->row();
116 m_type = DELETED;
117 }
118
121 /* Setting counter: m_refCount++ */
122 m_tileData->ref();
123 m_col = tile->col();
124 m_row = tile->row();
125 m_type = CHANGED;
126 }
127
128 void commit() {
129 if (m_committedFlag) return;
130 if (m_tileData) {
137 m_tileData->deref();
138
140 }
141 m_committedFlag = true;
142 }
143
145 Q_ASSERT(m_tileData);
146 return KisTileSP(new KisTile(m_col, m_row, m_tileData, mm));
147 }
148
149 inline enumType type() {
150 return m_type;
151 }
152
155 }
157 return m_parent;
158 }
159
160 // Stuff for Kis..HashTable
162 m_next = next;
163 }
164 inline KisMementoItemSP next() const {
165 return m_next;
166 }
167 inline qint32 col() const {
168 return m_col;
169 }
170 inline qint32 row() const {
171 return m_row;
172 }
173 inline KisTileData* tileData() const {
174 return m_tileData;
175 }
176
178 QString s = QString("------\n"
179 "Memento item:\t\t0x%1 (0x%2)\n"
180 " status:\t(%3,%4) %5%6\n"
181 " parent:\t0x%7 (0x%8)\n"
182 " next:\t0x%9 (0x%10)\n")
183 .arg((quintptr)this)
184 .arg((quintptr)m_tileData)
185 .arg(m_col)
186 .arg(m_row)
187 .arg((m_type == CHANGED) ? 'W' : 'D')
188 .arg(m_committedFlag ? 'C' : '-')
189 .arg((quintptr)m_parent.data())
190 .arg(m_parent ? (quintptr)m_parent->m_tileData : 0)
191 .arg((quintptr)m_next.data())
192 .arg(m_next ? (quintptr)m_next->m_tileData : 0);
193 dbgKrita << s;
194 }
195
196protected:
198 if (m_tileData) {
199 if (m_committedFlag) {
200 m_tileData->setMementoed(false);
202 }
203 else {
204 m_tileData->deref();
205 }
206 }
207 }
208
209protected:
211 bool m_committedFlag {false};
213
214 qint32 m_col {0};
215 qint32 m_row {0};
216
219private:
220};
221
222
223#endif /* KIS_MEMENTO_ITEM_H_ */
224
KisMementoItemSP m_next
void notifyDeadWithoutDetaching()
void notifyDetachedFromDataManager()
KisMementoItemSP next() const
KisTileData * m_tileData
qint32 col() const
qint32 row() const
void changeTile(KisTile *tile)
void setNext(KisMementoItemSP next)
KisTileData * tileData() const
KisMementoItem(const KisMementoItem &rhs)
KisMementoItem(const KisMementoItem &rhs, KisMementoManager *mm)
KisMementoItem(qint32 col, qint32 row, KisTileData *defaultTileData, KisMementoManager *mm)
KisMementoItemSP m_parent
KisTileSP tile(KisMementoManager *mm)
void deleteTile(KisTile *tile, KisTileData *defaultTileData)
void setParent(KisMementoItemSP parent)
KisMementoItemSP parent()
void notifyAttachedToDataManager(KisMementoManager *mm)
bool ref() const
void setMementoed(bool value)
qint32 row() const
Definition kis_tile.h:92
qint32 col() const
Definition kis_tile.h:95
KisTileData * tileData() const
Definition kis_tile.h:118
#define dbgKrita
Definition kis_debug.h:45
KisSharedPtr< KisMementoItem > KisMementoItemSP
KisSharedPtr< KisTile > KisTileSP
Definition kis_tile.h:27