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,
118 scenario = parser.parseScenario(package, openScenarioItem->
getScenarioName());
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::");
240 allItem->appendChild(scenarioItem);
247 model->setSourceModel(treemodel.get());
248 openScenarioView.setModel(model);
252OpenScenarioController::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)
304OpenScenarioController::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)
317 CMakePackageFinder
parser =
319 XMLScenarioParser scenarioParser;
320 std::vector<std::string> packageScenarios =
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);
Model of the FilterableTreeView.
Item in the TreeItemView.
std::string getScenarioPackage()
Returns the Name of the scenario package represented by this item.
std::string getScenarioName()
Returns the Name of the scenario represented by this item.
Model used by the OpenScenarioView.
OpenScenarioController(Data_Structure::PackageVectorPtr packages, Exec::ExecutorPtr exec, QObject *parent=0)
Constructor that sets the data structure and optionally the parent object.
void updated()
This signal gets emitted if the data structure has changed.
void showOpenScenarioView()
Shows the OpenScenarioView which allows the User to open and load in a Scenario.
void on_showAddPackageDialog()
void updateModel()
Reloads the packages into the model.
~OpenScenarioController() override
void on_openScenario(int row, int column, QModelIndex parent)
Finds a scenario in the model, based on the given data and updates the current model and data structu...
static std::string getCacheDir()
This class provides different methods to parse and save scenario data in XML-Files.
static std::vector< std::string > getScenariosFromFolder(const std::string &folder)
Finds all .xml scenario files in a folder and returns a list of paths to them.
void appendChild(TreeItem *child)
virtual QVariant data(int column) const
static std::string GetDefaultUserConfigPath()
The user config directory of ArmarX.
const CMakePackageFinder & findPackage(const std::string &packageName, const std::filesystem::path &packagePath="", bool suppressStdErr=false, bool usePackagePathOnlyAsHint=false)
static CMakePackageFinderCache GlobalCache
std::shared_ptr< Scenario > ScenarioPtr
std::shared_ptr< std::vector< ScenarioManager::Data_Structure::PackagePtr > > PackageVectorPtr
std::shared_ptr< Package > PackagePtr
std::shared_ptr< Executor > ExecutorPtr
bool contains(const MemoryID &general, const MemoryID &specific)
Indicates whether general is "less specific" than, or equal to, specific, i.e.
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::vector< std::string > split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)