Changeset View
Changeset View
Standalone View
Standalone View
src/backends/maxima/maximavariablemodel.cpp
Show All 33 Lines | |||||
34 | 34 | | |||
35 | MaximaVariableModel::MaximaVariableModel( MaximaSession* session) : Cantor::DefaultVariableModel(session) | 35 | MaximaVariableModel::MaximaVariableModel( MaximaSession* session) : Cantor::DefaultVariableModel(session) | ||
36 | { | 36 | { | ||
37 | } | 37 | } | ||
38 | 38 | | |||
39 | void MaximaVariableModel::clear() | 39 | void MaximaVariableModel::clear() | ||
40 | { | 40 | { | ||
41 | emit functionsRemoved(functionNames()); | 41 | emit functionsRemoved(functionNames()); | ||
42 | emit variablesRemoved(variableNames()); | | |||
43 | m_functions.clear(); | 42 | m_functions.clear(); | ||
44 | m_variables.clear(); | | |||
45 | DefaultVariableModel::clearVariables(); | 43 | DefaultVariableModel::clearVariables(); | ||
46 | } | 44 | } | ||
47 | 45 | | |||
48 | void MaximaVariableModel::update() | 46 | void MaximaVariableModel::update() | ||
49 | { | 47 | { | ||
50 | qDebug()<<"checking for new variables"; | 48 | qDebug()<<"checking for new variables"; | ||
51 | const QString& cmd1=variableInspectCommand.arg(QLatin1String("values")); | 49 | const QString& cmd1=variableInspectCommand.arg(QLatin1String("values")); | ||
52 | Cantor::Expression* expr1=session()->evaluateExpression(cmd1, Cantor::Expression::FinishingBehavior::DoNotDelete, true); | 50 | Cantor::Expression* expr1=session()->evaluateExpression(cmd1, Cantor::Expression::FinishingBehavior::DoNotDelete, true); | ||
▲ Show 20 Lines • Show All 85 Lines • ▼ Show 20 Line(s) | |||||
138 | { | 136 | { | ||
139 | if (status != Cantor::Expression::Done && status != Cantor::Expression::Error) | 137 | if (status != Cantor::Expression::Done && status != Cantor::Expression::Error) | ||
140 | return; | 138 | return; | ||
141 | 139 | | |||
142 | qDebug()<<"parsing variables"; | 140 | qDebug()<<"parsing variables"; | ||
143 | MaximaExpression* expr=static_cast<MaximaExpression*>(sender()); | 141 | MaximaExpression* expr=static_cast<MaximaExpression*>(sender()); | ||
144 | 142 | | |||
145 | QList<Variable> newVars=parse(expr); | 143 | QList<Variable> newVars=parse(expr); | ||
146 | QStringList addedVars; | 144 | setVariables(newVars); | ||
asemke: m_variableExpression seems to exist in MaximaVariableModel only. Should we define it as… | |||||
I have done it. But it doesn't bring big difference, because we still need casting for Cantor::Expression from evaluateExpression to MaximaExpression. sirgienko: I have done it. But it doesn't bring big difference, because we still need casting for `Cantor… | |||||
147 | QStringList removedVars; | | |||
148 | //remove the old variables | | |||
149 | for (const Variable& var : m_variables) | | |||
150 | { | | |||
151 | //check if this var is present in the new variables | | |||
152 | bool found=false; | | |||
153 | for (const Variable& var2 : newVars) | | |||
154 | { | | |||
155 | if(var.name==var2.name) | | |||
156 | { | | |||
157 | found=true; | | |||
158 | break; | | |||
159 | } | | |||
160 | } | | |||
161 | | ||||
162 | if(!found) | | |||
163 | { | | |||
164 | removeVariable(var); | | |||
165 | removedVars<<var.name; | | |||
166 | } | | |||
167 | } | | |||
168 | | ||||
169 | for (const Variable& var : newVars) | | |||
170 | { | | |||
171 | addVariable(var); | | |||
172 | | ||||
173 | addedVars<<var.name; | | |||
174 | } | | |||
175 | | ||||
176 | m_variables=newVars; | | |||
177 | 145 | | |||
178 | //the expression is not needed anymore | 146 | //the expression is not needed anymore | ||
179 | expr->deleteLater(); | 147 | expr->deleteLater(); | ||
180 | | ||||
181 | emit variablesAdded(addedVars); | | |||
182 | emit variablesRemoved(removedVars); | | |||
183 | } | 148 | } | ||
184 | 149 | | |||
185 | void MaximaVariableModel::parseNewFunctions(Cantor::Expression::Status status) | 150 | void MaximaVariableModel::parseNewFunctions(Cantor::Expression::Status status) | ||
186 | { | 151 | { | ||
187 | if (status != Cantor::Expression::Done && status != Cantor::Expression::Error) | 152 | if (status != Cantor::Expression::Done && status != Cantor::Expression::Error) | ||
188 | return; | 153 | return; | ||
189 | 154 | | |||
190 | qDebug()<<"parsing functions"; | 155 | qDebug()<<"parsing functions"; | ||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Line(s) | 202 | return cmd == variableInspectCommand.arg(QLatin1String("values")) | |||
238 | || cmd == inspectCommand.arg(QLatin1String("functions")); | 203 | || cmd == inspectCommand.arg(QLatin1String("functions")); | ||
239 | } | 204 | } | ||
240 | 205 | | |||
241 | MaximaSession* MaximaVariableModel::maximaSession() | 206 | MaximaSession* MaximaVariableModel::maximaSession() | ||
242 | { | 207 | { | ||
243 | return static_cast<MaximaSession*> (session()); | 208 | return static_cast<MaximaSession*> (session()); | ||
244 | } | 209 | } | ||
245 | 210 | | |||
246 | QList<Cantor::DefaultVariableModel::Variable> MaximaVariableModel::variables() | | |||
247 | { | | |||
248 | return m_variables; | | |||
249 | } | | |||
250 | | ||||
251 | QList<Cantor::DefaultVariableModel::Variable> MaximaVariableModel::functions() | 211 | QList<Cantor::DefaultVariableModel::Variable> MaximaVariableModel::functions() | ||
252 | { | 212 | { | ||
253 | return m_functions; | 213 | return m_functions; | ||
254 | } | 214 | } | ||
255 | 215 | | |||
256 | QStringList MaximaVariableModel::variableNames() | | |||
257 | { | | |||
258 | QStringList names; | | |||
259 | for (const Cantor::DefaultVariableModel::Variable& var : m_variables) | | |||
260 | names<<var.name; | | |||
261 | | ||||
262 | return names; | | |||
263 | } | | |||
264 | | ||||
265 | QStringList MaximaVariableModel::functionNames(bool stripParameters) | 216 | QStringList MaximaVariableModel::functionNames(bool stripParameters) | ||
266 | { | 217 | { | ||
267 | QStringList names; | 218 | QStringList names; | ||
268 | for (const Cantor::DefaultVariableModel::Variable& var : m_functions) | 219 | for (const Cantor::DefaultVariableModel::Variable& var : m_functions) | ||
269 | { | 220 | { | ||
270 | QString name=var.name; | 221 | QString name=var.name; | ||
271 | if(stripParameters) | 222 | if(stripParameters) | ||
272 | { | 223 | { | ||
273 | name=name.left(name.lastIndexOf(QLatin1Char('('))); | 224 | name=name.left(name.lastIndexOf(QLatin1Char('('))); | ||
274 | } | 225 | } | ||
275 | names<<name; | 226 | names<<name; | ||
276 | } | 227 | } | ||
277 | 228 | | |||
278 | return names; | 229 | return names; | ||
279 | } | 230 | } |
m_variableExpression seems to exist in MaximaVariableModel only. Should we define it as MaximaExpression and avoid this cast?