mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r16142) -Codechange: Use widgets in the custom currency window.
This commit is contained in:
parent
76ccb85660
commit
55336c4a9d
|
@ -3156,14 +3156,24 @@ STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRI
|
|||
STR_LOADGAME_REMOVED_TRAMS :{WHITE}Game was saved in version without tram support. All trams have been removed.
|
||||
|
||||
STR_CURRENCY_WINDOW :{WHITE}Custom currency
|
||||
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Exchange rate: {ORANGE}{CURRENCY} = £ {COMMA}
|
||||
STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {RAW_STRING}
|
||||
STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {RAW_STRING}
|
||||
STR_CURRENCY_SUFFIX :{LTBLUE}Suffix: {RAW_STRING}
|
||||
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Switch to Euro: {ORANGE}{NUM}
|
||||
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Exchange rate: {ORANGE}{0:CURRENCY} = £ {1:COMMA}
|
||||
STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{2:RAW_STRING}
|
||||
STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{3:RAW_STRING}
|
||||
STR_CURRENCY_SUFFIX :{LTBLUE}Suffix: {ORANGE}{4:RAW_STRING}
|
||||
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Switch to Euro: {ORANGE}{5:NUM}
|
||||
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Switch to Euro: {ORANGE}never
|
||||
STR_CURRENCY_PREVIEW :{LTBLUE}Preview: {ORANGE}{CURRENCY}
|
||||
STR_CURRENCY_PREVIEW :{LTBLUE}Preview: {ORANGE}{6:CURRENCY}
|
||||
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Change custom currency parameter
|
||||
STR_TOOLTIP_DECREASE_EXCHANGE_RATE :{BLACK}Decrease the amount of your currency for one Pound (£)
|
||||
STR_TOOLTIP_INCREASE_EXCHANGE_RATE :{BLACK}Increase the amount of your currency for one Pound (£)
|
||||
STR_TOOLTIP_SET_EXCHANGE_RATE :{BLACK}Set the exchange rate of your currency for one Pound (£)
|
||||
STR_TOOLTIP_SET_CUSTOM_CURRENCY_SEPARATOR :{BLACK}Set the separator for your currency
|
||||
STR_TOOLTIP_SET_CUSTOM_CURRENCY_PREFIX :{BLACK}Set the prefix string for your currency
|
||||
STR_TOOLTIP_SET_CUSTOM_CURRENCY_SUFFIX :{BLACK}Set the suffix string for your currency
|
||||
STR_TOOLTIP_DECREASE_CUSTOM_CURRENCY_TO_EURO :{BLACK}Switch to Euro earlier
|
||||
STR_TOOLTIP_INCREASE_CUSTOM_CURRENCY_TO_EURO :{BLACK}Switch to Euro later
|
||||
STR_TOOLTIP_SET_CUSTOM_CURRENCY_TO_EURO :{BLACK}Set the year to switch to Euro
|
||||
STR_TOOLTIP_CUSTOM_CURRENCY_PREVIEW :{BLACK}10000 Pound (£) in your currency
|
||||
|
||||
STR_TRAIN :{BLACK}{TRAIN}
|
||||
STR_BUS :{BLACK}{BUS}
|
||||
|
|
|
@ -1565,20 +1565,29 @@ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clic
|
|||
}
|
||||
}
|
||||
|
||||
/** These are not, strickly speaking, widget enums,
|
||||
* since they have been changed as line coordinates.
|
||||
* So, rather, they are more like order of appearance */
|
||||
enum CustomCurrenciesWidgets {
|
||||
CUSTCURR_EXCHANGERATE = 0,
|
||||
/** Widget numbers of the custom currency window. */
|
||||
enum CustomCurrencyWidgets {
|
||||
CUSTCURR_CLOSEBOX,
|
||||
CUSTCURR_CAPTION,
|
||||
CUSTCURR_BACKGROUND,
|
||||
|
||||
CUSTCURR_RATE_DOWN,
|
||||
CUSTCURR_RATE_UP,
|
||||
CUSTCURR_RATE,
|
||||
CUSTCURR_SEPARATOR_EDIT,
|
||||
CUSTCURR_SEPARATOR,
|
||||
CUSTCURR_PREFIX_EDIT,
|
||||
CUSTCURR_PREFIX,
|
||||
CUSTCURR_SUFFIX_EDIT,
|
||||
CUSTCURR_SUFFIX,
|
||||
CUSTCURR_TO_EURO,
|
||||
CUSTCURR_YEAR_DOWN,
|
||||
CUSTCURR_YEAR_UP,
|
||||
CUSTCURR_YEAR,
|
||||
CUSTCURR_PREVIEW,
|
||||
};
|
||||
|
||||
struct CustomCurrencyWindow : Window {
|
||||
char separator[2];
|
||||
int click;
|
||||
int query_widget;
|
||||
|
||||
CustomCurrencyWindow(const WindowDesc *desc) : Window(desc)
|
||||
|
@ -1586,119 +1595,101 @@ struct CustomCurrencyWindow : Window {
|
|||
this->separator[0] = _custom_currency.separator;
|
||||
this->separator[1] = '\0';
|
||||
this->FindWindowPlacementAndResize(desc);
|
||||
|
||||
SetButtonState();
|
||||
}
|
||||
|
||||
void SetButtonState()
|
||||
{
|
||||
this->SetWidgetDisabledState(CUSTCURR_RATE_DOWN, _custom_currency.rate == 1);
|
||||
this->SetWidgetDisabledState(CUSTCURR_RATE_UP, _custom_currency.rate == UINT16_MAX);
|
||||
this->SetWidgetDisabledState(CUSTCURR_YEAR_DOWN, _custom_currency.to_euro == CF_NOEURO);
|
||||
this->SetWidgetDisabledState(CUSTCURR_YEAR_UP, _custom_currency.to_euro == MAX_YEAR);
|
||||
}
|
||||
|
||||
virtual void OnPaint()
|
||||
{
|
||||
int const right = this->width - 1;
|
||||
int y = 20;
|
||||
this->DrawWidgets();
|
||||
|
||||
/* exchange rate */
|
||||
DrawArrowButtons(10, y, COLOUR_YELLOW, GB(this->click, 0, 2), true, true);
|
||||
SetDParam(0, 1);
|
||||
SetDParam(1, 1);
|
||||
DrawString(35, right, y + 1, STR_CURRENCY_EXCHANGE_RATE, TC_FROMSTRING);
|
||||
y += 12;
|
||||
|
||||
/* separator */
|
||||
DrawFrameRect(10, y + 1, 29, y + 9, COLOUR_DARK_BLUE, GB(this->click, 2, 2) ? FR_LOWERED : FR_NONE);
|
||||
SetDParamStr(0, this->separator);
|
||||
DrawString(35, right, y + 1, STR_CURRENCY_SEPARATOR, TC_FROMSTRING);
|
||||
y += 12;
|
||||
|
||||
/* prefix */
|
||||
DrawFrameRect(10, y + 1, 29, y + 9, COLOUR_DARK_BLUE, GB(this->click, 4, 2) ? FR_LOWERED : FR_NONE);
|
||||
SetDParamStr(0, _custom_currency.prefix);
|
||||
DrawString(35, right, y + 1, STR_CURRENCY_PREFIX, TC_FROMSTRING);
|
||||
y += 12;
|
||||
|
||||
/* suffix */
|
||||
DrawFrameRect(10, y + 1, 29, y + 9, COLOUR_DARK_BLUE, GB(this->click, 6, 2) ? FR_LOWERED : FR_NONE);
|
||||
SetDParamStr(0, _custom_currency.suffix);
|
||||
DrawString(35, right, y + 1, STR_CURRENCY_SUFFIX, TC_FROMSTRING);
|
||||
y += 12;
|
||||
|
||||
/* switch to euro */
|
||||
DrawArrowButtons(10, y, COLOUR_YELLOW, GB(this->click, 8, 2), true, true);
|
||||
SetDParam(0, _custom_currency.to_euro);
|
||||
DrawString(35, right, y + 1, (_custom_currency.to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER, TC_FROMSTRING);
|
||||
y += 12;
|
||||
|
||||
/* Preview */
|
||||
y += 12;
|
||||
SetDParam(0, 10000);
|
||||
DrawString(35, right, y + 1, STR_CURRENCY_PREVIEW, TC_FROMSTRING);
|
||||
SetDParamStr(2, this->separator);
|
||||
SetDParamStr(3, _custom_currency.prefix);
|
||||
SetDParamStr(4, _custom_currency.suffix);
|
||||
SetDParam(5, _custom_currency.to_euro);
|
||||
this->widget[CUSTCURR_YEAR].data = (_custom_currency.to_euro != CF_NOEURO) ? STR_CURRENCY_SWITCH_TO_EURO : STR_CURRENCY_SWITCH_TO_EURO_NEVER;
|
||||
SetDParam(6, 10000);
|
||||
this->DrawWidgets();
|
||||
}
|
||||
|
||||
virtual void OnClick(Point pt, int widget)
|
||||
{
|
||||
int line = (pt.y - 20) / 12;
|
||||
int line = 0;
|
||||
int len = 0;
|
||||
int x = pt.x;
|
||||
StringID str = 0;
|
||||
CharSetFilter afilter = CS_ALPHANUMERAL;
|
||||
|
||||
switch (line) {
|
||||
case CUSTCURR_EXCHANGERATE:
|
||||
if (IsInsideMM(x, 10, 30)) { // clicked buttons
|
||||
if (x < 20) {
|
||||
if (_custom_currency.rate > 1) _custom_currency.rate--;
|
||||
this->click = 1 << (line * 2 + 0);
|
||||
} else {
|
||||
if (_custom_currency.rate < UINT16_MAX) _custom_currency.rate++;
|
||||
this->click = 1 << (line * 2 + 1);
|
||||
}
|
||||
} else { // enter text
|
||||
SetDParam(0, _custom_currency.rate);
|
||||
str = STR_CONFIG_SETTING_INT32;
|
||||
len = 5;
|
||||
afilter = CS_NUMERAL;
|
||||
}
|
||||
switch (widget) {
|
||||
case CUSTCURR_RATE_DOWN:
|
||||
if (_custom_currency.rate > 1) _custom_currency.rate--;
|
||||
if (_custom_currency.rate == 1) this->DisableWidget(CUSTCURR_RATE_DOWN);
|
||||
this->EnableWidget(CUSTCURR_RATE_UP);
|
||||
break;
|
||||
|
||||
case CUSTCURR_RATE_UP:
|
||||
if (_custom_currency.rate < UINT16_MAX) _custom_currency.rate++;
|
||||
if (_custom_currency.rate == UINT16_MAX) this->DisableWidget(CUSTCURR_RATE_UP);
|
||||
this->EnableWidget(CUSTCURR_RATE_DOWN);
|
||||
break;
|
||||
|
||||
case CUSTCURR_RATE:
|
||||
SetDParam(0, _custom_currency.rate);
|
||||
str = STR_CONFIG_SETTING_INT32;
|
||||
len = 5;
|
||||
line = CUSTCURR_RATE;
|
||||
afilter = CS_NUMERAL;
|
||||
break;
|
||||
|
||||
case CUSTCURR_SEPARATOR_EDIT:
|
||||
case CUSTCURR_SEPARATOR:
|
||||
if (IsInsideMM(x, 10, 30)) { // clicked button
|
||||
this->click = 1 << (line * 2 + 1);
|
||||
}
|
||||
SetDParamStr(0, this->separator);
|
||||
str = STR_JUST_RAW_STRING;
|
||||
len = 1;
|
||||
line = CUSTCURR_SEPARATOR;
|
||||
break;
|
||||
|
||||
case CUSTCURR_PREFIX_EDIT:
|
||||
case CUSTCURR_PREFIX:
|
||||
if (IsInsideMM(x, 10, 30)) { // clicked button
|
||||
this->click = 1 << (line * 2 + 1);
|
||||
}
|
||||
SetDParamStr(0, _custom_currency.prefix);
|
||||
str = STR_JUST_RAW_STRING;
|
||||
len = 12;
|
||||
line = CUSTCURR_PREFIX;
|
||||
break;
|
||||
|
||||
case CUSTCURR_SUFFIX_EDIT:
|
||||
case CUSTCURR_SUFFIX:
|
||||
if (IsInsideMM(x, 10, 30)) { // clicked button
|
||||
this->click = 1 << (line * 2 + 1);
|
||||
}
|
||||
SetDParamStr(0, _custom_currency.suffix);
|
||||
str = STR_JUST_RAW_STRING;
|
||||
len = 12;
|
||||
line = CUSTCURR_SUFFIX;
|
||||
break;
|
||||
|
||||
case CUSTCURR_TO_EURO:
|
||||
if (IsInsideMM(x, 10, 30)) { // clicked buttons
|
||||
if (x < 20) {
|
||||
_custom_currency.to_euro = (_custom_currency.to_euro <= 2000) ? CF_NOEURO : _custom_currency.to_euro - 1;
|
||||
this->click = 1 << (line * 2 + 0);
|
||||
} else {
|
||||
_custom_currency.to_euro = Clamp(_custom_currency.to_euro + 1, 2000, MAX_YEAR);
|
||||
this->click = 1 << (line * 2 + 1);
|
||||
}
|
||||
} else { // enter text
|
||||
SetDParam(0, _custom_currency.to_euro);
|
||||
str = STR_CONFIG_SETTING_INT32;
|
||||
len = 7;
|
||||
afilter = CS_NUMERAL;
|
||||
}
|
||||
case CUSTCURR_YEAR_DOWN:
|
||||
_custom_currency.to_euro = (_custom_currency.to_euro <= 2000) ? CF_NOEURO : _custom_currency.to_euro - 1;
|
||||
if (_custom_currency.to_euro == CF_NOEURO) this->DisableWidget(CUSTCURR_YEAR_DOWN);
|
||||
this->EnableWidget(CUSTCURR_YEAR_UP);
|
||||
break;
|
||||
|
||||
case CUSTCURR_YEAR_UP:
|
||||
_custom_currency.to_euro = Clamp(_custom_currency.to_euro + 1, 2000, MAX_YEAR);
|
||||
if (_custom_currency.to_euro == MAX_YEAR) this->DisableWidget(CUSTCURR_YEAR_UP);
|
||||
this->EnableWidget(CUSTCURR_YEAR_DOWN);
|
||||
break;
|
||||
|
||||
case CUSTCURR_YEAR:
|
||||
SetDParam(0, _custom_currency.to_euro);
|
||||
str = STR_CONFIG_SETTING_INT32;
|
||||
len = 7;
|
||||
line = CUSTCURR_YEAR;
|
||||
afilter = CS_NUMERAL;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1716,7 +1707,7 @@ struct CustomCurrencyWindow : Window {
|
|||
if (str == NULL) return;
|
||||
|
||||
switch (this->query_widget) {
|
||||
case CUSTCURR_EXCHANGERATE:
|
||||
case CUSTCURR_RATE:
|
||||
_custom_currency.rate = Clamp(atoi(str), 1, UINT16_MAX);
|
||||
break;
|
||||
|
||||
|
@ -1733,7 +1724,7 @@ struct CustomCurrencyWindow : Window {
|
|||
strecpy(_custom_currency.suffix, str, lastof(_custom_currency.suffix));
|
||||
break;
|
||||
|
||||
case CUSTCURR_TO_EURO: { // Year to switch to euro
|
||||
case CUSTCURR_YEAR: { // Year to switch to euro
|
||||
int val = atoi(str);
|
||||
|
||||
_custom_currency.to_euro = (val < 2000 ? CF_NOEURO : min(val, MAX_YEAR));
|
||||
|
@ -1741,19 +1732,39 @@ struct CustomCurrencyWindow : Window {
|
|||
}
|
||||
}
|
||||
MarkWholeScreenDirty();
|
||||
SetButtonState();
|
||||
}
|
||||
|
||||
virtual void OnTimeout()
|
||||
{
|
||||
this->click = 0;
|
||||
this->SetDirty();
|
||||
}
|
||||
};
|
||||
|
||||
static const Widget _cust_currency_widgets[] = {
|
||||
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_BLACK_CROSS, STR_TOOLTIP_CLOSE_WINDOW},
|
||||
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 229, 0, 13, STR_CURRENCY_WINDOW, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS},
|
||||
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 229, 14, 119, 0x0, STR_NULL},
|
||||
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_BLACK_CROSS, STR_TOOLTIP_CLOSE_WINDOW}, // CUSTCURR_CLOSEBOX
|
||||
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 229, 0, 13, STR_CURRENCY_WINDOW, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS}, // CUSTCURR_CAPTION
|
||||
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 229, 14, 119, 0x0, STR_NULL}, // CUSTCURR_BACKGROUND
|
||||
|
||||
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_YELLOW, 10, 19, 21, 29, STR_ARROW_LEFT_SMALL, STR_TOOLTIP_DECREASE_EXCHANGE_RATE}, // CUSTCURR_RATE_DOWN
|
||||
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_YELLOW, 20, 29, 21, 29, STR_ARROW_RIGHT_SMALL, STR_TOOLTIP_INCREASE_EXCHANGE_RATE}, // CUSTCURR_RATE_UP
|
||||
{ WWT_TEXT, RESIZE_NONE, COLOUR_BLUE, 35, 227, 21, 29, STR_CURRENCY_EXCHANGE_RATE, STR_TOOLTIP_SET_EXCHANGE_RATE}, // CUSTCURR_RATE
|
||||
|
||||
{ WWT_PUSHBTN, RESIZE_NONE, COLOUR_DARK_BLUE, 10, 29, 33, 41, 0x0, STR_TOOLTIP_SET_CUSTOM_CURRENCY_SEPARATOR}, // CUSTCURR_SEPARATOR_EDIT
|
||||
{ WWT_TEXT, RESIZE_NONE, COLOUR_BLUE, 35, 227, 33, 41, STR_CURRENCY_SEPARATOR, STR_TOOLTIP_SET_CUSTOM_CURRENCY_SEPARATOR}, // CUSTCURR_SEPARATOR
|
||||
|
||||
{ WWT_PUSHBTN, RESIZE_NONE, COLOUR_DARK_BLUE, 10, 29, 45, 53, 0x0, STR_TOOLTIP_SET_CUSTOM_CURRENCY_PREFIX}, // CUSTCURR_PREFIX_EDIT
|
||||
{ WWT_TEXT, RESIZE_NONE, COLOUR_BLUE, 35, 227, 45, 53, STR_CURRENCY_PREFIX, STR_TOOLTIP_SET_CUSTOM_CURRENCY_PREFIX}, // CUSTCURR_PREFIX
|
||||
|
||||
{ WWT_PUSHBTN, RESIZE_NONE, COLOUR_DARK_BLUE, 10, 29, 57, 65, 0x0, STR_TOOLTIP_SET_CUSTOM_CURRENCY_SUFFIX}, // CUSTCURR_SUFFIX_EDIT
|
||||
{ WWT_TEXT, RESIZE_NONE, COLOUR_BLUE, 35, 227, 57, 65, STR_CURRENCY_SUFFIX, STR_TOOLTIP_SET_CUSTOM_CURRENCY_SUFFIX}, // CUSTCURR_SUFFIX
|
||||
|
||||
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_YELLOW, 10, 19, 69, 77, STR_ARROW_LEFT_SMALL, STR_TOOLTIP_DECREASE_CUSTOM_CURRENCY_TO_EURO}, // CUSTCURR_YEAR_DOWN
|
||||
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_YELLOW, 20, 29, 69, 77, STR_ARROW_RIGHT_SMALL, STR_TOOLTIP_INCREASE_CUSTOM_CURRENCY_TO_EURO}, // CUSTCURR_YEAR_UP
|
||||
{ WWT_TEXT, RESIZE_NONE, COLOUR_BLUE, 35, 227, 69, 77, STR_CURRENCY_SWITCH_TO_EURO, STR_TOOLTIP_SET_CUSTOM_CURRENCY_TO_EURO}, // CUSTCURR_YEAR
|
||||
|
||||
{ WWT_LABEL, RESIZE_NONE, COLOUR_BLUE, 2, 227, 93, 101, STR_CURRENCY_PREVIEW, STR_TOOLTIP_CUSTOM_CURRENCY_PREVIEW}, // CUSTCURR_PREVIEW
|
||||
|
||||
{ WIDGETS_END},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue