Changeset View
Changeset View
Standalone View
Standalone View
src/lib/defaultvariablemodel.cpp
Show All 25 Lines | |||||
26 | 26 | | |||
27 | namespace Cantor | 27 | namespace Cantor | ||
28 | { | 28 | { | ||
29 | 29 | | |||
30 | class DefaultVariableModelPrivate | 30 | class DefaultVariableModelPrivate | ||
31 | { | 31 | { | ||
32 | public: | 32 | public: | ||
33 | QList<DefaultVariableModel::Variable> variables; | 33 | QList<DefaultVariableModel::Variable> variables; | ||
34 | QStringList functions; | ||||
34 | 35 | | |||
35 | Session* session; | 36 | Session* session; | ||
36 | VariableManagementExtension* extension; | 37 | VariableManagementExtension* extension; | ||
37 | }; | 38 | }; | ||
38 | 39 | | |||
39 | DefaultVariableModel::DefaultVariableModel(Session* session): QAbstractTableModel(session), | 40 | DefaultVariableModel::DefaultVariableModel(Session* session): QAbstractTableModel(session), | ||
40 | d_ptr(new DefaultVariableModelPrivate) | 41 | d_ptr(new DefaultVariableModelPrivate) | ||
41 | { | 42 | { | ||
▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Line(s) | 138 | { | |||
141 | addVariable(v); | 142 | addVariable(v); | ||
142 | } | 143 | } | ||
143 | 144 | | |||
144 | void DefaultVariableModel::addVariable(const Cantor::DefaultVariableModel::Variable& variable) | 145 | void DefaultVariableModel::addVariable(const Cantor::DefaultVariableModel::Variable& variable) | ||
145 | { | 146 | { | ||
146 | Q_D(DefaultVariableModel); | 147 | Q_D(DefaultVariableModel); | ||
147 | if ( d->variables.contains(variable) ) | 148 | if ( d->variables.contains(variable) ) | ||
148 | { | 149 | { | ||
150 | // TODO: Why we remove variable here? Set value properly | ||||
149 | removeVariable(variable); | 151 | removeVariable(variable); | ||
150 | } | 152 | } | ||
151 | beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); | 153 | beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); | ||
152 | d->variables.append(variable); | 154 | d->variables.append(variable); | ||
155 | emit variablesAdded(QStringList(variable.name)); | ||||
153 | endInsertRows(); | 156 | endInsertRows(); | ||
154 | } | 157 | } | ||
155 | 158 | | |||
156 | void DefaultVariableModel::removeVariable(const QString& name) | 159 | void DefaultVariableModel::removeVariable(const QString& name) | ||
157 | { | 160 | { | ||
158 | Variable v; | 161 | Variable v; | ||
159 | v.name = name; | 162 | v.name = name; | ||
160 | removeVariable(v); | 163 | removeVariable(v); | ||
161 | } | 164 | } | ||
162 | 165 | | |||
163 | void DefaultVariableModel::removeVariable(const Cantor::DefaultVariableModel::Variable& variable) | 166 | void DefaultVariableModel::removeVariable(const Cantor::DefaultVariableModel::Variable& variable) | ||
164 | { | 167 | { | ||
165 | Q_D(DefaultVariableModel); | 168 | Q_D(DefaultVariableModel); | ||
166 | int row = d->variables.indexOf(variable); | 169 | int row = d->variables.indexOf(variable); | ||
167 | if(row==-1) | 170 | if(row==-1) | ||
168 | return; | 171 | return; | ||
172 | const QString& name = variable.name; | ||||
169 | beginRemoveRows(QModelIndex(), row, row); | 173 | beginRemoveRows(QModelIndex(), row, row); | ||
170 | d->variables.removeAt(row); | 174 | d->variables.removeAt(row); | ||
171 | endRemoveRows(); | 175 | endRemoveRows(); | ||
176 | emit variablesRemoved(QStringList(name)); | ||||
172 | } | 177 | } | ||
173 | 178 | | |||
174 | void DefaultVariableModel::clearVariables() | 179 | void DefaultVariableModel::clearVariables() | ||
175 | { | 180 | { | ||
176 | Q_D(DefaultVariableModel); | 181 | Q_D(DefaultVariableModel); | ||
177 | beginResetModel(); | 182 | beginResetModel(); | ||
183 | | ||||
184 | QStringList names; | ||||
185 | for (const Variable var: d->variables) | ||||
186 | names.append(var.name); | ||||
187 | | ||||
178 | d->variables.clear(); | 188 | d->variables.clear(); | ||
179 | endResetModel(); | 189 | endResetModel(); | ||
190 | | ||||
191 | emit variablesRemoved(names); | ||||
192 | } | ||||
193 | | ||||
194 | void DefaultVariableModel::clearFunctions() | ||||
195 | { | ||||
196 | Q_D(DefaultVariableModel); | ||||
197 | QStringList names = d->functions; | ||||
198 | d->functions.clear(); | ||||
199 | emit functionsRemoved(names); | ||||
200 | } | ||||
201 | | ||||
202 | void DefaultVariableModel::setVariables(const QList<DefaultVariableModel::Variable>& newVars) | ||||
203 | { | ||||
204 | Q_D(DefaultVariableModel); | ||||
205 | | ||||
206 | QStringList addedVars; | ||||
207 | QStringList removedVars; | ||||
208 | | ||||
209 | // Handle deleted vars | ||||
210 | int i = 0; | ||||
211 | while (i < d->variables.size()) | ||||
212 | { | ||||
213 | Variable var = d->variables[i]; | ||||
214 | bool found = false; | ||||
215 | for (const Variable& newvar : newVars) | ||||
216 | if(var.name == newvar.name) | ||||
217 | { | ||||
218 | found=true; | ||||
219 | break; | ||||
220 | } | ||||
221 | | ||||
222 | if (!found) | ||||
223 | { | ||||
224 | removedVars << var.name; | ||||
225 | beginRemoveRows(QModelIndex(), i, i); | ||||
226 | d->variables.removeAt(i); | ||||
227 | endRemoveRows(); | ||||
228 | } | ||||
229 | else | ||||
230 | i++; | ||||
231 | } | ||||
232 | | ||||
233 | // Handle added vars | ||||
234 | const int size = d->variables.size(); | ||||
235 | for (const Variable newvar : newVars) | ||||
236 | { | ||||
237 | bool found = false; | ||||
238 | for (int i = 0; i < size; i++) | ||||
239 | if(d->variables[i].name == newvar.name) | ||||
240 | { | ||||
241 | found=true; | ||||
242 | if (d->variables[i].value != newvar.value) | ||||
243 | { | ||||
244 | QModelIndex index = createIndex(i, ValueColumn); | ||||
245 | QAbstractItemModel::setData(index, newvar.value); | ||||
246 | d->variables[i].value = newvar.value; | ||||
247 | emit dataChanged(index, index); | ||||
248 | } | ||||
249 | break; | ||||
250 | } | ||||
251 | | ||||
252 | if (!found) | ||||
253 | { | ||||
254 | addedVars << newvar.name; | ||||
255 | beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); | ||||
256 | d->variables.append(newvar); | ||||
257 | endInsertRows(); | ||||
258 | } | ||||
259 | } | ||||
260 | | ||||
261 | emit variablesAdded(addedVars); | ||||
262 | emit variablesRemoved(removedVars); | ||||
263 | } | ||||
264 | | ||||
265 | void DefaultVariableModel::setFunctions(const QStringList& newFuncs) | ||||
266 | { | ||||
267 | Q_D(DefaultVariableModel); | ||||
268 | QStringList addedFuncs; | ||||
269 | QStringList removedFuncs; | ||||
270 | | ||||
271 | //remove the old variables | ||||
272 | int i = 0; | ||||
273 | while (i < d->functions.size()) | ||||
274 | { | ||||
275 | //check if this var is present in the new variables | ||||
276 | bool found=false; | ||||
277 | for (const QString& func : newFuncs) | ||||
278 | if(d->functions[i] == func) | ||||
279 | { | ||||
280 | found=true; | ||||
281 | break; | ||||
282 | } | ||||
283 | | ||||
284 | if(!found) | ||||
285 | { | ||||
286 | removedFuncs<<d->functions[i]; | ||||
287 | d->functions.removeAt(i); | ||||
288 | } | ||||
289 | else | ||||
290 | i++; | ||||
291 | } | ||||
292 | | ||||
293 | for (const QString& func : newFuncs) | ||||
294 | { | ||||
295 | if (!d->functions.contains(func)) | ||||
296 | { | ||||
297 | addedFuncs<<func; | ||||
298 | d->functions.append(func); | ||||
299 | } | ||||
300 | } | ||||
301 | | ||||
302 | emit functionsAdded(addedFuncs); | ||||
303 | emit functionsRemoved(removedFuncs); | ||||
180 | } | 304 | } | ||
181 | 305 | | |||
182 | Session* DefaultVariableModel::session() const | 306 | Session* DefaultVariableModel::session() const | ||
183 | { | 307 | { | ||
184 | Q_D(const DefaultVariableModel); | 308 | Q_D(const DefaultVariableModel); | ||
185 | return d->session; | 309 | return d->session; | ||
186 | } | 310 | } | ||
187 | 311 | | |||
312 | QList<DefaultVariableModel::Variable> DefaultVariableModel::variables() const | ||||
313 | { | ||||
314 | Q_D(const DefaultVariableModel); | ||||
315 | return d->variables; | ||||
316 | } | ||||
317 | | ||||
318 | QStringList DefaultVariableModel::variableNames() const | ||||
319 | { | ||||
320 | Q_D(const DefaultVariableModel); | ||||
321 | QStringList names; | ||||
322 | for (const Variable var: d->variables) | ||||
323 | names << var.name; | ||||
324 | return names; | ||||
325 | } | ||||
326 | | ||||
327 | QStringList DefaultVariableModel::functions() const | ||||
328 | { | ||||
329 | Q_D(const DefaultVariableModel); | ||||
330 | return d->functions; | ||||
331 | } | ||||
332 | | ||||
188 | bool operator==(const Cantor::DefaultVariableModel::Variable& one, const Cantor::DefaultVariableModel::Variable& other) | 333 | bool operator==(const Cantor::DefaultVariableModel::Variable& one, const Cantor::DefaultVariableModel::Variable& other) | ||
189 | { | 334 | { | ||
190 | return one.name == other.name; | 335 | return one.name == other.name; | ||
191 | } | 336 | } | ||
192 | 337 | | |||
193 | } | 338 | } |