Changeset View
Changeset View
Standalone View
Standalone View
src/lib/defaultvariablemodel.cpp
Show First 20 Lines • Show All 140 Lines • ▼ Show 20 Line(s) | 137 | { | |||
---|---|---|---|---|---|
141 | addVariable(v); | 141 | addVariable(v); | ||
142 | } | 142 | } | ||
143 | 143 | | |||
144 | void DefaultVariableModel::addVariable(const Cantor::DefaultVariableModel::Variable& variable) | 144 | void DefaultVariableModel::addVariable(const Cantor::DefaultVariableModel::Variable& variable) | ||
145 | { | 145 | { | ||
146 | Q_D(DefaultVariableModel); | 146 | Q_D(DefaultVariableModel); | ||
147 | if ( d->variables.contains(variable) ) | 147 | if ( d->variables.contains(variable) ) | ||
148 | { | 148 | { | ||
149 | // TODO: Why we remove variable here? Set value properly | ||||
149 | removeVariable(variable); | 150 | removeVariable(variable); | ||
150 | } | 151 | } | ||
151 | beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); | 152 | beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); | ||
152 | d->variables.append(variable); | 153 | d->variables.append(variable); | ||
154 | emit variablesAdded(QStringList(variable.name)); | ||||
153 | endInsertRows(); | 155 | endInsertRows(); | ||
154 | } | 156 | } | ||
155 | 157 | | |||
156 | void DefaultVariableModel::removeVariable(const QString& name) | 158 | void DefaultVariableModel::removeVariable(const QString& name) | ||
157 | { | 159 | { | ||
158 | Variable v; | 160 | Variable v; | ||
159 | v.name = name; | 161 | v.name = name; | ||
160 | removeVariable(v); | 162 | removeVariable(v); | ||
161 | } | 163 | } | ||
162 | 164 | | |||
163 | void DefaultVariableModel::removeVariable(const Cantor::DefaultVariableModel::Variable& variable) | 165 | void DefaultVariableModel::removeVariable(const Cantor::DefaultVariableModel::Variable& variable) | ||
164 | { | 166 | { | ||
165 | Q_D(DefaultVariableModel); | 167 | Q_D(DefaultVariableModel); | ||
166 | int row = d->variables.indexOf(variable); | 168 | int row = d->variables.indexOf(variable); | ||
167 | if(row==-1) | 169 | if(row==-1) | ||
168 | return; | 170 | return; | ||
171 | const QString& name = variable.name; | ||||
169 | beginRemoveRows(QModelIndex(), row, row); | 172 | beginRemoveRows(QModelIndex(), row, row); | ||
170 | d->variables.removeAt(row); | 173 | d->variables.removeAt(row); | ||
171 | endRemoveRows(); | 174 | endRemoveRows(); | ||
175 | emit variablesRemoved(QStringList(name)); | ||||
172 | } | 176 | } | ||
173 | 177 | | |||
174 | void DefaultVariableModel::clearVariables() | 178 | void DefaultVariableModel::clearVariables() | ||
175 | { | 179 | { | ||
176 | Q_D(DefaultVariableModel); | 180 | Q_D(DefaultVariableModel); | ||
177 | beginResetModel(); | 181 | beginResetModel(); | ||
182 | | ||||
183 | QStringList names; | ||||
184 | for (const Variable var: d->variables) | ||||
185 | names.append(var.name); | ||||
186 | | ||||
178 | d->variables.clear(); | 187 | d->variables.clear(); | ||
179 | endResetModel(); | 188 | endResetModel(); | ||
189 | | ||||
190 | emit variablesRemoved(names); | ||||
191 | } | ||||
192 | | ||||
193 | void DefaultVariableModel::setVariables(const QList<DefaultVariableModel::Variable>& newVars) | ||||
194 | { | ||||
195 | Q_D(DefaultVariableModel); | ||||
196 | | ||||
197 | QStringList addedVars; | ||||
198 | QStringList removedVars; | ||||
199 | | ||||
200 | // Handle deleted vars | ||||
201 | int i = 0; | ||||
202 | while (i < d->variables.size()) | ||||
203 | { | ||||
204 | Variable var = d->variables[i]; | ||||
205 | bool found = false; | ||||
206 | for (const Variable& newvar : newVars) | ||||
207 | if(var.name == newvar.name) | ||||
208 | { | ||||
209 | found=true; | ||||
210 | break; | ||||
211 | } | ||||
212 | | ||||
213 | if (!found) | ||||
214 | { | ||||
215 | removedVars << var.name; | ||||
216 | beginRemoveRows(QModelIndex(), i, i); | ||||
217 | d->variables.removeAt(i); | ||||
218 | endRemoveRows(); | ||||
219 | } | ||||
220 | else | ||||
221 | i++; | ||||
222 | } | ||||
223 | | ||||
224 | // Handle added vars | ||||
225 | const int size = d->variables.size(); | ||||
226 | for (const Variable newvar : newVars) | ||||
227 | { | ||||
228 | bool found = false; | ||||
229 | for (int i = 0; i < size; i++) | ||||
230 | if(d->variables[i].name == newvar.name) | ||||
231 | { | ||||
232 | found=true; | ||||
233 | if (d->variables[i].value != newvar.value) | ||||
234 | { | ||||
235 | QModelIndex index = createIndex(i, ValueColumn); | ||||
236 | QAbstractItemModel::setData(index, newvar.value); | ||||
237 | d->variables[i].value = newvar.value; | ||||
238 | emit dataChanged(index, index); | ||||
239 | } | ||||
240 | break; | ||||
241 | } | ||||
242 | | ||||
243 | if (!found) | ||||
244 | { | ||||
245 | addedVars << newvar.name; | ||||
246 | beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); | ||||
247 | d->variables.append(newvar); | ||||
248 | endInsertRows(); | ||||
249 | } | ||||
250 | } | ||||
251 | | ||||
252 | emit variablesAdded(addedVars); | ||||
253 | emit variablesRemoved(removedVars); | ||||
180 | } | 254 | } | ||
181 | 255 | | |||
182 | Session* DefaultVariableModel::session() const | 256 | Session* DefaultVariableModel::session() const | ||
183 | { | 257 | { | ||
184 | Q_D(const DefaultVariableModel); | 258 | Q_D(const DefaultVariableModel); | ||
185 | return d->session; | 259 | return d->session; | ||
186 | } | 260 | } | ||
187 | 261 | | |||
262 | QList<DefaultVariableModel::Variable> DefaultVariableModel::variables() const | ||||
263 | { | ||||
264 | Q_D(const DefaultVariableModel); | ||||
265 | return d->variables; | ||||
266 | } | ||||
267 | | ||||
268 | QStringList DefaultVariableModel::variableNames() const | ||||
269 | { | ||||
270 | Q_D(const DefaultVariableModel); | ||||
271 | QStringList names; | ||||
272 | for (const Variable var: d->variables) | ||||
273 | names << var.name; | ||||
274 | return names; | ||||
275 | } | ||||
276 | | ||||
188 | bool operator==(const Cantor::DefaultVariableModel::Variable& one, const Cantor::DefaultVariableModel::Variable& other) | 277 | bool operator==(const Cantor::DefaultVariableModel::Variable& one, const Cantor::DefaultVariableModel::Variable& other) | ||
189 | { | 278 | { | ||
190 | return one.name == other.name; | 279 | return one.name == other.name; | ||
191 | } | 280 | } | ||
192 | 281 | | |||
193 | } | 282 | } |