31 #include <QMessageBox>
46 using namespace Controller;
47 using namespace Data_Structure;
48 using namespace Parser;
62 model->setSourceModel(treemodel.get());
65 QObject::connect(&openScenarioView,
66 SIGNAL(openScenario(
int,
int, QModelIndex)),
87 if (openScenarioItem ==
nullptr)
94 for (
unsigned int i = 0; i < packages->size(); i++)
98 package = packages->at(i);
103 if (package.get() ==
nullptr)
110 if (pos != std::string::npos)
112 scenario =
parser.parseScenario(package,
124 if (scenario.get() ==
nullptr)
127 std::string messageStr;
128 messageStr <<
"Failed to load Scenario " << openScenarioItem->
getScenarioName()
130 messageStr <<
"Either the File was not found or it has no valid scx formatting";
131 message.setText(QString::fromStdString(messageStr));
136 for (
const auto& it : *scenario->getApplications())
138 executor->loadAndSetCachedProperties(it, cacheDir,
false,
false);
141 scenario->reloadAppInstances();
143 package->addScenario(scenario);
145 const std::string file =
147 QSettings settings(QString(file.c_str()), QSettings::NativeFormat);
149 QStringList settingsPackages = settings.value(
"scenarios").toStringList();
150 settingsPackages.removeDuplicates();
152 QString toAppend = QString::fromStdString(scenario->getName());
153 toAppend.append(
"::Package::");
154 toAppend.append(QString::fromStdString(scenario->getPackage()->getName()));
156 settingsPackages.append(toAppend);
157 settings.setValue(
"scenarios", settingsPackages);
160 QMap<QString, int> favouriteCount;
162 settings.beginGroup(
"favourites");
163 QStringList keys = settings.childKeys();
164 foreach (QString key, keys)
166 favouriteCount[key] = settings.value(key).toInt();
170 settings.beginGroup(
"favourites");
171 QMap<QString, int>::const_iterator i = favouriteCount.constBegin();
173 while (i != favouriteCount.constEnd())
175 if (i.key().compare(QString::fromStdString(
176 scenario->getName() +
"::Package::" + scenario->getPackage()->getName())) == 0)
178 settings.setValue(i.key(), i.value() + 1);
183 settings.setValue(i.key(), i.value());
190 settings.setValue(QString::fromStdString(scenario->getName() +
191 "::Package::" + scenario->getPackage()->getName()),
203 openScenarioView.exec();
217 QStringList paths = getAllClosedScenarios();
218 QStringList favourites = getFavouriteScenarios(paths);
227 for (
int i = 0; i < favourites.size(); i++)
229 QStringList
split = favourites.at(i).split(
"::Package::");
235 for (
int i = 0; i < paths.size(); i++)
237 QStringList
split = paths.at(i).split(
"::Package::");
247 model->setSourceModel(treemodel.get());
252 OpenScenarioController::getFavouriteScenarios(QStringList allClosedScenarios)
254 const std::string file =
256 QSettings settings(QString(file.c_str()), QSettings::NativeFormat);
258 QMap<QString, int> favouriteCount;
260 settings.beginGroup(
"favourites");
261 QStringList keys = settings.childKeys();
262 foreach (QString key, keys)
264 favouriteCount[key] = settings.value(key).toInt();
268 if (favouriteCount.size() == 0)
270 return QStringList();
273 QList<QPair<QString, int>> favouriteSort;
275 for (
const auto& key : favouriteCount.toStdMap())
277 favouriteSort.push_back(QPair<QString, int>(key.first, key.second));
280 std::sort(favouriteSort.begin(),
282 [](
const QPair<QString, int>& p1,
const QPair<QString, int>& p2)
283 { return p1.second > p2.second; });
287 for (
int i = 0; i < favouriteSort.count(); ++i)
290 if (allClosedScenarios.contains(favouriteSort[i].first))
292 result.push_back(favouriteSort[i].first);
293 if ((
size_t)result.size() == favlistSize)
304 OpenScenarioController::getAllClosedScenarios()
306 const std::string file =
308 QSettings settings(QString(file.c_str()), QSettings::NativeFormat);
309 auto packages = settings.value(
"packages").toStringList().toSet();
310 auto openedScenarios = settings.value(
"scenarios").toStringList().toSet();
313 for (
const auto& package : packages)
318 CMakePackageFinderCache::GlobalCache.findPackage(package.toStdString());
319 XMLScenarioParser scenarioParser;
320 std::vector<std::string> packageScenarios =
321 scenarioParser.getScenariosFromFolder(
parser.getScenariosDir());
323 for (
const auto&
str : packageScenarios)
326 for (
const auto& opened : openedScenarios)
328 if (opened.compare(
"") == 0)
332 QString name = opened.split(
"::Package::").at(0);
333 QString p = opened.split(
"::Package::").at(1);
334 if (name.compare(QString::fromStdString(
str)) == 0 &&
335 p.compare(QString::fromStdString(package.toStdString())) == 0)
343 QString resultStr(QString::fromStdString(
str));
344 resultStr.append(
"::Package::");
345 resultStr.append(package);