Rework time computations in tracker status window to use localized functions.

Result is not as good as the previous implementation, because we need the more advanced BDateFormat API, which is not available yet.

Fixes #6930.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42977 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adrien Destugues
2011-10-29 20:48:41 +00:00
parent c647837666
commit 4eef91b9c8
2 changed files with 19 additions and 35 deletions
+17 -33
View File
@@ -42,6 +42,7 @@ All rights reserved.
#include <Catalog.h> #include <Catalog.h>
#include <ControlLook.h> #include <ControlLook.h>
#include <Debug.h> #include <Debug.h>
#include <DurationFormat.h>
#include <Locale.h> #include <Locale.h>
#include <MessageFilter.h> #include <MessageFilter.h>
#include <StringView.h> #include <StringView.h>
@@ -775,24 +776,17 @@ BStatusView::_TimeStatusString(float availableSpace, float* _width)
time_t now = (time_t)real_time_clock(); time_t now = (time_t)real_time_clock();
time_t finishTime = (time_t)(now + secondsRemaining); time_t finishTime = (time_t)(now + secondsRemaining);
tm _time;
tm* time = localtime_r(&finishTime, &_time);
int32 year = time->tm_year + 1900;
char timeText[32]; char timeText[32];
// TODO: Localization of time string... const BLocale* locale = BLocale::Default();
if (now < finishTime - kSecondsPerDay) { if (finishTime - now > kSecondsPerDay) {
// process is going to take more than a day! locale->FormatDateTime(timeText, sizeof(timeText), finishTime,
snprintf(timeText, sizeof(timeText), "%0*d:%0*d %0*d/%0*d/%ld", B_MEDIUM_DATE_FORMAT, B_MEDIUM_TIME_FORMAT);
2, time->tm_hour, 2, time->tm_min,
2, time->tm_mon + 1, 2, time->tm_mday, year);
} else { } else {
snprintf(timeText, sizeof(timeText), "%0*d:%0*d", locale->FormatTime(timeText, sizeof(timeText), finishTime,
2, time->tm_hour, 2, time->tm_min); B_MEDIUM_TIME_FORMAT);
} }
finishTime -= now; BString string(_FullTimeRemainingString(now, finishTime, timeText));
BString string(_FullTimeRemainingString(finishTime, timeText));
*_width = StringWidth(string.String()); *_width = StringWidth(string.String());
if (*_width > availableSpace) { if (*_width > availableSpace) {
string.SetTo(_ShortTimeRemainingString(timeText)); string.SetTo(_ShortTimeRemainingString(timeText));
@@ -817,28 +811,18 @@ BStatusView::_ShortTimeRemainingString(const char* timeText)
BString BString
BStatusView::_FullTimeRemainingString(time_t finishTime, const char* timeText) BStatusView::_FullTimeRemainingString(time_t now, time_t finishTime,
const char* timeText)
{ {
BDurationFormat formatter;
BString buffer; BString buffer;
char finishStr[32]; BString finishStr;
if (finishTime > kSecondsPerDay) { if (finishTime - now > 60 * 60) {
buffer.SetTo(B_TRANSLATE("(Finish: %time - Over %finishtime " buffer.SetTo(B_TRANSLATE("(Finish: %time - Over %finishtime left)"));
"days left)")); formatter.Format(now * 1000000LL, finishTime * 1000000LL, &finishStr);
snprintf(finishStr, sizeof(finishStr), "%ld",
finishTime / kSecondsPerDay);
} else if (finishTime > 60 * 60) {
buffer.SetTo(B_TRANSLATE("(Finish: %time - Over %finishtime "
"hours left)"));
snprintf(finishStr, sizeof(finishStr), "%ld",
finishTime / (60 * 60));
} else if (finishTime > 60) {
buffer.SetTo(B_TRANSLATE("(Finish: %time - %finishtime minutes "
"left)"));
snprintf(finishStr, sizeof(finishStr), "%ld", finishTime / 60);
} else { } else {
buffer.SetTo(B_TRANSLATE("(Finish: %time - %finishtime seconds " buffer.SetTo(B_TRANSLATE("(Finish: %time - %finishtime left)"));
"left)")); formatter.Format(now * 1000000LL, finishTime * 1000000LL, &finishStr);
snprintf(finishStr, sizeof(finishStr), "%ld", finishTime);
} }
buffer.ReplaceFirst("%time", timeText); buffer.ReplaceFirst("%time", timeText);
+2 -2
View File
@@ -141,8 +141,8 @@ private:
BString _TimeStatusString(float availableSpace, BString _TimeStatusString(float availableSpace,
float* _width); float* _width);
BString _ShortTimeRemainingString(const char* timeText); BString _ShortTimeRemainingString(const char* timeText);
BString _FullTimeRemainingString(time_t finishTime, BString _FullTimeRemainingString(time_t now,
const char* timeText); time_t finishTime, const char* timeText);
BStatusBar* fStatusBar; BStatusBar* fStatusBar;
off_t fTotalSize; off_t fTotalSize;