mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r13152) -Codechange: make a class of the subsidy window.
This commit is contained in:
parent
f5681547ef
commit
62e36abd2e
|
@ -19,161 +19,149 @@
|
|||
|
||||
#include "table/strings.h"
|
||||
|
||||
static void HandleSubsidyClick(int y)
|
||||
{
|
||||
const Subsidy *s;
|
||||
uint num;
|
||||
int offs;
|
||||
TileIndex xy;
|
||||
|
||||
if (y < 0) return;
|
||||
|
||||
num = 0;
|
||||
for (s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age < 12) {
|
||||
y -= 10;
|
||||
if (y < 0) goto handle_click;
|
||||
num++;
|
||||
}
|
||||
struct SubsidyListWindow : Window {
|
||||
SubsidyListWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
|
||||
{
|
||||
}
|
||||
|
||||
if (num == 0) {
|
||||
y -= 10;
|
||||
virtual void OnClick(Point pt, int widget)
|
||||
{
|
||||
if (widget != 3) return;
|
||||
|
||||
int y = pt.y - 25;
|
||||
|
||||
if (y < 0) return;
|
||||
}
|
||||
|
||||
y -= 11;
|
||||
if (y < 0) return;
|
||||
uint num = 0;
|
||||
for (const Subsidy *s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age < 12) {
|
||||
y -= 10;
|
||||
if (y < 0) this->HandleClick(s);
|
||||
num++;
|
||||
}
|
||||
}
|
||||
|
||||
for (s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age >= 12) {
|
||||
if (num == 0) {
|
||||
y -= 10;
|
||||
if (y < 0) goto handle_click;
|
||||
if (y < 0) return;
|
||||
}
|
||||
|
||||
y -= 11;
|
||||
if (y < 0) return;
|
||||
|
||||
for (const Subsidy *s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age >= 12) {
|
||||
y -= 10;
|
||||
if (y < 0) this->HandleClick(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
handle_click:
|
||||
void HandleClick(const Subsidy *s)
|
||||
{
|
||||
TownEffect te = GetCargo(s->cargo_type)->town_effect;
|
||||
TileIndex xy;
|
||||
|
||||
TownEffect te = GetCargo(s->cargo_type)->town_effect;
|
||||
|
||||
/* determine from coordinate for subsidy and try to scroll to it */
|
||||
offs = s->from;
|
||||
if (s->age >= 12) {
|
||||
xy = GetStation(offs)->xy;
|
||||
} else if (te == TE_PASSENGERS || te == TE_MAIL) {
|
||||
xy = GetTown(offs)->xy;
|
||||
} else {
|
||||
xy = GetIndustry(offs)->xy;
|
||||
}
|
||||
|
||||
if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) {
|
||||
if (_ctrl_pressed) ShowExtraViewPortWindow(xy);
|
||||
|
||||
/* otherwise determine to coordinate for subsidy and scroll to it */
|
||||
offs = s->to;
|
||||
/* determine from coordinate for subsidy and try to scroll to it */
|
||||
uint offs = s->from;
|
||||
if (s->age >= 12) {
|
||||
xy = GetStation(offs)->xy;
|
||||
} else if (te == TE_PASSENGERS || te == TE_MAIL || te == TE_GOODS || te == TE_FOOD) {
|
||||
} else if (te == TE_PASSENGERS || te == TE_MAIL) {
|
||||
xy = GetTown(offs)->xy;
|
||||
} else {
|
||||
xy = GetIndustry(offs)->xy;
|
||||
}
|
||||
|
||||
if (_ctrl_pressed) {
|
||||
ShowExtraViewPortWindow(xy);
|
||||
} else {
|
||||
ScrollMainWindowToTile(xy);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_ctrl_pressed || !ScrollMainWindowToTile(xy)) {
|
||||
if (_ctrl_pressed) ShowExtraViewPortWindow(xy);
|
||||
|
||||
static void DrawSubsidiesWindow(const Window *w)
|
||||
{
|
||||
YearMonthDay ymd;
|
||||
const Subsidy *s;
|
||||
uint num;
|
||||
int x;
|
||||
int y;
|
||||
/* otherwise determine to coordinate for subsidy and scroll to it */
|
||||
offs = s->to;
|
||||
if (s->age >= 12) {
|
||||
xy = GetStation(offs)->xy;
|
||||
} else if (te == TE_PASSENGERS || te == TE_MAIL || te == TE_GOODS || te == TE_FOOD) {
|
||||
xy = GetTown(offs)->xy;
|
||||
} else {
|
||||
xy = GetIndustry(offs)->xy;
|
||||
}
|
||||
|
||||
w->DrawWidgets();
|
||||
|
||||
ConvertDateToYMD(_date, &ymd);
|
||||
|
||||
int width = w->width - 13; // scroll bar = 11 + pixel each side
|
||||
y = 15;
|
||||
x = 1;
|
||||
|
||||
/* Section for drawing the offered subisidies */
|
||||
DrawStringTruncated(x, y, STR_2026_SUBSIDIES_ON_OFFER_FOR, TC_FROMSTRING, width);
|
||||
y += 10;
|
||||
num = 0;
|
||||
|
||||
for (s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age < 12) {
|
||||
int x2;
|
||||
|
||||
/* Displays the two offered towns */
|
||||
SetupSubsidyDecodeParam(s, 1);
|
||||
x2 = DrawStringTruncated(x + 2, y, STR_2027_FROM_TO, TC_FROMSTRING, width);
|
||||
|
||||
/* Displays the deadline before voiding the proposal */
|
||||
SetDParam(0, _date - ymd.day + 384 - s->age * 32);
|
||||
DrawStringTruncated(x2, y, STR_2028_BY, TC_FROMSTRING, width - x2);
|
||||
y += 10;
|
||||
num++;
|
||||
if (_ctrl_pressed) {
|
||||
ShowExtraViewPortWindow(xy);
|
||||
} else {
|
||||
ScrollMainWindowToTile(xy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (num == 0) {
|
||||
DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
|
||||
virtual void OnPaint()
|
||||
{
|
||||
YearMonthDay ymd;
|
||||
const Subsidy *s;
|
||||
|
||||
this->DrawWidgets();
|
||||
|
||||
ConvertDateToYMD(_date, &ymd);
|
||||
|
||||
int width = this->width - 13; // scroll bar = 11 + pixel each side
|
||||
int y = 15;
|
||||
int x = 1;
|
||||
|
||||
/* Section for drawing the offered subisidies */
|
||||
DrawStringTruncated(x, y, STR_2026_SUBSIDIES_ON_OFFER_FOR, TC_FROMSTRING, width);
|
||||
y += 10;
|
||||
}
|
||||
uint num = 0;
|
||||
|
||||
/* Section for drawing the already granted subisidies */
|
||||
DrawStringTruncated(x, y + 1, STR_202B_SERVICES_ALREADY_SUBSIDISED, TC_FROMSTRING, width);
|
||||
y += 10;
|
||||
num = 0;
|
||||
for (s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age < 12) {
|
||||
int x2;
|
||||
|
||||
for (s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age >= 12) {
|
||||
int xt;
|
||||
/* Displays the two offered towns */
|
||||
SetupSubsidyDecodeParam(s, 1);
|
||||
x2 = DrawStringTruncated(x + 2, y, STR_2027_FROM_TO, TC_FROMSTRING, width);
|
||||
|
||||
SetupSubsidyDecodeParam(s, 1);
|
||||
|
||||
PlayerID player = GetStation(s->to)->owner;
|
||||
SetDParam(3, player);
|
||||
|
||||
/* Displays the two connected stations */
|
||||
xt = DrawStringTruncated(x + 2, y, STR_202C_FROM_TO, TC_FROMSTRING, width - 2);
|
||||
|
||||
/* Displays the date where the granted subsidy will end */
|
||||
if ((xt > 3) && (width - xt) > 9 ) { // do not draw if previous drawing failed or if it will overlap on scrollbar
|
||||
SetDParam(0, _date - ymd.day + 768 - s->age * 32);
|
||||
DrawStringTruncated(xt, y, STR_202D_UNTIL, TC_FROMSTRING, width - xt);
|
||||
/* Displays the deadline before voiding the proposal */
|
||||
SetDParam(0, _date - ymd.day + 384 - s->age * 32);
|
||||
DrawStringTruncated(x2, y, STR_2028_BY, TC_FROMSTRING, width - x2);
|
||||
y += 10;
|
||||
num++;
|
||||
}
|
||||
y += 10;
|
||||
num++;
|
||||
}
|
||||
}
|
||||
|
||||
if (num == 0) DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
|
||||
}
|
||||
if (num == 0) {
|
||||
DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
|
||||
y += 10;
|
||||
}
|
||||
|
||||
static void SubsidiesListWndProc(Window *w, WindowEvent *e)
|
||||
{
|
||||
switch (e->event) {
|
||||
case WE_PAINT: DrawSubsidiesWindow(w); break;
|
||||
/* Section for drawing the already granted subisidies */
|
||||
DrawStringTruncated(x, y + 1, STR_202B_SERVICES_ALREADY_SUBSIDISED, TC_FROMSTRING, width);
|
||||
y += 10;
|
||||
num = 0;
|
||||
|
||||
case WE_CLICK:
|
||||
switch (e->we.click.widget) {
|
||||
case 3:
|
||||
HandleSubsidyClick(e->we.click.pt.y - 25);
|
||||
break;
|
||||
for (s = _subsidies; s != endof(_subsidies); s++) {
|
||||
if (s->cargo_type != CT_INVALID && s->age >= 12) {
|
||||
int xt;
|
||||
|
||||
SetupSubsidyDecodeParam(s, 1);
|
||||
|
||||
PlayerID player = GetStation(s->to)->owner;
|
||||
SetDParam(3, player);
|
||||
|
||||
/* Displays the two connected stations */
|
||||
xt = DrawStringTruncated(x + 2, y, STR_202C_FROM_TO, TC_FROMSTRING, width - 2);
|
||||
|
||||
/* Displays the date where the granted subsidy will end */
|
||||
if ((xt > 3) && (width - xt) > 9 ) { // do not draw if previous drawing failed or if it will overlap on scrollbar
|
||||
SetDParam(0, _date - ymd.day + 768 - s->age * 32);
|
||||
DrawStringTruncated(xt, y, STR_202D_UNTIL, TC_FROMSTRING, width - xt);
|
||||
}
|
||||
y += 10;
|
||||
num++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (num == 0) DrawStringTruncated(x + 2, y, STR_202A_NONE, TC_FROMSTRING, width - 2);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static const Widget _subsidies_list_widgets[] = {
|
||||
{ WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
|
||||
|
@ -191,11 +179,11 @@ static const WindowDesc _subsidies_list_desc = {
|
|||
WC_SUBSIDIES_LIST, WC_NONE,
|
||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE,
|
||||
_subsidies_list_widgets,
|
||||
SubsidiesListWndProc
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
void ShowSubsidiesList()
|
||||
{
|
||||
AllocateWindowDescFront<Window>(&_subsidies_list_desc, 0);
|
||||
AllocateWindowDescFront<SubsidyListWindow>(&_subsidies_list_desc, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue