void UserTable::GetDirectoryTree(const std::string& sPath, TPathList& rResults) { struct dirent* ent; DIR* dir; dir = opendir(sPath.c_str()); if (!dir) { syslog(LOG_WARNING, "could not open directory %s: %s", sPath.c_str(), strerror(errno)); return; } rResults.push_back(sPath); ent = readdir(dir); while (ent) { std::string sFullPath = sPath + "/" + ent->d_name; std::string sEntry(ent->d_name); if ("." != sEntry && ".." != sEntry && IsDirectory(sFullPath)) { GetDirectoryTree(sFullPath, rResults); } ent = readdir(dir); } closedir(dir); }
//InitMenuSettings bool Menu::InitMenuSettings () { Err fErr (m_Err, L"InitMenuSettings"); wstring sMenuSettings, sFullscreen, sVerticalSync, sFramelimit, sOk, sLanguage, sResolution, sColorDepth, sMouseSensitivity, sAntialiasing, sAccept, sHelp; bool bFullscreen, bVerticalSync, bHelp; int nFramelimit, nMouseSensitivity, nAntialiasing; if (!m_pLanguage->Get (L"SettingsTitle", &sMenuSettings) || !m_pLanguage->Get (L"SettingsResolution", &sResolution) || !m_pLanguage->Get (L"SettingsColorDepth", &sColorDepth) || !m_pLanguage->Get (L"SettingsFullscreen", &sFullscreen) || !m_pLanguage->Get (L"SettingsAntialiasing", &sAntialiasing) || !m_pLanguage->Get (L"SettingsVerticalSync", &sVerticalSync) || !m_pLanguage->Get (L"SettingsFrameLimit", &sFramelimit) || !m_pLanguage->Get (L"SettingsLanguage", &sLanguage) || !m_pLanguage->Get (L"SettingsHelp", &sHelp) || !m_pLanguage->Get (L"SettingsMouseSensitivity", &sMouseSensitivity) || !m_pLanguage->Get (L"SettingsOk", &sOk) || !m_pLanguage->Get (L"SettingsAccept", &sAccept) || !m_pConfig->GetBool (sCONF_FULLSCREEN, &bFullscreen) || !m_pConfig->GetBool (s_sVerticalSync, &bVerticalSync) || !m_pConfig->GetBool (sCONF_HELP, &bHelp) || !m_pConfig->GetNum (s_sFramelimit, &nFramelimit) || !m_pConfig->GetNum (s_sMouseSensitivity, &nMouseSensitivity) || !m_pConfig->GetNum (s_sAntialiasing, &nAntialiasing)) { return false; } std::vector<wstring> lsLanguages; if (!ListFiles (m_sLanguageDir, &lsLanguages)) { return fErr.Set (L"Could not list the language files"); } unsigned int nLanguageId = 0; for (; nLanguageId != lsLanguages.size (); nLanguageId++) { if (lsLanguages.at (nLanguageId) == m_pLanguage->GetFileName ()) { break; } } std::vector<wstring> lsResolutions, lsDepths; unsigned int nOldColorDepth = 0, nCurResId = 0, nCurDepthId = 0, nCurDepth = 0; bool bNextDepth = false; wstring sCurResolution; if (!m_pConfig->Get (s_sResolution, &sCurResolution) || !m_pConfig->GetNum (s_sColorDepth, &nCurDepth)) { return false; } for (unsigned int i = 0; i != sf::VideoMode::GetModesCount (); i++) { sf::VideoMode Mode = sf::VideoMode::GetMode (i); if (Mode.BitsPerPixel != nOldColorDepth) { if (nOldColorDepth != 0) { bNextDepth = true; } nOldColorDepth = Mode.BitsPerPixel; if (nCurDepth == nOldColorDepth) { nCurDepthId = lsDepths.size (); } lsDepths.push_back (NumToStr (nOldColorDepth)); } //Because all resolutions are mutliply saved for every color depth if (bNextDepth) { continue; } wstring sEntry (NumToStr (Mode.Width) + s_sResDelim + NumToStr (Mode.Height)); if (sEntry == sCurResolution) { nCurResId = lsResolutions.size (); } lsResolutions.push_back (sEntry); } if (!m_ScreenSettings.Init (&m_Err, m_pProfiles, m_pWindow, sMenuSettings) || !m_ScreenSettings.AddList (sResolution, Vector2f (50, 150), lsResolutions, nCurResId, eSettingsListResolution) || !m_ScreenSettings.AddList (sColorDepth, Vector2f (500, 150), lsDepths, nCurDepthId, eSettingsListColorDepth) || !m_ScreenSettings.AddCheckbox (sFullscreen, Vector2f (50, 250), eSettingsCheckFullscreen, bFullscreen) || !m_ScreenSettings.AddEditbox (sAntialiasing, Vector2f (500, 250), 50, eSettingsEditAntialiasing, NumToStr (nAntialiasing)) || !m_ScreenSettings.AddCheckbox (sVerticalSync, Vector2f (50, 350), eSettingsCheckVerticalSync, bVerticalSync) || !m_ScreenSettings.AddEditbox (sFramelimit, Vector2f (600, 350), 100, eSettingsEditFramelimit, NumToStr (nFramelimit)) || !m_ScreenSettings.AddList (sLanguage, Vector2f (50, 450), lsLanguages, nLanguageId, eSettingsListLanguage) || !m_ScreenSettings.AddCheckbox (sHelp, Vector2f (400, 450), eSettingsCheckHelp, bHelp) || !m_ScreenSettings.AddEditbox (sMouseSensitivity, Vector2f (50, 550), 150, eSettingsEditMouseSensitivity, NumToStr (nMouseSensitivity)) || !m_ScreenSettings.AddButton (sOk, Vector2f (300, 650), eSettingsButtonOk) || !m_ScreenSettings.AddButton (m_sAbort, Vector2f (525, 650), eSettingsButtonAbort) || !m_ScreenSettings.AddButton (sAccept, Vector2f (750, 650), eSettingsButtonAccept)) { return false; } return true; }//InitMenuSettings