// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #include "stdpch.h" #include "client_config_dialog.h" #include "system.h" #include "nel/misc/cmd_args.h" #include #ifdef QT_STATICPLUGIN #include #if defined(Q_OS_WIN32) Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) #elif defined(Q_OS_MAC) Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) #elif defined(Q_OS_UNIX) Q_IMPORT_PLUGIN(QXcbIntegrationPlugin) Q_IMPORT_PLUGIN(QXcbGlxIntegrationPlugin) #endif #endif NLMISC::CCmdArgs Args; int main(sint32 argc, char **argv) { QApplication app(argc, argv); NLMISC::CApplicationContext applicationContext; // parse command-line arguments Args.setDescription("Ryzom Configuration"); Args.addArg("p", "profile", "id", "Use this profile to determine what directory to use by default"); if (!Args.parse(argc, argv)) return 1; QApplication::setWindowIcon(QIcon(":/resources/welcome_icon.png")); QPixmap pixmap(":/resources/splash_screen.png" ); QSplashScreen splash( pixmap ); splash.show(); QLocale locale = QLocale::system(); // load application translations QTranslator localTranslator; if (localTranslator.load(locale, "ryzom_configuration", "_", ":/translations")) { QApplication::installTranslator(&localTranslator); } // load Qt default translations QTranslator qtTranslator; if (qtTranslator.load(locale, "qtbase", "_", ":/translations")) { QApplication::installTranslator(&qtTranslator); } // Known cases: // 1. Steam // - Linux and Windows: all files in Steam folder // - OS X: client.cfg in ~/Library/Application Support/Ryzom, client_default.cfg in Steam folder // 2. Installer // - Linux: client.cfg in ~/.ryzom// client_default.cfg in ~/.ryzom/ryzom_live/ // - Windows: client.cfg in Roaming/Ryzom// client_default.cfg in Local/Ryzom/ryzom_live/ // - OS X: client.cfg in ~/Library/Application Support/Ryzom// client_default.cfg in ~/Library/Application Support/Ryzom/ryzom_live/ // default paths std::string ryzomDir = NLMISC::CPath::standardizePath(NLMISC::CPath::getApplicationDirectory("Ryzom")); std::string currentDir = Args.getStartupPath(); std::string executableDir = Args.getProgramPath(); std::string configFilename = "client.cfg"; std::string configPath; // search client.cfg file in config directory (Ryzom Installer) if (Args.haveArg("p")) { ryzomDir = NLMISC::CPath::standardizePath(ryzomDir + Args.getArg("p").front()); // client.cfg is always in profile directory if using -p argument configPath = ryzomDir + configFilename; } else { #ifdef NL_OS_MAC // client.cfg is in ~/Library/Application Support/Ryzom under OS X configPath = ryzomDir + configFilename; #else // client.cfg is in current directory under other platforms configPath = currentDir + configFilename; #endif } // if file doesn't exist, create it if (!NLMISC::CFile::fileExists(configPath)) { // we need the full path to client_default.cfg std::string defaultConfigFilename = "client_default.cfg"; std::string defaultConfigPath; #ifdef NL_OS_MAC // fix path inside bundle defaultConfigPath = NLMISC::CPath::makePathAbsolute("../Resources", executableDir, true) + defaultConfigFilename; #else // same path as executables defaultConfigPath = executableDir + defaultConfigFilename; #endif // test if default config exists in determined path if (!NLMISC::CFile::fileExists(defaultConfigPath)) { defaultConfigPath = currentDir + defaultConfigFilename; // test if default config exists in current path if (!NLMISC::CFile::fileExists(defaultConfigPath)) { nlwarning("Unable to find %s", defaultConfigFilename.c_str()); return 1; } } if (!CSystem::GetInstance().config.create(configPath, defaultConfigPath)) { nlwarning("Unable to create %s", configPath.c_str()); return 1; } } if (!CSystem::GetInstance().config.load(configPath)) { nlwarning("Unable to load %s", configPath.c_str()); return 1; } CClientConfigDialog d; d.show(); splash.finish( &d ); return app.exec(); }