From: <geo...@us...> - 2011-06-12 01:39:34
|
Revision: 3994 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3994&view=rev Author: geoffthemedio Date: 2011-06-12 01:39:26 +0000 (Sun, 12 Jun 2011) Log Message: ----------- -Replaced path::file_string() and path::directory_string() calls with just path::string(), which should hopefully work with Boost FileSystem 2 and 3. -Changed how font file options are stored: now stored as full path, instead of relative to the resource dir. -In OptionsWnd.cpp, renamed FONT_SUFFIX to FONT_FILE_SUFFIX to be consistent with other strings defined nearby. -Modified the default language file location to be always in the default directory, rather than relative to the current resource directory. May need to revisit this. -Added validators for font file option setters. This is currently broken, as the font file selector widgets return only the final file name, rather than a full path, so the stringtable can't currently be changed using the file picker. It should be possible to type in the desired filename, though. -Added some fallbacks to get the default resource or save directory, if the specified location is invalid. -Similarly added a variant fallback for the default stringtable filename if the specified location in invalid. Modified Paths: -------------- trunk/FreeOrion/AI/PythonAI.cpp trunk/FreeOrion/Empire/Empire.cpp trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/CombatWnd.cpp trunk/FreeOrion/UI/GalaxySetupWnd.cpp trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/OptionsWnd.cpp trunk/FreeOrion/UI/ServerConnectWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/Sound.cpp trunk/FreeOrion/client/AI/AIClientApp.cpp trunk/FreeOrion/client/human/HumanClientApp.cpp trunk/FreeOrion/client/human/chmain.cpp trunk/FreeOrion/server/ServerApp.cpp trunk/FreeOrion/server/ServerFSM.cpp trunk/FreeOrion/universe/Universe.cpp trunk/FreeOrion/util/Directories.cpp trunk/FreeOrion/util/MultiplayerCommon.cpp Modified: trunk/FreeOrion/AI/PythonAI.cpp =================================================================== --- trunk/FreeOrion/AI/PythonAI.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/AI/PythonAI.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -229,7 +229,7 @@ try { // tell Python the path in which to locate AI script file - std::string AI_path = (GetResourceDir() / "AI").directory_string(); + std::string AI_path = (GetResourceDir() / "AI").string(); std::string path_command = "sys.path.append('" + AI_path + "')"; object ignored = exec(path_command.c_str(), s_main_namespace, s_main_namespace); Modified: trunk/FreeOrion/Empire/Empire.cpp =================================================================== --- trunk/FreeOrion/Empire/Empire.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/Empire/Empire.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -205,7 +205,9 @@ void LoadShipNames(std::vector<std::string>& names) { - boost::filesystem::ifstream ifs(GetResourceDir() / "shipnames.txt"); + std::string file_name = "shipnames.txt"; + + boost::filesystem::ifstream ifs(GetResourceDir() / file_name); while (ifs) { std::string latest_name; std::getline(ifs, latest_name); Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/ClientUI.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -53,9 +53,9 @@ fs::path ClientUI::ArtDir() { return GetResourceDir() / "data" / "art"; } fs::path ClientUI::SoundDir() { return GetResourceDir() / "data" / "sound"; } -std::string ClientUI::Font() { return (GetResourceDir() / GetOptionsDB().Get<std::string>("UI.font")).file_string(); } -std::string ClientUI::BoldFont() { return (GetResourceDir() / GetOptionsDB().Get<std::string>("UI.font-bold")).file_string(); } -std::string ClientUI::TitleFont() { return (GetResourceDir() / GetOptionsDB().Get<std::string>("UI.title-font")).file_string(); } +std::string ClientUI::Font() { return GetOptionsDB().Get<std::string>("UI.font"); } +std::string ClientUI::BoldFont() { return GetOptionsDB().Get<std::string>("UI.font-bold"); } +std::string ClientUI::TitleFont() { return GetOptionsDB().Get<std::string>("UI.title-font"); } int ClientUI::Pts() { return GetOptionsDB().Get<int>("UI.font-size"); } int ClientUI::TitlePts() { return GetOptionsDB().Get<int>("UI.title-font-size"); } @@ -402,10 +402,10 @@ db.Add<std::string>("UI.sound.balanced-focus", "OPTIONS_DB_UI_SOUND_BALANCED_FOCUS", "balanced_select.wav"); // fonts - db.Add<std::string>("UI.font", "OPTIONS_DB_UI_FONT", "DejaVuSans.ttf"); - db.Add<std::string>("UI.font-bold", "OPTIONS_DB_UI_FONT_BOLD", "DejaVuSans-Bold.ttf"); + db.Add<std::string>("UI.font", "OPTIONS_DB_UI_FONT", (GetRootDataDir() / "default" / "DejaVuSans.ttf").string()); + db.Add<std::string>("UI.font-bold", "OPTIONS_DB_UI_FONT_BOLD", (GetRootDataDir() / "default" / "DejaVuSans-Bold.ttf").string()); db.Add("UI.font-size", "OPTIONS_DB_UI_FONT_SIZE", 12, RangedValidator<int>(4, 40)); - db.Add<std::string>("UI.title-font", "OPTIONS_DB_UI_TITLE_FONT", "DejaVuSans.ttf"); + db.Add<std::string>("UI.title-font", "OPTIONS_DB_UI_TITLE_FONT", (GetRootDataDir() / "default" / "DejaVuSans.ttf").string()); db.Add("UI.title-font-size", "OPTIONS_DB_UI_TITLE_FONT_SIZE", 12, RangedValidator<int>(4, 40)); // colors @@ -677,9 +677,9 @@ { boost::shared_ptr<GG::Texture> retval; try { - retval = HumanClientApp::GetApp()->GetTexture(path.file_string(), mipmap); + retval = HumanClientApp::GetApp()->GetTexture(path.string(), mipmap); } catch(...) { - retval = HumanClientApp::GetApp()->GetTexture((ClientUI::ArtDir() / "misc" / "missing.png").file_string(), mipmap); + retval = HumanClientApp::GetApp()->GetTexture((ClientUI::ArtDir() / "misc" / "missing.png").string(), mipmap); } #ifdef FREEORION_MACOSX if (!mipmap) @@ -701,7 +701,7 @@ { namespace fs = boost::filesystem; assert(fs::is_directory(dir)); - const std::string KEY = dir.directory_string() + "/" + prefix; + const std::string KEY = dir.string() + "/" + prefix; PrefixedTextures::iterator prefixed_textures_it = m_prefixed_textures.find(KEY); if (prefixed_textures_it == m_prefixed_textures.end()) { prefixed_textures_it = m_prefixed_textures.insert(std::make_pair(KEY, TexturesAndDist())).first; Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -641,7 +641,7 @@ // Load resource paths from config file Ogre::ConfigFile cf; - cf.load((ClientUI::ArtDir() / "combat" / "resources.cfg").file_string()); + cf.load((ClientUI::ArtDir() / "combat" / "resources.cfg").string()); // Go through all sections & settings in the file Ogre::ConfigFile::SectionIterator section_it = cf.getSectionIterator(); @@ -653,7 +653,7 @@ ++it) { Ogre::String type_name = it->first, path_name = it->second; Ogre::ResourceGroupManager::getSingleton().addResourceLocation( - (ClientUI::ArtDir() / path_name).file_string(), + (ClientUI::ArtDir() / path_name).string(), type_name, section_name); } } Modified: trunk/FreeOrion/UI/GalaxySetupWnd.cpp =================================================================== --- trunk/FreeOrion/UI/GalaxySetupWnd.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/GalaxySetupWnd.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -509,9 +509,9 @@ GetOptionsDB().GetXML().WriteDoc(ofs); } else { std::cerr << UserString("UNABLE_TO_WRITE_CONFIG_XML") << std::endl; - std::cerr << GetConfigPath().file_string() << std::endl; + std::cerr << GetConfigPath().string() << std::endl; Logger().errorStream() << UserString("UNABLE_TO_WRITE_CONFIG_XML"); - Logger().errorStream() << GetConfigPath().file_string(); + Logger().errorStream() << GetConfigPath().string(); } } Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/MapWnd.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -1796,7 +1796,7 @@ if (!m_scanline_shader && GetOptionsDB().Get<bool>("UI.system-fog-of-war")) { m_scanline_shader = boost::shared_ptr<ShaderProgram>(ShaderProgram::shaderProgramFactory("", - ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").file_string()))); + ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").string()))); } const ObjectMap& known_objects = GetUniverse().EmpireKnownObjects(HumanClientApp::GetApp()->EmpireID()); Modified: trunk/FreeOrion/UI/OptionsWnd.cpp =================================================================== --- trunk/FreeOrion/UI/OptionsWnd.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/OptionsWnd.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -41,7 +41,7 @@ const std::string STRINGTABLE_FILE_SUFFIX = "_stringtable.txt"; const std::string MUSIC_FILE_SUFFIX = ".ogg"; const std::string SOUND_FILE_SUFFIX = ".wav"; - const std::string FONT_SUFFIX = ".ttf"; + const std::string FONT_FILE_SUFFIX = ".ttf"; class PlaceholderWnd : public GG::Wnd { @@ -79,21 +79,21 @@ m_path(path), m_filters(filters), m_edit(edit), m_directory(directory) {} void operator()() - { - try { - FileDlg dlg(m_path.directory_string(), m_edit->Text(), false, false, m_filters); - if (m_directory) - dlg.SelectDirectories(true); - dlg.Run(); - if (!dlg.Result().empty()) { - fs::path path = m_directory ? fs::complete(*dlg.Result().begin()) : RelativePath(m_path, fs::path(*dlg.Result().begin())); - *m_edit << path.file_string(); - m_edit->EditedSignal(m_edit->Text()); - } - } catch (const FileDlg::BadInitialDirectory& e) { - ClientUI::MessageBox(e.what(), true); + { + try { + FileDlg dlg(m_path.string(), m_edit->Text(), false, false, m_filters); + if (m_directory) + dlg.SelectDirectories(true); + dlg.Run(); + if (!dlg.Result().empty()) { + fs::path path = m_directory ? fs::complete(*dlg.Result().begin()) : RelativePath(m_path, fs::path(*dlg.Result().begin())); + *m_edit << path.string(); + m_edit->EditedSignal(m_edit->Text()); } + } catch (const FileDlg::BadInitialDirectory& e) { + ClientUI::MessageBox(e.what(), true); } + } fs::path m_path; std::vector<std::pair<std::string, std::string> > m_filters; @@ -104,9 +104,15 @@ bool ValidStringtableFile(const std::string& file) { return boost::algorithm::ends_with(file, STRINGTABLE_FILE_SUFFIX) && - fs::exists(GetResourceDir() / file) && !fs::is_directory(GetResourceDir() / file); + fs::exists(file) && !fs::is_directory(file); } + bool ValidFontFile(const std::string& file) + { + return boost::algorithm::ends_with(file, FONT_FILE_SUFFIX) && + fs::exists(file) && !fs::is_directory(file); + } + bool ValidMusicFile(const std::string& file) { return boost::algorithm::ends_with(file, MUSIC_FILE_SUFFIX) && @@ -174,10 +180,10 @@ DropListIndexSetOptionFunctor(const std::string& option_name, CUIDropDownList* drop_list) : m_option_name(option_name), m_drop_list(drop_list) {} void operator()(GG::DropDownList::iterator it) - { - assert(it != m_drop_list->end()); - GetOptionsDB().Set<std::string>(m_option_name, (*it)->Name()); - } + { + assert(it != m_drop_list->end()); + GetOptionsDB().Set<std::string>(m_option_name, (*it)->Name()); + } const std::string m_option_name; CUIDropDownList* m_drop_list; }; @@ -496,7 +502,7 @@ try { if (fs::exists(*it)) { std::string filename = it->filename(); - if (boost::algorithm::ends_with(filename, FONT_SUFFIX)) + if (boost::algorithm::ends_with(filename, FONT_FILE_SUFFIX)) filenames.insert(filename); } } catch (const fs::filesystem_error& e) { @@ -513,10 +519,10 @@ row->push_back(new RowContentsWnd(row->Width(), row->Height(), layout, m_indentation_level)); m_current_option_list->Insert(row); std::string current_font = GetOptionsDB().Get<std::string>(option_name); - assert(boost::algorithm::ends_with(current_font, FONT_SUFFIX)); + assert(boost::algorithm::ends_with(current_font, FONT_FILE_SUFFIX)); int index = -1; for (std::set<std::string>::const_iterator it = filenames.begin(); it != filenames.end(); ++it) { - GG::ListBox::Row* font_row = new CUISimpleDropDownListRow(boost::algorithm::erase_last_copy(*it, FONT_SUFFIX)); + GG::ListBox::Row* font_row = new CUISimpleDropDownListRow(boost::algorithm::erase_last_copy(*it, FONT_FILE_SUFFIX)); font_row->SetName(*it); drop_list->Insert(font_row); if (*it == current_font) @@ -740,12 +746,12 @@ BoolOption("UI.fleet-autoselect", UserString("OPTIONS_AUTOSELECT_FLEET")); BoolOption("UI.multiple-fleet-windows", UserString("OPTIONS_MULTIPLE_FLEET_WNDS")); BoolOption("UI.window-quickclose", UserString("OPTIONS_QUICK_CLOSE_WNDS")); - FileOption("stringtable-filename", UserString("OPTIONS_LANGUAGE"), GetResourceDir(), std::make_pair(UserString("OPTIONS_LANGUAGE_FILE"), "*" + STRINGTABLE_FILE_SUFFIX), &ValidStringtableFile); + FileOption("stringtable-filename", UserString("OPTIONS_LANGUAGE"), GetRootDataDir() / "default", std::make_pair(UserString("OPTIONS_LANGUAGE_FILE"), "*" + STRINGTABLE_FILE_SUFFIX), &ValidStringtableFile); IntOption("UI.tooltip-delay", UserString("OPTIONS_TOOLTIP_DELAY")); EndSection(); BeginSection(UserString("OPTIONS_FONTS")); - FontOption("UI.font", UserString("OPTIONS_FONT_TEXT")); - FontOption("UI.title-font", UserString("OPTIONS_FONT_TITLE")); + FileOption("UI.font", UserString("OPTIONS_FONT_TEXT"), GetRootDataDir() / "default", std::make_pair(UserString("OPTIONS_LANGUAGE_FILE"), "*" + FONT_FILE_SUFFIX), &ValidFontFile); + FileOption("UI.title-font", UserString("OPTIONS_FONT_TITLE"), GetRootDataDir() / "default", std::make_pair(UserString("OPTIONS_LANGUAGE_FILE"), "*" + FONT_FILE_SUFFIX), &ValidFontFile); EndSection(); BeginSection(UserString("OPTIONS_FONT_SIZES")); IntOption("UI.font-size", UserString("OPTIONS_FONT_TEXT")); @@ -755,10 +761,6 @@ DoubleOption("UI.tech-layout-horz-spacing", UserString("OPTIONS_HORIZONTAL")); DoubleOption("UI.tech-layout-vert-spacing", UserString("OPTIONS_VERTICAL")); EndSection(); - //BeginSection(UserString("OPTIONS_CHAT")); - //IntOption("UI.chat-edit-history", UserString("OPTIONS_CHAT_HISTORY")); - //IntOption("UI.chat-hide-interval", UserString("OPTIONS_CHAT_HIDE")); - //EndSection(); BeginSection(UserString("OPTIONS_DESCRIPTIONS")); BoolOption("UI.autogenerated-effects-descriptions", UserString("OPTIONS_AUTO_EFFECT_DESC")); EndSection(); @@ -860,7 +862,7 @@ // Directories tab BeginPage(UserString("OPTIONS_PAGE_DIRECTORIES")); - DirectoryOption("resource-dir", UserString("OPTIONS_FOLDER_SETTINGS"), GetRootDataDir()); // GetRootDataDir() returns the default browse path when modifying this directory option. the actual default directory (before modifying) is gotten from the specified option name + DirectoryOption("resource-dir", UserString("OPTIONS_FOLDER_SETTINGS"), GetRootDataDir()); // GetRootDataDir() returns the default browse path when modifying this directory option. the actual default directory (before modifying) is gotten from the specified option name "resource-dir" DirectoryOption("save-dir", UserString("OPTIONS_FOLDER_SAVE"), GetUserDir()); EndPage(); @@ -886,9 +888,9 @@ GetOptionsDB().GetXML().WriteDoc(ofs); } else { std::cerr << UserString("UNABLE_TO_WRITE_CONFIG_XML") << std::endl; - std::cerr << GetConfigPath().file_string() << std::endl; + std::cerr << GetConfigPath().string() << std::endl; Logger().errorStream() << UserString("UNABLE_TO_WRITE_CONFIG_XML"); - Logger().errorStream() << GetConfigPath().file_string(); + Logger().errorStream() << GetConfigPath().string(); } } Modified: trunk/FreeOrion/UI/ServerConnectWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ServerConnectWnd.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/ServerConnectWnd.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -198,9 +198,9 @@ GetOptionsDB().GetXML().WriteDoc(ofs); } else { std::cerr << UserString("UNABLE_TO_WRITE_CONFIG_XML") << std::endl; - std::cerr << GetConfigPath().file_string() << std::endl; + std::cerr << GetConfigPath().string() << std::endl; Logger().errorStream() << UserString("UNABLE_TO_WRITE_CONFIG_XML"); - Logger().errorStream() << GetConfigPath().file_string(); + Logger().errorStream() << GetConfigPath().string(); } } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -525,7 +525,7 @@ { if (!s_scanline_shader && GetOptionsDB().Get<bool>("UI.system-fog-of-war")) { s_scanline_shader = boost::shared_ptr<ShaderProgram>(ShaderProgram::shaderProgramFactory("", - ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").file_string()))); + ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").string()))); } const std::map<std::string, PlanetAtmosphereData>& atmosphere_data = GetPlanetAtmosphereData(); Modified: trunk/FreeOrion/UI/Sound.cpp =================================================================== --- trunk/FreeOrion/UI/Sound.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/UI/Sound.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -113,7 +113,7 @@ void Sound::PlayMusic(const boost::filesystem::path& path, int loops /* = 0*/) { ALenum m_openal_error; - std::string filename = path.file_string(); + std::string filename = path.string(); FILE *m_f = 0; vorbis_info *m_ogg_info; m_music_loops = 0; @@ -200,7 +200,7 @@ if (!GetOptionsDB().Get<bool>("UI.sound.enabled") || (is_ui_sound && UISoundsTemporarilyDisabled())) return; - std::string filename = path.file_string(); + std::string filename = path.string(); ALuint m_current_buffer; ALenum m_source_state; int m_i; @@ -252,7 +252,7 @@ void Sound::FreeSound(const boost::filesystem::path& path) { ALenum m_openal_error; - std::string filename = path.file_string(); + std::string filename = path.string(); std::map<std::string, ALuint>::iterator it = m_buffers.find(filename); if (it != m_buffers.end()) { Modified: trunk/FreeOrion/client/AI/AIClientApp.cpp =================================================================== --- trunk/FreeOrion/client/AI/AIClientApp.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/client/AI/AIClientApp.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -43,7 +43,7 @@ // read command line args m_player_name = argv[1]; - const std::string AICLIENT_LOG_FILENAME((GetUserDir() / (m_player_name + ".log")).file_string()); + const std::string AICLIENT_LOG_FILENAME((GetUserDir() / (m_player_name + ".log")).string()); // a platform-independent way to erase the old log std::ofstream temp(AICLIENT_LOG_FILENAME.c_str()); Modified: trunk/FreeOrion/client/human/HumanClientApp.cpp =================================================================== --- trunk/FreeOrion/client/human/HumanClientApp.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/client/human/HumanClientApp.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -177,7 +177,7 @@ #endif m_fsm = new HumanClientFSM(*this); - const std::string LOG_FILENAME((GetUserDir() / "freeorion.log").file_string()); + const std::string LOG_FILENAME((GetUserDir() / "freeorion.log").string()); // a platform-independent way to erase the old log We cannot use // boost::filesystem::ofstream here, as stupid b::f won't allow us @@ -262,9 +262,9 @@ void HumanClientApp::StartServer() { #ifdef FREEORION_WIN32 - const std::string SERVER_CLIENT_EXE = (GetBinDir() / "freeoriond.exe").file_string(); + const std::string SERVER_CLIENT_EXE = (GetBinDir() / "freeoriond.exe").string(); #else - const std::string SERVER_CLIENT_EXE = (GetBinDir() / "freeoriond").file_string(); + const std::string SERVER_CLIENT_EXE = (GetBinDir() / "freeoriond").string(); #endif std::vector<std::string> args; args.push_back("\"" + SERVER_CLIENT_EXE + "\""); @@ -770,9 +770,9 @@ GetOptionsDB().GetXML().WriteDoc(ofs); } else { std::cerr << UserString("UNABLE_TO_WRITE_CONFIG_XML") << std::endl; - std::cerr << GetConfigPath().file_string() << std::endl; + std::cerr << GetConfigPath().string() << std::endl; Logger().errorStream() << UserString("UNABLE_TO_WRITE_CONFIG_XML"); - Logger().errorStream() << GetConfigPath().file_string(); + Logger().errorStream() << GetConfigPath().string(); } } } @@ -840,10 +840,10 @@ namespace fs = boost::filesystem; fs::path save_dir(GetSaveDir()); - Logger().debugStream() << "Autosaving to: " << (save_dir / save_filename).file_string(); + Logger().debugStream() << "Autosaving to: " << (save_dir / save_filename).string(); try { - SaveGame((save_dir / save_filename).file_string()); + SaveGame((save_dir / save_filename).string()); } catch (const std::exception& e) { Logger().errorStream() << "Autosave failed: " << e.what(); std::cerr << "Autosave failed: " << e.what() << std::endl; Modified: trunk/FreeOrion/client/human/chmain.cpp =================================================================== --- trunk/FreeOrion/client/human/chmain.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/client/human/chmain.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -132,7 +132,7 @@ GetOptionsDB().GetXML().WriteDoc(ofs); } else { std::cerr << UserString("UNABLE_TO_WRITE_CONFIG_XML") << std::endl; - std::cerr << GetConfigPath().file_string() << std::endl; + std::cerr << GetConfigPath().string() << std::endl; } } catch (const std::exception&) { std::cerr << UserString("UNABLE_TO_WRITE_CONFIG_XML") << std::endl; Modified: trunk/FreeOrion/server/ServerApp.cpp =================================================================== --- trunk/FreeOrion/server/ServerApp.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/server/ServerApp.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -93,7 +93,7 @@ s_app = this; - const std::string SERVER_LOG_FILENAME((GetUserDir() / "freeoriond.log").file_string()); + const std::string SERVER_LOG_FILENAME((GetUserDir() / "freeoriond.log").string()); // a platform-independent way to erase the old log std::ofstream temp(SERVER_LOG_FILENAME.c_str()); @@ -130,9 +130,9 @@ std::string AIClientExe() { #ifdef FREEORION_WIN32 - return (GetBinDir() / "freeorionca.exe").file_string(); + return (GetBinDir() / "freeorionca.exe").string(); #else - return (GetBinDir() / "freeorionca").file_string(); + return (GetBinDir() / "freeorionca").string(); #endif } } Modified: trunk/FreeOrion/server/ServerFSM.cpp =================================================================== --- trunk/FreeOrion/server/ServerFSM.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/server/ServerFSM.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -429,7 +429,7 @@ boost::filesystem::path save_dir(GetSaveDir()); const std::string& save_filename = m_lobby_data->m_save_games[new_file_index]; try { - LoadEmpireSaveGameData((save_dir / save_filename).file_string(), + LoadEmpireSaveGameData((save_dir / save_filename).string(), m_lobby_data->m_save_game_empire_data); } catch (const std::exception&) { // inform player who attempted to change the save file that there was a problem @@ -535,7 +535,7 @@ std::string save_filename = m_lobby_data->m_save_games[m_lobby_data->m_save_file_index]; try { - LoadGame((save_dir / save_filename).file_string(), + LoadGame((save_dir / save_filename).string(), *m_server_save_game_data, m_player_save_game_data, GetUniverse(), Modified: trunk/FreeOrion/universe/Universe.cpp =================================================================== --- trunk/FreeOrion/universe/Universe.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/universe/Universe.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -44,7 +44,7 @@ { static DataTableMap map; if (map.empty()) - LoadDataTables((GetResourceDir() / "universe_tables.txt").file_string(), map); + LoadDataTables((GetResourceDir() / "universe_tables.txt").string(), map); return map; } Modified: trunk/FreeOrion/util/Directories.cpp =================================================================== --- trunk/FreeOrion/util/Directories.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/util/Directories.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -305,7 +305,13 @@ #endif const fs::path GetResourceDir() { - return fs::path(GetOptionsDB().Get<std::string>("resource-dir")); + // if resource dir option has been set, use specified location. otherwise, + // use default location + std::string options_resource_dir = GetOptionsDB().Get<std::string>("resource-dir"); + if (!options_resource_dir.empty() && fs::is_directory(fs::path(options_resource_dir)) && fs::exists(fs::path(options_resource_dir))) + return fs::path(options_resource_dir); + + return fs::path(GetOptionsDB().GetDefault<std::string>("resource-dir")); } const fs::path GetConfigPath() { @@ -314,7 +320,13 @@ } const fs::path GetSaveDir() { - return fs::path(GetOptionsDB().Get<std::string>("save-dir")); + // if save dir option has been set, use specified location. otherwise, + // use default location + std::string options_save_dir = GetOptionsDB().Get<std::string>("save-dir"); + if (!options_save_dir.empty()) + return fs::path(options_save_dir); + + return fs::path(GetOptionsDB().GetDefault<std::string>("save-dir")); } fs::path RelativePath(const fs::path& from, const fs::path& to) { Modified: trunk/FreeOrion/util/MultiplayerCommon.cpp =================================================================== --- trunk/FreeOrion/util/MultiplayerCommon.cpp 2011-06-11 21:13:05 UTC (rev 3993) +++ trunk/FreeOrion/util/MultiplayerCommon.cpp 2011-06-12 01:39:26 UTC (rev 3994) @@ -33,25 +33,37 @@ namespace { // command-line options void AddOptions(OptionsDB& db) { - db.Add<std::string>("resource-dir", "OPTIONS_DB_RESOURCE_DIR", (GetRootDataDir() / "default").directory_string()); - db.Add<std::string>('S', "save-dir", "OPTIONS_DB_SAVE_DIR", (GetUserDir() / "save").directory_string()); + db.Add<std::string>("resource-dir", "OPTIONS_DB_RESOURCE_DIR", (GetRootDataDir() / "default").string()); + db.Add<std::string>('S', "save-dir", "OPTIONS_DB_SAVE_DIR", (GetUserDir() / "save").string()); db.Add<std::string>("log-level", "OPTIONS_DB_LOG_LEVEL", "DEBUG"); - db.Add<std::string>("stringtable-filename", "OPTIONS_DB_STRINGTABLE_FILENAME", "eng_stringtable.txt"); + db.Add<std::string>("stringtable-filename", "OPTIONS_DB_STRINGTABLE_FILENAME", (GetRootDataDir() / "default" / "eng_stringtable.txt").string()); db.AddFlag("test-3d-combat", "OPTIONS_DB_TEST_3D_COMBAT", false); } bool temp_bool = RegisterOptions(&AddOptions); const double TWO_PI = 8.0 * std::atan(1.0); + std::string GetDefaultStringTableFileName() { + return (GetResourceDir() / "eng_stringtable.txt").string(); + } + + std::string GetStringTableFileName() { + std::string option_filename = GetOptionsDB().Get<std::string>("stringtable-filename"); + if (option_filename.empty()) + return GetDefaultStringTableFileName(); + else + return option_filename; + } + const StringTable_& GetStringTable() { static std::auto_ptr<StringTable_> string_table( - new StringTable_((GetResourceDir() / GetOptionsDB().Get<std::string>("stringtable-filename")).file_string())); + new StringTable_(GetStringTableFileName())); return *string_table; } const StringTable_& GetDefaultStringTable() { static std::auto_ptr<StringTable_> default_string_table( - new StringTable_((GetResourceDir() / GetOptionsDB().GetDefault<std::string>("stringtable-filename")).file_string())); + new StringTable_(GetDefaultStringTableFileName())); return *default_string_table; } @@ -489,6 +501,7 @@ fs::directory_iterator end_it; for (fs::directory_iterator it(save_dir); it != end_it; ++it) { try { +#if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION == 3 if (fs::exists(*it) && !fs::is_directory(*it) && it->filename()[0] != '.') { std::string filename = it->filename(); // disallow filenames that begin with a dot, and filenames with spaces in them @@ -497,6 +510,7 @@ m_save_games.push_back(filename); } } +#endif } catch (const fs::filesystem_error& e) { // ignore files for which permission is denied, and rethrow other exceptions if (e.code() != boost::system::posix_error::permission_denied) |