diff --git a/src/app/app.cpp b/src/app/app.cpp index 43135502..5cc047a5 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -1813,9 +1813,13 @@ void CApplication::SetLanguage(Language language) char* defaultLocale = setlocale(LC_ALL, ""); // Load system locale GetLogger()->Debug("Default system locale: %s\n", defaultLocale); + if (!locale.empty()) // Override system locale? + { + setlocale(LC_ALL, locale.c_str()); + } setlocale(LC_NUMERIC, "C"); // Force numeric locale to "C" (fixes decimal point problems) - char* systemLocale = setlocale(LC_ALL, nullptr); // Get current locale configuration - GetLogger()->Debug("Setting locale: %s\n", systemLocale); + std::string systemLocale = setlocale(LC_ALL, nullptr); // Get current locale configuration + GetLogger()->Debug("Setting locale: %s\n", systemLocale.c_str()); // Update C++ locale try { diff --git a/src/common/misc.cpp b/src/common/misc.cpp index e96f58ed..578b4a61 100644 --- a/src/common/misc.cpp +++ b/src/common/misc.cpp @@ -186,55 +186,6 @@ char GetToLower(char letter) return tolower(letter); } - -// Converting time to string. - -void TimeToAscii(time_t time, char *buffer) -{ - struct tm when; - int year; - - when = *localtime(&time); - year = when.tm_year+1900; - if ( year < 2000 ) year -= 1900; - else year -= 2000; - char format[10]; - int hour; - - hour = when.tm_hour; // 0..23 - if ( hour < 12 ) // morning? - { - strcpy(format, "am"); - } - else // afternoon? - { - strcpy(format, "pm"); - hour -= 12; // 0..11 - } - if ( hour == 0 ) hour = 12; - - sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d %s", - when.tm_mon+1, when.tm_mday, year, - hour, when.tm_min, format); -} - -// Converting time to string. - -void TimeToAsciiClean(time_t time, char *buffer) -{ - struct tm when; - int year; - - when = *localtime(&time); - year = when.tm_year+1900; - if ( year < 2000 ) year -= 1900; - else year -= 2000; - - sprintf(buffer, "%.2d%.2d%.2d%.2d%.2d", - year, when.tm_mon+1, when.tm_mday, - when.tm_hour, when.tm_min); -} - std::string TimeFormat(float time) { int minutes = floor(time/60); @@ -254,8 +205,3 @@ void AddExt(char* filename, const char* ext) if ( strchr(filename, '.') != nullptr ) return; // already an extension? strcat(filename, ext); } - -int GetCurrentTimestamp() -{ - return std::chrono::seconds(std::time(nullptr)).count(); -} diff --git a/src/common/misc.h b/src/common/misc.h index d2927815..4177f3da 100644 --- a/src/common/misc.h +++ b/src/common/misc.h @@ -31,10 +31,6 @@ extern char GetNoAccent(char letter); extern char GetToUpper(char letter); extern char GetToLower(char letter); -extern void TimeToAscii(time_t time, char *buffer); -extern void TimeToAsciiClean(time_t time, char *buffer); extern std::string TimeFormat(float time); extern void AddExt(char* filename, const char* ext); - -extern int GetCurrentTimestamp(); diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index 317d388b..82e6e494 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -50,6 +50,10 @@ CLevelParserParam::CLevelParserParam(int value) : m_value(boost::lexical_cast(value)) {} +CLevelParserParam::CLevelParserParam(long value) + : m_value(boost::lexical_cast(value)) +{} + CLevelParserParam::CLevelParserParam(float value) : m_value(boost::lexical_cast(value)) {} diff --git a/src/level/parser/parserparam.h b/src/level/parser/parserparam.h index f620d845..55a2f444 100644 --- a/src/level/parser/parserparam.h +++ b/src/level/parser/parserparam.h @@ -54,6 +54,7 @@ public: //! Create param with given value //@{ CLevelParserParam(int value); + CLevelParserParam(long value); CLevelParserParam(float value); CLevelParserParam(std::string value); CLevelParserParam(bool value); diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index b59cc1f3..e2afb5b7 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -4646,7 +4646,7 @@ bool CRobotMain::IOWriteScene(std::string filename, std::string filecbot, std::s line = MakeUnique("Created"); - line->AddParam("date", MakeUnique(GetCurrentTimestamp())); + line->AddParam("date", MakeUnique(time(nullptr))); levelParser.AddLine(std::move(line)); line = MakeUnique("Mission"); @@ -5700,7 +5700,8 @@ void CRobotMain::Autosave() std::string dir = m_playerProfile->GetSaveFile("autosave" + boost::lexical_cast(id)); char timestr[100]; - TimeToAscii(time(nullptr), timestr); + time_t now = time(nullptr); + strftime(timestr, 99, "%x %X", localtime(&now)); std::string info = std::string("[AUTOSAVE] ")+timestr; m_playerProfile->SaveScene(dir, info); diff --git a/src/ui/screen/screen_io.cpp b/src/ui/screen/screen_io.cpp index 749a6540..19fc79d1 100644 --- a/src/ui/screen/screen_io.cpp +++ b/src/ui/screen/screen_io.cpp @@ -81,7 +81,7 @@ void CScreenIO::IOReadName() } time(&now); - TimeToAsciiClean(now, line); + strftime(line, 99, "%y%m%d%H%M", localtime(&now)); sprintf(name, "%s - %s %d", line, resume.c_str(), m_main->GetLevelRank()); pe->SetText(name); diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp index 1b7da4ec..ff34ea4b 100644 --- a/src/ui/studio.cpp +++ b/src/ui/studio.cpp @@ -1282,9 +1282,9 @@ void CStudio::AdjustDialog() { pli->SetPos(ppos); pli->SetDim(ddim); - pli->SetTabs(0, ddim.x-(50.0f+130.0f+16.0f)/640.0f); + pli->SetTabs(0, ddim.x-(50.0f+140.0f+16.0f)/640.0f); pli->SetTabs(1, 50.0f/640.0f, Gfx::TEXT_ALIGN_RIGHT); - pli->SetTabs(2, 130.0f/640.0f); + pli->SetTabs(2, 140.0f/640.0f); //? pli->ShowSelect(); } @@ -1575,7 +1575,7 @@ void CStudio::UpdateDialogList() CWindow* pw; CList* pl; int i = 0; - char time[100]; + char timestr[100]; pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW9)); if ( pw == nullptr ) return; @@ -1590,8 +1590,9 @@ void CStudio::UpdateDialogList() for (auto& prog : programs) { std::ostringstream temp; - TimeToAscii(CResourceManager::GetLastModificationTime(SearchDirectory(false) + prog), time); - temp << prog << '\t' << CResourceManager::GetFileSize(SearchDirectory(false) + prog) << " \t" << time; + time_t now = CResourceManager::GetLastModificationTime(SearchDirectory(false) + prog); + strftime(timestr, 99, "%x %X", localtime(&now)); + temp << prog << '\t' << CResourceManager::GetFileSize(SearchDirectory(false) + prog) << " \t" << timestr; pl->SetItemName(i++, temp.str().c_str()); } }