Fri, 23 Mar 2018 21:36:37 +0200
added stream operators to Vertex
| 1291 | 1 | #include "headerhistorymodel.h" |
| 2 | #include "lddocument.h" | |
|
1292
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
3 | #include "generics/migrate.h" |
| 1291 | 4 | |
| 5 | HeaderHistoryModel::HeaderHistoryModel(LDHeader* header, QObject* parent) : | |
| 6 | QAbstractTableModel {parent}, | |
| 7 | header {header} {} | |
| 8 | ||
| 9 | int HeaderHistoryModel::rowCount(const QModelIndex&) const | |
| 10 | { | |
| 11 | if (this->header) | |
| 12 | return this->header->history.size(); | |
| 1307 | 13 | else |
| 14 | return 0; | |
| 1291 | 15 | } |
| 16 | ||
| 17 | int HeaderHistoryModel::columnCount(const QModelIndex&) const | |
| 18 | { | |
| 19 | return 3; | |
| 20 | } | |
| 21 | ||
| 22 | QVariant HeaderHistoryModel::data(const QModelIndex& index, int role) const | |
| 23 | { | |
|
1292
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
24 | if (this->header and (role == Qt::DisplayRole || role == Qt::EditRole)) |
| 1291 | 25 | { |
| 26 | const auto& entry = this->header->history[index.row()]; | |
| 27 | switch (static_cast<Column>(index.column())) | |
| 28 | { | |
| 29 | case DateColumn: | |
| 30 | return entry.date; | |
| 31 | ||
| 32 | case AuthorColumn: | |
| 33 | return entry.author; | |
| 34 | ||
| 35 | case DescriptionColumn: | |
| 36 | return entry.description; | |
| 37 | ||
| 38 | default: | |
| 39 | return {}; | |
| 40 | } | |
| 41 | } | |
| 42 | else | |
| 43 | { | |
| 44 | return {}; | |
| 45 | } | |
| 46 | } | |
| 47 | ||
| 48 | QVariant HeaderHistoryModel::headerData(int section, Qt::Orientation orientation, int role) const | |
| 49 | { | |
| 50 | if (orientation == Qt::Horizontal and role == Qt::DisplayRole) | |
| 51 | { | |
| 52 | switch (static_cast<Column>(section)) | |
| 53 | { | |
| 54 | case DateColumn: | |
| 55 | return tr("Date"); | |
| 56 | ||
| 57 | case AuthorColumn: | |
| 58 | return tr("Author"); | |
| 59 | ||
| 60 | case DescriptionColumn: | |
| 61 | return tr("Description"); | |
| 62 | ||
| 63 | default: | |
| 64 | return {}; | |
| 65 | } | |
| 66 | } | |
| 67 | else | |
| 68 | { | |
| 69 | return {}; | |
| 70 | } | |
| 71 | } | |
| 72 | ||
|
1292
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
73 | Qt::ItemFlags HeaderHistoryModel::flags(const QModelIndex& index) const |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
74 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
75 | Qt::ItemFlags flags = QAbstractTableModel::flags(index); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
76 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
77 | if (index.isValid()) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
78 | flags |= Qt::ItemIsEditable; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
79 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
80 | return flags; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
81 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
82 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
83 | bool HeaderHistoryModel::setData(const QModelIndex& index, const QVariant& value, int role) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
84 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
85 | if (role == Qt::EditRole) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
86 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
87 | LDHeader::HistoryEntry& entry = this->header->history[index.row()]; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
88 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
89 | switch (static_cast<Column>(index.column())) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
90 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
91 | case DateColumn: |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
92 | entry.date = value.toDate(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
93 | return true; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
94 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
95 | case AuthorColumn: |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
96 | entry.author = value.toString(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
97 | return true; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
98 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
99 | case DescriptionColumn: |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
100 | entry.description = value.toString(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
101 | return true; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
102 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
103 | default: |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
104 | return false; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
105 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
106 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
107 | else |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
108 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
109 | return false; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
110 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
111 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
112 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
113 | bool HeaderHistoryModel::moveRows( |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
114 | const QModelIndex&, |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
115 | int sourceRow, |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
116 | int count, |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
117 | const QModelIndex&, |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
118 | int destinationRow |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
119 | ) { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
120 | int sourceRowLast = sourceRow + count - 1; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
121 | this->beginMoveRows({}, sourceRow, sourceRowLast, {}, destinationRow); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
122 | ::migrate(this->header->history, sourceRow, sourceRowLast, destinationRow); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
123 | this->endMoveRows(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
124 | return true; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
125 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
126 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
127 | bool HeaderHistoryModel::removeRows(int row, int count, const QModelIndex&) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
128 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
129 | if (row >= 0 and row + count - 1 < this->rowCount()) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
130 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
131 | this->beginRemoveRows({}, row, row + count - 1); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
132 | this->header->history.remove(row, count); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
133 | this->endRemoveRows(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
134 | return true; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
135 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
136 | else |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
137 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
138 | return false; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
139 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
140 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
141 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
142 | bool HeaderHistoryModel::insertRows(int startRow, int count, const QModelIndex&) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
143 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
144 | if (startRow >= 0 and startRow <= this->rowCount()) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
145 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
146 | this->beginInsertRows({}, startRow, startRow + count - 1); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
147 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
148 | for (int row : range(startRow, startRow + 1, startRow + count - 1)) |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
149 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
150 | this->header->history.insert(row, {}); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
151 | this->header->history[row].date = QDate::currentDate(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
152 | this->header->history[row].author = ::config->defaultUser(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
153 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
154 | |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
155 | this->endInsertRows(); |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
156 | return true; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
157 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
158 | else |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
159 | { |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
160 | return false; |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
161 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
162 | } |
|
66d2050d3bd9
Part history can now be edited
Teemu Piippo <teemu@hecknology.net>
parents:
1291
diff
changeset
|
163 | |
| 1291 | 164 | void HeaderHistoryModel::setHeader(LDHeader* header) |
| 165 | { | |
| 166 | emit layoutAboutToBeChanged(); | |
| 167 | this->header = header; | |
| 168 | emit layoutChanged(); | |
| 169 | } |