X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=radiant%2Fpreferences.cpp;h=a691d812770cdd93c22fc26b8c7d2983a1b77f27;hb=857830098fde02315c7af7f4bc2d2f018eb67407;hp=2fd078830b64584f2cec84ab7faae9dac4bb7bc8;hpb=4eeb89d4b2c37bba2393caa63508b3ffe03e65c6;p=xonotic%2Fnetradiant.git diff --git a/radiant/preferences.cpp b/radiant/preferences.cpp index 2fd07883..a691d812 100644 --- a/radiant/preferences.cpp +++ b/radiant/preferences.cpp @@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // #include "preferences.h" +#include "environment.h" #include "debugging/debugging.h" @@ -187,17 +188,31 @@ CGameDescription *g_pGameDescription; ///< shortcut to g_GamesDialog.m_pCurrentD const char* const PREFERENCES_VERSION = "1.0"; -bool Preferences_Load(PreferenceDictionary& preferences, const char* filename) +bool Preferences_Load(PreferenceDictionary& preferences, const char* filename, const char *cmdline_prefix) { + bool ret = false; TextFileInputStream file(filename); if(!file.failed()) { XMLStreamParser parser(file); XMLPreferenceDictionaryImporter importer(preferences, PREFERENCES_VERSION); parser.exportXML(importer); - return true; + ret = true; } - return false; + + int l = strlen(cmdline_prefix); + for(int i = 1; i < g_argc - 1; ++i) + { + if(g_argv[i][0] == '-') + { + if(!strncmp(g_argv[i]+1, cmdline_prefix, l)) + if(g_argv[i][l+1] == '-') + preferences.importPref(g_argv[i]+l+2, g_argv[i+1]); + ++i; + } + } + + return ret; } bool Preferences_Save(PreferenceDictionary& preferences, const char* filename) @@ -259,7 +274,7 @@ void CGameDialog::LoadPrefs() globalOutputStream() << "loading global preferences from " << makeQuoted(strGlobalPref.c_str()) << "\n"; - if(!Preferences_Load(g_global_preferences, strGlobalPref.c_str())) + if(!Preferences_Load(g_global_preferences, strGlobalPref.c_str(), "global")) { globalOutputStream() << "failed to load global preferences from " << strGlobalPref.c_str() << "\n"; } @@ -446,7 +461,21 @@ void CGameDialog::Init() ScanForGames(); if (mGames.empty()) { - Error("Didn't find any valid game file descriptions, aborting\n"); + Error("Didn't find any valid game file descriptions, aborting\n"); + } + else + { + std::list::iterator iGame, iPrevGame; + for(iGame=mGames.begin(), iPrevGame = mGames.end(); iGame!=mGames.end(); iPrevGame = iGame, ++iGame) + { + if(iPrevGame != mGames.end()) + if(strcmp((*iGame)->getRequiredKeyValue("name"), (*iPrevGame)->getRequiredKeyValue("name")) < 0) + { + CGameDescription *h = *iGame; + *iGame = *iPrevGame; + *iPrevGame = h; + } + } } CGameDescription* currentGameDescription = 0; @@ -806,7 +835,7 @@ GtkWindow* PrefsDlg::BuildDialog() { GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); - GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes("Preferences", renderer, "text", 0, 0); + GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes("Preferences", renderer, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); } @@ -948,7 +977,7 @@ void Preferences_Load() globalOutputStream() << "loading local preferences from " << g_Preferences.m_inipath->str << "\n"; - if(!Preferences_Load(g_preferences, g_Preferences.m_inipath->str)) + if(!Preferences_Load(g_preferences, g_Preferences.m_inipath->str, g_GamesDialog.m_sGameFile.c_str())) { globalOutputStream() << "failed to load local preferences from " << g_Preferences.m_inipath->str << "\n"; }