diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/client.cpp | 141 | ||||
-rw-r--r-- | src/client.h | 62 | ||||
-rw-r--r-- | src/main.cpp | 26 | ||||
-rw-r--r-- | src/options.h | 83 |
6 files changed, 169 insertions, 145 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 96e74e0b2..dd24d7ae2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -843,6 +843,7 @@ SET(SRCS notifications.h notifymanager.cpp notifymanager.h + options.h render/graphicsdef.hpp render/graphics_calcImageRect.hpp render/graphics_drawImageRect.hpp diff --git a/src/Makefile.am b/src/Makefile.am index aa2a69671..072bc6949 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -956,6 +956,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ notifications.h \ notifymanager.cpp \ notifymanager.h \ + options.h \ render/graphicsdef.hpp \ render/graphics_calcImageRect.hpp \ render/graphics_drawImageRect.hpp \ diff --git a/src/client.cpp b/src/client.cpp index 4688e7306..868d40454 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -207,9 +207,8 @@ namespace } loginListener; } // namespace -Client::Client(const Options &options) : +Client::Client() : ActionListener(), - mOptions(options), mRootDir(), mCurrentServer(), mGame(nullptr), @@ -251,7 +250,7 @@ Client::Client(const Options &options) : void Client::testsInit() { - if (!mOptions.test.empty() && mOptions.test != "99") + if (!settings.options.test.empty() && settings.options.test != "99") { gameInit(); } @@ -269,16 +268,16 @@ void Client::gameInit() logger = new Logger; // Load branding information - if (!mOptions.brandingPath.empty()) - branding.init(mOptions.brandingPath); + if (!settings.options.brandingPath.empty()) + branding.init(settings.options.brandingPath); branding.setDefaultValues(getBrandingDefaults()); initRootDir(); initHomeDir(); // Configure logger - if (!mOptions.logFileName.empty()) - settings.logFileName = mOptions.logFileName; + if (!settings.options.logFileName.empty()) + settings.logFileName = settings.options.logFileName; else settings.logFileName = settings.localDataDir + "/manaplus.log"; logger->setLogFile(settings.logFileName); @@ -309,14 +308,14 @@ void Client::gameInit() initLang(); chatLogger = new ChatLogger; - if (mOptions.chatLogDir.empty()) + if (settings.options.chatLogDir.empty()) { chatLogger->setBaseLogDir(settings.localDataDir + std::string("/logs/")); } else { - chatLogger->setBaseLogDir(mOptions.chatLogDir); + chatLogger->setBaseLogDir(settings.options.chatLogDir); } logger->setLogToStandardOut(config.getBoolValue("logToStandardOut")); @@ -360,7 +359,7 @@ void Client::gameInit() Cpu::detect(); #if defined(USE_OPENGL) #if !defined(ANDROID) && !defined(__APPLE__) && !defined(__native_client__) - if (!mOptions.safeMode && mOptions.test.empty() + if (!settings.options.safeMode && settings.options.test.empty() && !config.getBoolValue("videodetected")) { graphicsManager.detectVideoSettings(); @@ -378,8 +377,8 @@ void Client::gameInit() updateDataPath(); // Add the main data directories to our PhysicsFS search path - if (!mOptions.dataPath.empty()) - resman->addToSearchPath(mOptions.dataPath, false); + if (!settings.options.dataPath.empty()) + resman->addToSearchPath(settings.options.dataPath, false); // Add the local data directory to PhysicsFS search path resman->addToSearchPath(settings.localDataDir, false); @@ -417,18 +416,18 @@ void Client::gameInit() joystick->update(); // Initialize default server - mCurrentServer.hostname = mOptions.serverName; - mCurrentServer.port = mOptions.serverPort; + mCurrentServer.hostname = settings.options.serverName; + mCurrentServer.port = settings.options.serverPort; - loginData.username = mOptions.username; - loginData.password = mOptions.password; + loginData.username = settings.options.username; + loginData.password = settings.options.password; loginData.remember = serverConfig.getValue("remember", 1); loginData.registerLogin = false; if (mCurrentServer.hostname.empty()) { mCurrentServer.hostname = branding.getValue("defaultServer", ""); - mOptions.serverName = mCurrentServer.hostname; + settings.options.serverName = mCurrentServer.hostname; } if (mCurrentServer.port == 0) @@ -473,7 +472,7 @@ void Client::gameInit() Client::~Client() { - if (!mOptions.testMode) + if (!settings.options.testMode) gameClear(); else testsClear(); @@ -541,25 +540,25 @@ void Client::updateEnv() void Client::updateDataPath() { - if (mOptions.dataPath.empty() + if (settings.options.dataPath.empty() && !branding.getStringValue("dataPath").empty()) { if (isRealPath(branding.getStringValue("dataPath"))) { - mOptions.dataPath = branding.getStringValue("dataPath"); + settings.options.dataPath = branding.getStringValue("dataPath"); } else { - mOptions.dataPath = branding.getDirectory().append(dirSeparator) + settings.options.dataPath = branding.getDirectory().append(dirSeparator) + branding.getStringValue("dataPath"); } - mOptions.skipUpdate = true; + settings.options.skipUpdate = true; } } void Client::initGraphics() { - graphicsManager.initGraphics(mOptions.noOpenGL); + graphicsManager.initGraphics(settings.options.noOpenGL); runCounters = config.getBoolValue("packetcounters"); applyVSync(); @@ -573,7 +572,7 @@ void Client::initGraphics() void Client::initTitle() { - if (mOptions.test.empty()) + if (settings.options.test.empty()) { mCaption = strprintf("%s %s", branding.getStringValue("appName").c_str(), @@ -679,9 +678,9 @@ void Client::mountDataDir() #endif // Add branding/data to PhysFS search path - if (!mOptions.brandingPath.empty()) + if (!settings.options.brandingPath.empty()) { - std::string path = mOptions.brandingPath; + std::string path = settings.options.brandingPath; // Strip blah.manaplus from the path #ifdef WIN32 @@ -790,7 +789,7 @@ void Client::setEnv(const char *const name, const char *const value) void Client::testsClear() { - if (!mOptions.test.empty()) + if (!settings.options.test.empty()) gameClear(); else BeingInfo::clear(); @@ -934,14 +933,14 @@ void Client::gameClear() int Client::testsExec() const { #ifdef USE_OPENGL - if (mOptions.test.empty()) + if (settings.options.test.empty()) { TestMain test; return test.exec(); } else { - TestLauncher launcher(mOptions.test); + TestLauncher launcher(settings.options.test); return launcher.exec(); } #else @@ -1049,7 +1048,7 @@ int Client::gameExec() settings.supportUrl = mCurrentServer.supportUrl; settings.updateMirrors = mCurrentServer.updateMirrors; - if (mOptions.username.empty()) + if (settings.options.username.empty()) { if (loginData.remember) loginData.username = serverConfig.getValue("username", ""); @@ -1058,7 +1057,7 @@ int Client::gameExec() } else { - loginData.username = mOptions.username; + loginData.username = settings.options.username; } loginData.remember = serverConfig.getValue("remember", 1); @@ -1155,11 +1154,11 @@ int Client::gameExec() Net::getPartyHandler()->clear(); if (chatLogger) chatLogger->clear(); - if (!mOptions.dataPath.empty()) - UpdaterWindow::unloadMods(mOptions.dataPath); + if (!settings.options.dataPath.empty()) + UpdaterWindow::unloadMods(settings.options.dataPath); else UpdaterWindow::unloadMods(settings.oldUpdates); - if (!mOptions.skipUpdate) + if (!settings.options.skipUpdate) UpdaterWindow::unloadMods(settings.oldUpdates + "/fix/"); } @@ -1187,7 +1186,7 @@ int Client::gameExec() settings.supportUrl.clear(); ResourceManager *const resman = ResourceManager::getInstance(); - if (mOptions.dataPath.empty()) + if (settings.options.dataPath.empty()) { // Add customdata directory resman->searchAndRemoveArchives( @@ -1201,7 +1200,7 @@ int Client::gameExec() settings.oldUpdates.clear(); } - if (!mOptions.skipUpdate) + if (!settings.options.skipUpdate) { resman->searchAndRemoveArchives( settings.updatesDir + "/local/", @@ -1219,7 +1218,7 @@ int Client::gameExec() // Allow changing this using a server choice dialog // We show the dialog box only if the command-line // options weren't set. - if (mOptions.serverName.empty() && mOptions.serverPort == 0 + if (settings.options.serverName.empty() && settings.options.serverPort == 0 && !branding.getValue("onlineServerList", "a").empty()) { // Don't allow an alpha opacity @@ -1236,8 +1235,8 @@ int Client::gameExec() // Reset options so that cancelling or connect // timeout will show the server dialog. - mOptions.serverName.clear(); - mOptions.serverPort = 0; + settings.options.serverName.clear(); + settings.options.serverPort = 0; } BLOCK_END("Client::gameExec STATE_CHOOSE_SERVER") break; @@ -1274,11 +1273,11 @@ int Client::gameExec() mSearchHash = Net::Download::adlerBuffer( const_cast<char*>(mCurrentServer.hostname.c_str()), static_cast<int>(mCurrentServer.hostname.size())); - if (mOptions.username.empty() - || mOptions.password.empty()) + if (settings.options.username.empty() + || settings.options.password.empty()) { mCurrentDialog = new LoginDialog(&loginData, - mCurrentServer.hostname, &mOptions.updateHost); + mCurrentServer.hostname, &settings.options.updateHost); mCurrentDialog->postInit(); } else @@ -1286,7 +1285,7 @@ int Client::gameExec() mState = STATE_LOGIN_ATTEMPT; // Clear the password so that when login fails, the // dialog will show up next time. - mOptions.password.clear(); + settings.options.password.clear(); } BLOCK_END("Client::gameExec STATE_LOGIN") break; @@ -1324,7 +1323,7 @@ int Client::gameExec() { mCurrentDialog = new WorldSelectDialog(worlds); mCurrentDialog->postInit(); - if (mOptions.chooseDefault) + if (settings.options.chooseDefault) { static_cast<WorldSelectDialog*>(mCurrentDialog) ->action(ActionEvent(nullptr, "ok")); @@ -1348,8 +1347,8 @@ int Client::gameExec() BLOCK_START("Client::gameExec STATE_UPDATE") logger->log1("State: UPDATE"); // Determine which source to use for the update host - if (!mOptions.updateHost.empty()) - settings.updateHost = mOptions.updateHost; + if (!settings.options.updateHost.empty()) + settings.updateHost = settings.options.updateHost; else settings.updateHost = loginData.updateHost; initUpdatesDir(); @@ -1357,11 +1356,11 @@ int Client::gameExec() if (!settings.oldUpdates.empty()) UpdaterWindow::unloadUpdates(settings.oldUpdates); - if (mOptions.skipUpdate) + if (settings.options.skipUpdate) { mState = STATE_LOAD_DATA; settings.oldUpdates.clear(); - UpdaterWindow::loadDirMods(mOptions.dataPath); + UpdaterWindow::loadDirMods(settings.options.dataPath); } else if (loginData.updateType & UpdateType::Skip) { @@ -1376,7 +1375,7 @@ int Client::gameExec() + dirSeparator + settings.updatesDir; mCurrentDialog = new UpdaterWindow(settings.updateHost, settings.oldUpdates, - mOptions.dataPath.empty(), + settings.options.dataPath.empty(), loginData.updateType); mCurrentDialog->postInit(); } @@ -1393,7 +1392,7 @@ int Client::gameExec() // If another data path has been set, // we don't load any other files... - if (mOptions.dataPath.empty()) + if (settings.options.dataPath.empty()) { // Add customdata directory resman->searchAndAddArchives( @@ -1402,7 +1401,7 @@ int Client::gameExec() false); } - if (!mOptions.skipUpdate) + if (!settings.options.skipUpdate) { resman->searchAndAddArchives( settings.updatesDir + "/local/", @@ -1481,20 +1480,20 @@ int Client::gameExec() mCurrentDialog->postInit(); if (!(static_cast<CharSelectDialog*>(mCurrentDialog)) - ->selectByName(mOptions.character, + ->selectByName(settings.options.character, CharSelectDialog::Choose)) { (static_cast<CharSelectDialog*>(mCurrentDialog)) ->selectByName( serverConfig.getValue("lastCharacter", ""), - mOptions.chooseDefault ? + settings.options.chooseDefault ? CharSelectDialog::Choose : CharSelectDialog::Focus); } // Choosing character on the command line should work only // once, clear it so that 'switch character' works. - mOptions.character.clear(); + settings.options.character.clear(); BLOCK_END("Client::gameExec STATE_CHAR_SELECT") break; @@ -1889,7 +1888,7 @@ void Client::initRootDir() Configuration portable; portable.init(portableName); - if (mOptions.brandingPath.empty()) + if (settings.options.brandingPath.empty()) { branding.init(portableName); branding.setDefaultValues(getBrandingDefaults()); @@ -1897,36 +1896,36 @@ void Client::initRootDir() logger->log("Portable file: %s", portableName.c_str()); - if (mOptions.localDataDir.empty()) + if (settings.options.localDataDir.empty()) { dir = portable.getValue("dataDir", ""); if (!dir.empty()) { - mOptions.localDataDir = mRootDir + dir; + settings.options.localDataDir = mRootDir + dir; logger->log("Portable data dir: %s", - mOptions.localDataDir.c_str()); + settings.options.localDataDir.c_str()); } } - if (mOptions.configDir.empty()) + if (settings.options.configDir.empty()) { dir = portable.getValue("configDir", ""); if (!dir.empty()) { - mOptions.configDir = mRootDir + dir; + settings.options.configDir = mRootDir + dir; logger->log("Portable config dir: %s", - mOptions.configDir.c_str()); + settings.options.configDir.c_str()); } } - if (mOptions.screenshotDir.empty()) + if (settings.options.screenshotDir.empty()) { dir = portable.getValue("screenshotDir", ""); if (!dir.empty()) { - mOptions.screenshotDir = mRootDir + dir; + settings.options.screenshotDir = mRootDir + dir; logger->log("Portable screenshot dir: %s", - mOptions.screenshotDir.c_str()); + settings.options.screenshotDir.c_str()); } } } @@ -1945,7 +1944,7 @@ void Client::initHomeDir() void Client::initLocalDataDir() { - settings.localDataDir = mOptions.localDataDir; + settings.localDataDir = settings.options.localDataDir; if (settings.localDataDir.empty()) { @@ -1999,7 +1998,7 @@ void Client::initTempDir() void Client::initConfigDir() { - settings.configDir = mOptions.configDir; + settings.configDir = settings.options.configDir; if (settings.configDir.empty()) { @@ -2131,7 +2130,7 @@ void Client::initConfiguration() const std::string configPath; - if (mOptions.test.empty()) + if (settings.options.test.empty()) configPath = settings.configDir + "/config.xml"; else configPath = settings.configDir + "/test.xml"; @@ -2273,9 +2272,9 @@ void Client::initUpdatesDir() void Client::initScreenshotDir() { - if (!mOptions.screenshotDir.empty()) + if (!settings.options.screenshotDir.empty()) { - settings.screenshotDir = mOptions.screenshotDir; + settings.screenshotDir = settings.options.screenshotDir; if (mkdir_r(settings.screenshotDir.c_str())) { // TRANSLATORS: directory creation error @@ -2371,7 +2370,7 @@ void Client::storeSafeParameters() const enableMumble = config.getBoolValue("enableMumble"); enableMapReduce = config.getBoolValue("enableMapReduce"); - if (!mOptions.safeMode && !tmpOpengl) + if (!settings.options.safeMode && !tmpOpengl) { // if video mode configured reset most settings to safe config.setValue("hwaccel", false); @@ -2406,7 +2405,7 @@ void Client::storeSafeParameters() const config.write(); - if (mOptions.safeMode) + if (settings.options.safeMode) { isSafeMode = true; return; diff --git a/src/client.h b/src/client.h index 06bc1faf0..e2e5a84de 100644 --- a/src/client.h +++ b/src/client.h @@ -95,62 +95,7 @@ class Client final : public ConfigListener, public ActionListener { public: - /** - * A structure holding the values of various options that can be passed - * from the command line. - */ - struct Options - { - Options() : - username(), - password(), - character(), - brandingPath(), - updateHost(), - dataPath(), - homeDir(), - logFileName(), - chatLogDir(), - configDir(), - localDataDir(), - screenshotDir(), - test(), - serverName(), - serverPort(0), - printHelp(false), - printVersion(false), - skipUpdate(false), - chooseDefault(false), - noOpenGL(false), - safeMode(false), - testMode(false) - {} - - std::string username; - std::string password; - std::string character; - std::string brandingPath; - std::string updateHost; - std::string dataPath; - std::string homeDir; - std::string logFileName; - std::string chatLogDir; - std::string configDir; - std::string localDataDir; - std::string screenshotDir; - std::string test; - std::string serverName; - uint16_t serverPort; - bool printHelp; - bool printVersion; - bool skipUpdate; - bool chooseDefault; - bool noOpenGL; - bool safeMode; - bool testMode; - }; - - explicit Client(const Options &options); + explicit Client(); A_DELETE_COPY(Client) @@ -189,9 +134,6 @@ public: void setMouseFocused(const bool n) { mMouseFocused = n; } - const Options &getOptions() const A_WARN_UNUSED - { return mOptions; } - bool isKeyboardVisible() const; void setGuiAlpha(const float n) @@ -314,8 +256,6 @@ private: #endif #endif - Options mOptions; - std::string mRootDir; std::string mLogFileName; diff --git a/src/main.cpp b/src/main.cpp index 35a5570ea..23ad034fc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,10 +24,7 @@ #include "main.h" #include "client.h" - -#include <getopt.h> -#include <iostream> -#include <unistd.h> +#include "settings.h" #include "utils/delete2.h" #include "utils/gettext.h" @@ -49,6 +46,10 @@ #include <windows.h> #endif +#include <getopt.h> +#include <iostream> +#include <unistd.h> + #include <SDL_image.h> #include <SDL_mixer.h> #include <SDL_version.h> @@ -141,8 +142,7 @@ static void printVersion() std::cout << strprintf("ManaPlus client %s", FULL_VERSION) << std::endl; } -static void parseOptions(const int argc, char *const argv[], - Client::Options &options) +static void parseOptions(const int argc, char *const argv[]) { const char *const optstring = "hvud:U:P:Dc:p:l:L:C:s:t:T:a"; @@ -171,6 +171,8 @@ static void parseOptions(const int argc, char *const argv[], { nullptr, 0, nullptr, 0 } }; + Options &options = settings.options; + while (optind < argc) { const int result = getopt_long(argc, argv, @@ -277,16 +279,14 @@ int main(int argc, char *argv[]) selfName = argv[0]; - // Parse command line options - Client::Options options; - parseOptions(argc, argv, options); + parseOptions(argc, argv); - if (options.printHelp) + if (settings.options.printHelp) { printHelp(); _exit(0); } - else if (options.printVersion) + else if (settings.options.printVersion) { printVersion(); _exit(0); @@ -309,9 +309,9 @@ int main(int argc, char *argv[]) SetCurrentDirectory(PhysFs::getBaseDir()); #endif setPriority(true); - client = new Client(options); + client = new Client; int ret = 0; - if (!options.testMode) + if (!settings.options.testMode) { client->gameInit(); ret = client->gameExec(); diff --git a/src/options.h b/src/options.h new file mode 100644 index 000000000..a36c4bda4 --- /dev/null +++ b/src/options.h @@ -0,0 +1,83 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef OPTIONS_H +#define OPTIONS_H + +#include <string> + +/** + * A structure holding the values of various options that can be passed + * from the command line. + */ +struct Options +{ + Options() : + username(), + password(), + character(), + brandingPath(), + updateHost(), + dataPath(), + homeDir(), + logFileName(), + chatLogDir(), + configDir(), + localDataDir(), + screenshotDir(), + test(), + serverName(), + serverPort(0), + printHelp(false), + printVersion(false), + skipUpdate(false), + chooseDefault(false), + noOpenGL(false), + safeMode(false), + testMode(false) + {} + + std::string username; + std::string password; + std::string character; + std::string brandingPath; + std::string updateHost; + std::string dataPath; + std::string homeDir; + std::string logFileName; + std::string chatLogDir; + std::string configDir; + std::string localDataDir; + std::string screenshotDir; + std::string test; + std::string serverName; + uint16_t serverPort; + bool printHelp; + bool printVersion; + bool skipUpdate; + bool chooseDefault; + bool noOpenGL; + bool safeMode; + bool testMode; +}; + +#endif // OPTIONS_H |