From c375f18dac5dae3d559063c666fda5cc966076ab Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 4 Jul 2015 21:21:27 +0200 Subject: [PATCH] Add commandline argument to OpenSpaceEngine to override scene file Make scene file selectable in Launcher, using the configurationfile value as default --- apps/Launcher/mainwindow.cpp | 52 +++++++++++++++++++++++++--------- apps/Launcher/mainwindow.h | 5 +++- src/engine/openspaceengine.cpp | 21 ++++++++++---- 3 files changed, 59 insertions(+), 19 deletions(-) diff --git a/apps/Launcher/mainwindow.cpp b/apps/Launcher/mainwindow.cpp index 3ce0e50dbc..9d97a0ffe3 100644 --- a/apps/Launcher/mainwindow.cpp +++ b/apps/Launcher/mainwindow.cpp @@ -115,11 +115,16 @@ MainWindow::MainWindow() layout->addWidget(shortcutButton, 0, 1); layout->setRowStretch(1, 10); + + QLabel* configurationSelectionLabel = new QLabel("Configuration:"); + layout->addWidget(configurationSelectionLabel, 2, 0); + _configurations = new QComboBox; + layout->addWidget(_configurations, 2, 1); QLabel* sceneSelectionLabel = new QLabel("Scenes:"); - layout->addWidget(sceneSelectionLabel, 2, 0); + layout->addWidget(sceneSelectionLabel, 3, 0); _scenes = new QComboBox; - layout->addWidget(_scenes, 2, 1); + layout->addWidget(_scenes, 3, 1); container->setLayout(layout); } @@ -192,27 +197,40 @@ void MainWindow::initialize() { std::string configurationFile = _configurationFile; bool found = openspace::OpenSpaceEngine::findConfiguration(configurationFile); if (!found) { + LERRORC("MainWindow", "Could not find configuration file"); } _configuration = new openspace::ConfigurationManager; _configuration->loadFromFile(configurationFile); - - QString modulesDirectory = QString::fromStdString( - absPath("${SCENE}") - ); + // Load all available scenes + QString modulesDirectory = QString::fromStdString(absPath("${SCENE}")); QDir d(modulesDirectory); d.setFilter(QDir::Files); - QFileInfoList list = d.entryInfoList(); + _scenes->addItem("Use Default"); for (const QFileInfo& i : list) { - _sceneFiles.insert(i.fileName(), i.absoluteFilePath()); - _scenes->addItem(i.fileName()); + QString file = i.fileName(); + file = file.replace(".scene", ""); + _sceneFiles.insert(file, i.absoluteFilePath()); + _scenes->addItem(file); } - - _scenes->setCurrentText("default.scene"); - + _scenes->setCurrentText("Use Default"); _syncWidget->setSceneFiles(_sceneFiles); + + // Load all available configuration files + QString configurationDirectory = QString::fromStdString(absPath("${SGCT}")); + d = QDir(configurationDirectory); + d.setFilter(QDir::Files); + list = d.entryInfoList(); + _configurations->addItem("Use Default"); + for (const QFileInfo& i : list) { + QString file = i.fileName(); + file = file.replace(".xml", ""); + _configurationFiles.insert(file, i.absoluteFilePath()); + _configurations->addItem(file); + } + _configurations->setCurrentText("Use Default"); } void MainWindow::shortcutButtonPressed() { @@ -224,7 +242,15 @@ void MainWindow::syncButtonPressed() { } void MainWindow::startButtonPressed() { - QProcess::startDetached(OpenSpaceExecutable); + QString exec = OpenSpaceExecutable; + if (_sceneFiles.contains(_scenes->currentText())) + exec += " -scene \"" + _sceneFiles[_scenes->currentText()] + "\""; + + if (_configurationFiles.contains(_configurations->currentText())) + exec += " -sgct \"" + _configurationFiles[_configurations->currentText()] + "\""; + + LINFOC("MainWindow", "Executing: " << exec.toStdString()); + QProcess::startDetached(exec); } void MainWindow::newsNetworkError() { diff --git a/apps/Launcher/mainwindow.h b/apps/Launcher/mainwindow.h index f131a8aa25..62859548b0 100644 --- a/apps/Launcher/mainwindow.h +++ b/apps/Launcher/mainwindow.h @@ -63,9 +63,12 @@ private: QTextEdit* _informationWidget; + QComboBox* _configurations; + QMap _configurationFiles; + QComboBox* _scenes; QMap _sceneFiles; - + ShortcutWidget* _shortcutWidget; SyncWidget* _syncWidget; diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 3d919d213c..e51fae286d 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -92,6 +92,7 @@ namespace { struct { std::string configurationName; std::string sgctConfigurationName; + std::string sceneName; } commandlineArgumentPlaceholders; } @@ -354,11 +355,14 @@ bool OpenSpaceEngine::initialize() { _renderEngine->initialize(); sceneGraph->initialize(); - std::string sceneDescriptionPath; - success = configurationManager()->getValue( - ConfigurationManager::KeyConfigScene, sceneDescriptionPath); - if (success) - sceneGraph->scheduleLoadSceneFile(sceneDescriptionPath); + std::string sceneDescriptionPath = ""; + if (commandlineArgumentPlaceholders.sceneName.empty()) { + success = configurationManager()->getValue( + ConfigurationManager::KeyConfigScene, sceneDescriptionPath); + } + else + sceneDescriptionPath = commandlineArgumentPlaceholders.sceneName; + sceneGraph->scheduleLoadSceneFile(sceneDescriptionPath); _interactionHandler->setKeyboardController(new interaction::KeyboardControllerFixed); _interactionHandler->setMouseController(new interaction::OrbitalMouseController); @@ -409,6 +413,13 @@ bool OpenSpaceEngine::gatherCommandlineArguments() { "the OpenSpace configuration file"); _commandlineParser->addCommand(sgctConfigFileCommand); + commandlineArgumentPlaceholders.sceneName = ""; + CommandlineCommand* sceneFileCommand = new SingleCommand( + &commandlineArgumentPlaceholders.sceneName, "-scene", "", + "Provides the path to the scene file, overriding the value set in the OpenSpace" + " configuration file"); + _commandlineParser->addCommand(sceneFileCommand); + return true; }