| 314 | } |
| 315 | |
| 316 | bool PreferencesDialog::updateSolver() |
| 317 | { |
| 318 | if (_editingSolverIndex == -1) { |
| 319 | return true; |
| 320 | } |
| 321 | |
| 322 | auto& driver = MznDriver::get(); |
| 323 | auto& solvers = driver.solvers(); |
| 324 | auto& userConfigFile = driver.userConfigFile(); |
| 325 | auto& userSolverConfigDir = driver.userSolverConfigDir(); |
| 326 | |
| 327 | if (!ui->requiredFlags->isHidden()) { |
| 328 | // Update the required flags/user set flags |
| 329 | |
| 330 | QGridLayout* rfLayout = static_cast<QGridLayout*>(ui->requiredFlags->layout()); |
| 331 | QVector<QStringList> defaultFlags; |
| 332 | for (int row=0; row<rfLayout->rowCount(); row++) { |
| 333 | if (QLayoutItem* li = rfLayout->itemAtPosition(row, 0)) { |
| 334 | QString key = static_cast<QLabel*>(li->widget())->text(); |
| 335 | QLayoutItem* li2 = rfLayout->itemAtPosition(row, 1); |
| 336 | QString val = static_cast<QLineEdit*>(li2->widget())->text(); |
| 337 | if (!val.isEmpty()) { |
| 338 | QStringList sl({ui->solverId->text(), key, val}); |
| 339 | defaultFlags.push_back(sl); |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | } |
| 344 | |
| 345 | auto doc = QJsonDocument::fromJson(allowFileRestore(userConfigFile)); |
| 346 | auto jo = doc.object(); |
| 347 | QJsonArray a0; |
| 348 | if (!jo.contains("solverDefaults")) { |
| 349 | // Fresh object, initialise |
| 350 | for (auto& df : defaultFlags) { |
| 351 | QJsonArray a1; |
| 352 | for (auto& f : df) { |
| 353 | a1.append(f); |
| 354 | } |
| 355 | a0.append(a1); |
| 356 | } |
| 357 | } else { |
| 358 | QJsonArray previous = jo["solverDefaults"].toArray(); |
| 359 | // First remove all entries for this solver |
| 360 | for (auto triple : previous) { |
| 361 | if (triple.isArray()) { |
| 362 | QJsonArray previousA1 = triple.toArray(); |
| 363 | if (previousA1.size()==3) { |
| 364 | if (previousA1[0]!=ui->solverId->text()) { |
| 365 | a0.append(triple); |
| 366 | } |
| 367 | } |
| 368 | } |
| 369 | } |
| 370 | // Now add the new values |
| 371 | for (auto& df : defaultFlags) { |
| 372 | QJsonArray a1; |
| 373 | for (auto& f : df) { |