Commit a9e8af33 authored by schultz's avatar schultz

moved the commandline parsing further up in main function.

initialize settings before parsing command line options.
prevent double initialization.
parent bb4e1fc4
......@@ -441,9 +441,43 @@ int main(int argc, char **argv)
}
// Set organization and application names
QCoreApplication::setOrganizationName("rwth-aachen.de");
QCoreApplication::setApplicationName(TOSTRING(PRODUCT_STRING));
QCoreApplication::setApplicationVersion(OpenFlipper::Options::coreVersion());
// initialize a core application to check for commandline parameters
QCoreApplication* coreApp = new QCoreApplication(argc, argv);
OpenFlipper::Options::initializeSettings();
QCommandLineParser parser;
QString errorMessage;
// parse command line options
switch (parseCommandLine(parser, &errorMessage)) {
case CommandLineOk:
break;
case CommandLineError:
fputs(qPrintable(errorMessage), stderr);
fputs("\n\n", stderr);
fputs(qPrintable(parser.helpText()), stderr);
return 1;
case CommandLineVersionRequested:
printf("%s %s\n", qPrintable(QCoreApplication::applicationName()),
qPrintable(QCoreApplication::applicationVersion()));
return 0;
case CommandLineHelpRequested:
parser.showHelp();
Q_UNREACHABLE();
}
// only one application is allowed so delete the core application
// once cmdline parsing is done
delete coreApp;
#ifdef WIN32
//attach a console if necessary
attachConsole();
......@@ -463,26 +497,6 @@ int main(int argc, char **argv)
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
#endif
QApplication::setColorSpec( QApplication::CustomColor );
// initialize a core application to check for commandline parameters
QCoreApplication* coreApp = new QCoreApplication(argc,argv);
// parse command line options
switch (parseCommandLine(parser, &errorMessage)) {
case CommandLineOk:
break;
case CommandLineError:
fputs(qPrintable(errorMessage), stderr);
fputs("\n\n", stderr);
fputs(qPrintable(parser.helpText()), stderr);
return 1;
case CommandLineVersionRequested:
printf("%s %s\n", qPrintable(QCoreApplication::applicationName()),
qPrintable(QCoreApplication::applicationVersion()));
return 0;
case CommandLineHelpRequested:
parser.showHelp();
Q_UNREACHABLE();
}
#if QT_VERSION >= 0x050500
......@@ -500,12 +514,8 @@ int main(int argc, char **argv)
QSurfaceFormat::setDefaultFormat(format);
// only one application is allowed so delete the core application
// once cmdline parsing is done
delete coreApp;
QApplication app(argc, argv);
QApplication app(argc, argv);
QScreen *screen = app.primaryScreen();
QOffscreenSurface *surface = new QOffscreenSurface();
......@@ -518,11 +528,6 @@ int main(int argc, char **argv)
#endif
// Set organization and application names
QCoreApplication::setOrganizationName("rwth-aachen.de");
QCoreApplication::setApplicationName(TOSTRING(PRODUCT_STRING));
QCoreApplication::setApplicationVersion(OpenFlipper::Options::coreVersion());
if ( !QGLFormat::hasOpenGL() ) {
std::cerr << "This system has no OpenGL support.\n";
return -1;
......
......@@ -752,174 +752,176 @@ QString coreVersion() {
static const char * const CONFIG_DIR = "." TOSTRING(PRODUCT_STRING);
bool initializeSettings() {
#if defined(__INTEL_COMPILER)
compilerInfo_ = "Intel: " + QString( TOSTRING(__INTEL_COMPILER) ) + "." + QString( TOSTRING(__GNUC_MINOR__) ) ;
#if defined(__INTEL_COMPILER_BUILD_DATE)
compilerInfo_ += " BuildDate " + QString( TOSTRING(__INTEL_COMPILER_BUILD_DATE) );
#endif
#elif defined(__GNUC__)
compilerInfo_ = "Gnu CC: " + QString( TOSTRING(__GNUC__) ) + "." + QString( TOSTRING(__GNUC_MINOR__) ) ;
#if defined(__GNUC_PATCHLEVEL__)
compilerInfo_ += "." + QString( TOSTRING(__GNUC_PATCHLEVEL__) );
#endif
#elif defined (_MSC_FULL_VER)
compilerInfo_ = "MSVC: " + QString( TOSTRING(_MSC_FULL_VER) );
#else
compilerInfo_ = "Unknown Compiler";
#endif
//==================================================================================================
// Get the Main config dir in the home directory and possibly create it
//==================================================================================================
#if defined(ARCH_DARWIN)
configDir_ = QDir::home();
if ( ! configDir_.cd("Library") )
configDir_.mkdir("Library");
if ( ! configDir_.cd("Application Support") )
configDir_.mkdir("Application Support");
if ( ! configDir_.cd("de.rwth-aachen.graphics.openflipper") ) {
configDir_.mkdir("de.rwth-aachen.graphics.openflipper");
if ( ! configDir_.cd("de.rwth-aachen.graphics.openflipper") ) {
std::cerr << "Unable to create config dir ~/Library/de.rwth-aachen.graphics.openflipper" << std::endl;
return false;
}
}
#else
configDir_ = QDir::home();
if ( ! configDir_.cd(CONFIG_DIR) ) {
std::cerr << "Creating config Dir ~/" << CONFIG_DIR << std::endl;;
configDir_.mkdir(CONFIG_DIR);
if ( ! configDir_.cd(CONFIG_DIR) ) {
std::cerr << "Unable to create config dir ~/" << CONFIG_DIR << std::endl;
return false;
}
}
if (OpenFlipper::Options::settings_ == nullptr)
{
#endif
#if defined(__INTEL_COMPILER)
compilerInfo_ = "Intel: " + QString(TOSTRING(__INTEL_COMPILER)) + "." + QString(TOSTRING(__GNUC_MINOR__));
#if defined(__INTEL_COMPILER_BUILD_DATE)
compilerInfo_ += " BuildDate " + QString(TOSTRING(__INTEL_COMPILER_BUILD_DATE));
#endif
#elif defined(__GNUC__)
compilerInfo_ = "Gnu CC: " + QString(TOSTRING(__GNUC__)) + "." + QString(TOSTRING(__GNUC_MINOR__));
#if defined(__GNUC_PATCHLEVEL__)
compilerInfo_ += "." + QString(TOSTRING(__GNUC_PATCHLEVEL__));
#endif
#elif defined (_MSC_FULL_VER)
compilerInfo_ = "MSVC: " + QString(TOSTRING(_MSC_FULL_VER));
#else
compilerInfo_ = "Unknown Compiler";
#endif
//==================================================================================================
// Setup settings.
//==================================================================================================
// This has to be done as early as possible to set the program options right
// Force ini format on all platforms
QSettings::setDefaultFormat ( QSettings::IniFormat );
// Force settings to be stored in the OpenFlipper config directory
QSettings::setPath( QSettings::IniFormat, QSettings::UserScope , configDir_.absolutePath() );
// Finally attach the settings object.
settings_ = new OpenFlipperQSettings(QSettings::IniFormat, QSettings::UserScope, "ACG", "OpenFlipper");
//==================================================================================================
// Get the Main config dir in the home directory and possibly create it
//==================================================================================================
#if defined(ARCH_DARWIN)
configDir_ = QDir::home();
//==================================================================================================
// Now create special directories in th OpenFlipper config dir
//==================================================================================================
// Create a personal Icon cache dir to save for example user added icons
if ( ! configDir_.exists("Icons") ){
configDir_.mkdir("Icons");
std::cerr << "Creating Icon Cache Dir ~/" << CONFIG_DIR << "/Icons" << std::endl;
}
//==================================================================================================
// Setup main application dir
//==================================================================================================
if (!configDir_.cd("Library"))
configDir_.mkdir("Library");
// Remember the main application directory (assumed to be one above executable Path)
applicationDir_ = QCoreApplication::applicationDirPath();
if (!configDir_.cd("Application Support"))
configDir_.mkdir("Application Support");
// When using cmake, we get the absolute path to the Application directory via a define
applicationDir_.cd(OPENFLIPPER_APPDIR);
//==================================================================================================
// Setup directory containing plugins
//==================================================================================================
// start at application directory
pluginDir_ = applicationDir_;
// cmake style: Path is directly given from define!
pluginDir_.cd(OPENFLIPPER_PLUGINDIR);
dataDir_ = OpenFlipper::Options::applicationDir();
#ifdef OPENFLIPPER_DATADIR
dataDir_.cd(OPENFLIPPER_DATADIR);
#else
dataDir_ = OpenFlipper::Options::applicationDir();
#endif
// Set the Path to the Shaders
shaderDir_ = dataDir_;
shaderDir_.cd("Shaders");
ACG::ShaderProgGenerator::setShaderDir(OpenFlipper::Options::shaderDirStr());
// Set the Path to the textures
textureDir_ = dataDir_;
textureDir_.cd("Textures");
if (!configDir_.cd("de.rwth-aachen.graphics.openflipper")) {
configDir_.mkdir("de.rwth-aachen.graphics.openflipper");
if (!configDir_.cd("de.rwth-aachen.graphics.openflipper")) {
std::cerr << "Unable to create config dir ~/Library/de.rwth-aachen.graphics.openflipper" << std::endl;
return false;
}
}
#else
configDir_ = QDir::home();
if (!configDir_.cd(CONFIG_DIR)) {
std::cerr << "Creating config Dir ~/" << CONFIG_DIR << std::endl;;
configDir_.mkdir(CONFIG_DIR);
if (!configDir_.cd(CONFIG_DIR)) {
std::cerr << "Unable to create config dir ~/" << CONFIG_DIR << std::endl;
return false;
}
}
// Set the Path to the Scripts
scriptDir_ = dataDir_;
scriptDir_.cd("Scripts");
// Set the Path to the Icons
iconDir_ = dataDir_;
iconDir_.cd("Icons");
// Set the Path to the translations
translationsDir_ = dataDir_;
translationsDir_.cd("Translations");
// Set the Path to the Fonts
fontsDir_ = dataDir_;
fontsDir_.cd("Fonts");
// Set the Path to the License files
licenseDir_ = dataDir_;
licenseDir_.cd("Licenses");
// Set the Path to the Help
helpDir_ = dataDir_;
helpDir_.cd("Help");
//==================================================================================================
// Initialize with default values if not already set
//==================================================================================================
#endif
// User Interface Settings
if ( ! settings_->contains("Core/Gui/glViewer/defaultBackgroundColor") )
settings_->setValue("Core/Gui/glViewer/defaultBackgroundColor",QColor("black"));
if ( ! settings_->contains("Core/Gui/glViewer/showControlWheels") )
settings_->setValue("Core/Gui/glViewer/showControlWheels",false);
// Mouse Controls
if ( ! settings_->contains("Core/Mouse/Wheel/ZoomFactor") )
settings_->setValue("Core/Mouse/Wheel/ZoomFactor",1.0);
if ( ! settings_->contains("Core/Mouse/Wheel/ZoomFactorShift") )
settings_->setValue("Core/Mouse/Wheel/ZoomFactorShift",0.2);
if ( ! settings_->contains("Core/Mouse/Wheel/Invert") )
settings_->setValue("Core/Mouse/Wheel/Invert",false);
// General Stereo Settings
if ( ! settings_->contains("Core/Stereo/FocalLength") )
settings_->setValue("Core/Stereo/FocalLength",0.5);
if ( ! settings_->contains("Core/Stereo/EyeDistance") )
settings_->setValue("Core/Stereo/EyeDistance",0.07);
return true;
//==================================================================================================
// Setup settings.
//==================================================================================================
// This has to be done as early as possible to set the program options right
// Force ini format on all platforms
QSettings::setDefaultFormat(QSettings::IniFormat);
// Force settings to be stored in the OpenFlipper config directory
QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, configDir_.absolutePath());
// Finally attach the settings object.
settings_ = new OpenFlipperQSettings(QSettings::IniFormat, QSettings::UserScope, "ACG", "OpenFlipper");
//==================================================================================================
// Now create special directories in th OpenFlipper config dir
//==================================================================================================
// Create a personal Icon cache dir to save for example user added icons
if (!configDir_.exists("Icons")) {
configDir_.mkdir("Icons");
std::cerr << "Creating Icon Cache Dir ~/" << CONFIG_DIR << "/Icons" << std::endl;
}
//==================================================================================================
// Setup main application dir
//==================================================================================================
// Remember the main application directory (assumed to be one above executable Path)
applicationDir_ = QCoreApplication::applicationDirPath();
// When using cmake, we get the absolute path to the Application directory via a define
applicationDir_.cd(OPENFLIPPER_APPDIR);
//==================================================================================================
// Setup directory containing plugins
//==================================================================================================
// start at application directory
pluginDir_ = applicationDir_;
// cmake style: Path is directly given from define!
pluginDir_.cd(OPENFLIPPER_PLUGINDIR);
dataDir_ = OpenFlipper::Options::applicationDir();
#ifdef OPENFLIPPER_DATADIR
dataDir_.cd(OPENFLIPPER_DATADIR);
#else
dataDir_ = OpenFlipper::Options::applicationDir();
#endif
// Set the Path to the Shaders
shaderDir_ = dataDir_;
shaderDir_.cd("Shaders");
ACG::ShaderProgGenerator::setShaderDir(OpenFlipper::Options::shaderDirStr());
// Set the Path to the textures
textureDir_ = dataDir_;
textureDir_.cd("Textures");
// Set the Path to the Scripts
scriptDir_ = dataDir_;
scriptDir_.cd("Scripts");
// Set the Path to the Icons
iconDir_ = dataDir_;
iconDir_.cd("Icons");
// Set the Path to the translations
translationsDir_ = dataDir_;
translationsDir_.cd("Translations");
// Set the Path to the Fonts
fontsDir_ = dataDir_;
fontsDir_.cd("Fonts");
// Set the Path to the License files
licenseDir_ = dataDir_;
licenseDir_.cd("Licenses");
// Set the Path to the Help
helpDir_ = dataDir_;
helpDir_.cd("Help");
//==================================================================================================
// Initialize with default values if not already set
//==================================================================================================
// User Interface Settings
if (!settings_->contains("Core/Gui/glViewer/defaultBackgroundColor"))
settings_->setValue("Core/Gui/glViewer/defaultBackgroundColor", QColor("black"));
if (!settings_->contains("Core/Gui/glViewer/showControlWheels"))
settings_->setValue("Core/Gui/glViewer/showControlWheels", false);
// Mouse Controls
if (!settings_->contains("Core/Mouse/Wheel/ZoomFactor"))
settings_->setValue("Core/Mouse/Wheel/ZoomFactor", 1.0);
if (!settings_->contains("Core/Mouse/Wheel/ZoomFactorShift"))
settings_->setValue("Core/Mouse/Wheel/ZoomFactorShift", 0.2);
if (!settings_->contains("Core/Mouse/Wheel/Invert"))
settings_->setValue("Core/Mouse/Wheel/Invert", false);
// General Stereo Settings
if (!settings_->contains("Core/Stereo/FocalLength"))
settings_->setValue("Core/Stereo/FocalLength", 0.5);
if (!settings_->contains("Core/Stereo/EyeDistance"))
settings_->setValue("Core/Stereo/EyeDistance", 0.07);
return true;
}
}
void closeSettings() {
......@@ -939,7 +941,7 @@ OpenFlipperQSettings& OpenFlipperSettings() {
// Empty standard settings object if the right settings are not available!
static OpenFlipperQSettings emptySettings;
if ( OpenFlipper::Options::settings_ )
if ( OpenFlipper::Options::settings_ != nullptr )
return *OpenFlipper::Options::settings_;
else
return emptySettings;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment