Merge remote-tracking branch 'upstream/master'
This commit is contained in:
+20
-30
@@ -39,12 +39,10 @@
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left, int right, int top, int bottom)
|
||||
static bool DrawScrollingStatusText(const NewsItem &ni, int scroll_pos, int left, int right, int top, int bottom)
|
||||
{
|
||||
CopyInDParam(ni->params);
|
||||
|
||||
/* Replace newlines and the likes with spaces. */
|
||||
std::string message = StrMakeValid(GetString(ni->string_id), SVS_REPLACE_TAB_CR_NL_WITH_SPACE);
|
||||
std::string message = StrMakeValid(ni.GetStatusText(), StringValidationSetting::ReplaceTabCrNlWithSpace);
|
||||
|
||||
DrawPixelInfo tmp_dpi;
|
||||
if (!FillDrawPixelInfo(&tmp_dpi, left, top, right - left, bottom)) return true;
|
||||
@@ -59,8 +57,8 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left
|
||||
}
|
||||
|
||||
struct StatusBarWindow : Window {
|
||||
bool saving;
|
||||
int ticker_scroll;
|
||||
bool saving = false;
|
||||
int ticker_scroll = TICKER_STOP;
|
||||
|
||||
static const int TICKER_STOP = 1640; ///< scrolling is finished when counter reaches this value
|
||||
static const int COUNTER_STEP = 2; ///< this is subtracted from active counters every tick
|
||||
@@ -68,10 +66,8 @@ struct StatusBarWindow : Window {
|
||||
|
||||
StatusBarWindow(WindowDesc &desc) : Window(desc)
|
||||
{
|
||||
this->ticker_scroll = TICKER_STOP;
|
||||
|
||||
this->InitNested();
|
||||
CLRBITS(this->flags, WF_WHITE_BORDER);
|
||||
this->flags.Reset(WindowFlag::WhiteBorder);
|
||||
PositionStatusbar(this);
|
||||
}
|
||||
|
||||
@@ -91,15 +87,13 @@ struct StatusBarWindow : Window {
|
||||
Dimension d;
|
||||
switch (widget) {
|
||||
case WID_S_LEFT:
|
||||
SetDParamMaxValue(0, TimerGameCalendar::DateAtStartOfYear(CalendarTime::MAX_YEAR));
|
||||
d = GetStringBoundingBox(STR_JUST_DATE_LONG);
|
||||
d = GetStringBoundingBox(GetString(STR_JUST_DATE_LONG, GetParamMaxValue(TimerGameCalendar::DateAtStartOfYear(CalendarTime::MAX_YEAR).base())));
|
||||
break;
|
||||
|
||||
case WID_S_RIGHT: {
|
||||
int64_t max_money = UINT32_MAX;
|
||||
for (const Company *c : Company::Iterate()) max_money = std::max<int64_t>(c->money, max_money);
|
||||
SetDParam(0, 100LL * max_money);
|
||||
d = GetStringBoundingBox(STR_JUST_CURRENCY_LONG);
|
||||
d = GetStringBoundingBox(GetString(STR_JUST_CURRENCY_LONG, 100LL * max_money));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -130,8 +124,7 @@ struct StatusBarWindow : Window {
|
||||
switch (widget) {
|
||||
case WID_S_LEFT:
|
||||
/* Draw the date */
|
||||
SetDParam(0, TimerGameCalendar::date);
|
||||
DrawString(tr, STR_JUST_DATE_LONG, TC_WHITE, SA_HOR_CENTER);
|
||||
DrawString(tr, GetString(STR_JUST_DATE_LONG, TimerGameCalendar::date), TC_WHITE, SA_HOR_CENTER);
|
||||
break;
|
||||
|
||||
case WID_S_RIGHT: {
|
||||
@@ -143,8 +136,7 @@ struct StatusBarWindow : Window {
|
||||
/* Draw company money, if any */
|
||||
const Company *c = Company::GetIfValid(_local_company);
|
||||
if (c != nullptr) {
|
||||
SetDParam(0, c->money);
|
||||
DrawString(tr, STR_JUST_CURRENCY_LONG, TC_WHITE, SA_HOR_CENTER);
|
||||
DrawString(tr, GetString(STR_JUST_CURRENCY_LONG, c->money), TC_WHITE, SA_HOR_CENTER);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -156,24 +148,22 @@ struct StatusBarWindow : Window {
|
||||
DrawString(tr, STR_STATUSBAR_SAVING_GAME, TC_FROMSTRING, SA_HOR_CENTER | SA_VERT_CENTER);
|
||||
} else if (_do_autosave) {
|
||||
DrawString(tr, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
} else if (_pause_mode != PM_UNPAUSED) {
|
||||
StringID msg = (_pause_mode & PM_PAUSED_LINK_GRAPH) ? STR_STATUSBAR_PAUSED_LINK_GRAPH : STR_STATUSBAR_PAUSED;
|
||||
} else if (_pause_mode.Any()) {
|
||||
StringID msg = _pause_mode.Test(PauseMode::LinkGraph) ? STR_STATUSBAR_PAUSED_LINK_GRAPH : STR_STATUSBAR_PAUSED;
|
||||
DrawString(tr, msg, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
} else if (this->ticker_scroll < TICKER_STOP && GetStatusbarNews() != nullptr && GetStatusbarNews()->string_id != 0) {
|
||||
} else if (this->ticker_scroll < TICKER_STOP && GetStatusbarNews() != nullptr && !GetStatusbarNews()->headline.empty()) {
|
||||
/* Draw the scrolling news text */
|
||||
if (!DrawScrollingStatusText(GetStatusbarNews(), ScaleGUITrad(this->ticker_scroll), tr.left, tr.right, tr.top, tr.bottom)) {
|
||||
if (!DrawScrollingStatusText(*GetStatusbarNews(), ScaleGUITrad(this->ticker_scroll), tr.left, tr.right, tr.top, tr.bottom)) {
|
||||
InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED);
|
||||
if (Company::IsValidID(_local_company)) {
|
||||
/* This is the default text */
|
||||
SetDParam(0, _local_company);
|
||||
DrawString(tr, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
DrawString(tr, GetString(STR_STATUSBAR_COMPANY_NAME, _local_company), TC_FROMSTRING, SA_HOR_CENTER);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (Company::IsValidID(_local_company)) {
|
||||
/* This is the default text */
|
||||
SetDParam(0, _local_company);
|
||||
DrawString(tr, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
DrawString(tr, GetString(STR_STATUSBAR_COMPANY_NAME, _local_company), TC_FROMSTRING, SA_HOR_CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,7 +217,7 @@ struct StatusBarWindow : Window {
|
||||
|
||||
/** Move information on the ticker slowly from one side to the other. */
|
||||
IntervalTimer<TimerWindow> ticker_scroll_interval = {std::chrono::milliseconds(15), [this](uint count) {
|
||||
if (_pause_mode != PM_UNPAUSED) return;
|
||||
if (_pause_mode.Any()) return;
|
||||
|
||||
if (this->ticker_scroll < TICKER_STOP) {
|
||||
this->ticker_scroll += count;
|
||||
@@ -250,17 +240,17 @@ struct StatusBarWindow : Window {
|
||||
|
||||
static constexpr NWidgetPart _nested_main_status_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_S_LEFT), SetMinimalSize(100, 12), EndContainer(),
|
||||
NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_MIDDLE), SetMinimalSize(40, 12), SetDataTip(0x0, STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS), SetResize(1, 0),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_S_LEFT), SetMinimalSize(140, 12), EndContainer(),
|
||||
NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_MIDDLE), SetMinimalSize(40, 12), SetToolTip(STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS), SetResize(1, 0),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, CM_WID_S_APM), SetMinimalSize(100, 12), EndContainer(),
|
||||
NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_RIGHT), SetMinimalSize(100, 12),
|
||||
NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_RIGHT), SetMinimalSize(140, 12),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
static WindowDesc _main_status_desc(
|
||||
WDP_MANUAL, nullptr, 0, 0,
|
||||
WC_STATUS_BAR, WC_NONE,
|
||||
WDF_NO_FOCUS | WDF_NO_CLOSE,
|
||||
{WindowDefaultFlag::NoFocus, WindowDefaultFlag::NoClose},
|
||||
_nested_main_status_widgets
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user