70 static void ShowBuildTrainDepotPicker(
Window *parent);
71 static void ShowBuildWaypointPicker(
Window *parent);
94 static void GenericPlaceRail(
TileIndex tile,
int cmd)
100 CcPlaySound_SPLAT_RAIL);
134 if (result.
Failed())
return;
145 PlaceExtraDepotRail(tile, _place_depot_extra_dir[dir + 4], _place_depot_extra_track[dir + 4]);
146 PlaceExtraDepotRail(tile, _place_depot_extra_dir[dir + 8], _place_depot_extra_track[dir + 8]);
175 if (result.
Failed())
return;
190 VpSetPlaceSizingLimit(-1);
254 CcPlaySound_SPLAT_RAIL);
337 VpSetPlaceSizingLimit(-1);
353 static void DoRailroadTrack(
int mode)
359 CcPlaySound_SPLAT_RAIL);
362 static void HandleAutodirPlacement()
371 DoRailroadTrack(trackstat);
414 CcPlaySound_SPLAT_RAIL);
445 if (!gui_scope)
return;
480 void UpdateRemoveWidgetStatus(
int clicked_widget)
482 switch (clicked_widget) {
515 SetDParam(0, STR_TOOLBAR_RAILTYPE_VELOCITY);
562 ShowBuildTrainDepotPicker(
this);
571 ShowBuildWaypointPicker(
this);
610 default: NOT_REACHED();
612 this->UpdateRemoveWidgetStatus(widget);
679 default: NOT_REACHED();
694 switch (select_proc) {
695 default: NOT_REACHED();
702 HandleAutodirPlacement();
724 HandleStationPlacement(start_tile, end_tile);
744 virtual void OnPlaceObjectAbort()
746 this->RaiseButtons();
782 extern RailType _last_built_railtype;
790 static Hotkey railtoolbar_hotkeys[] = {
809 static const NWidgetPart _nested_build_rail_widgets[] = {
854 _nested_build_rail_widgets,
lengthof(_nested_build_rail_widgets),
855 &BuildRailToolbarWindow::hotkeys
884 uint numtracks = ta.w;
885 uint platlength = ta.h;
968 if (!newstation || _railstation.
station_class >= (
int)StationClass::GetClassCount()) {
980 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1019 for (uint bits = 0; bits < 7; bits++) {
1021 if (statspec == NULL) {
1054 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1058 size->width =
max(size->width, d.width + padding.width);
1074 StringID str = this->GetWidget<NWidgetCore>(widget)->widget_data;
1079 const StationSpec *statspec = stclass->GetSpec(j);
1080 SetDParam(0, (statspec != NULL && statspec->
name != 0) ? statspec->
name : STR_STATION_CLASS_DFLT);
1084 size->width =
max(size->width, d.width + padding.width);
1110 switch (
GB(widget, 0, 16)) {
1113 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
1115 _cur_dpi = &tmp_dpi;
1127 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
1129 _cur_dpi = &tmp_dpi;
1142 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1156 byte type =
GB(widget, 16, 16);
1165 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
1167 _cur_dpi = &tmp_dpi;
1191 SetDParam(0, (statspec != NULL && statspec->
name != 0) ? statspec->
name : STR_STATION_CLASS_DFLT);
1197 switch (
GB(widget, 0, 16)) {
1226 for (uint i = 0; i < 7; i++) {
1261 for (uint i = 0; i < 7; i++) {
1286 for (uint i = 0; i < 7; i++) {
1295 for (uint i = 0; i < 7; i++) {
1324 if (y >= (
int)StationClass::GetClassCount())
return;
1325 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1351 int y =
GB(widget, 16, 16);
1377 static const NWidgetPart _nested_station_builder_widgets[] = {
1395 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL),
SetPadding(1, 2, 0, 2),
1398 NWidget(
WWT_PANEL, COLOUR_GREY,
WID_BRAS_PLATFORM_DIR_X),
SetMinimalSize(66, 60),
SetFill(0, 0),
SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP),
EndContainer(),
1400 NWidget(
WWT_PANEL, COLOUR_GREY,
WID_BRAS_PLATFORM_DIR_Y),
SetMinimalSize(66, 60),
SetFill(0, 0),
SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP),
EndContainer(),
1403 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN,
WID_BRAS_SHOW_NEWST_TYPE),
SetMinimalSize(144, 11),
SetDataTip(STR_ORANGE_STRING, STR_NULL),
SetPadding(1, 2, 4, 2),
1404 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL),
SetPadding(0, 2, 0, 2),
1416 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL),
SetPadding(2, 2, 0, 2),
1434 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL),
SetPadding(3, 2, 0, 2),
1438 SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP),
1440 SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP),
1448 NWidget(
NWID_MATRIX, COLOUR_DARK_GREEN,
WID_BRAS_MATRIX),
SetScrollbar(
WID_BRAS_MATRIX_SCROLL),
SetPIP(0, 2, 0),
SetPadding(2, 0, 0, 0),
1472 WDP_AUTO,
"build_station_rail", 350, 0,
1475 _nested_station_builder_widgets,
lengthof(_nested_station_builder_widgets)
1501 const NWidgetBase *widget = this->GetWidget<NWidgetBase>(widget_index);
1502 int x = widget->
pos_x - offset.x +
1503 (widget->
current_x - sprite_size.width + offset.x) / 2;
1533 for (uint lowered = 0; lowered < 2; lowered++) {
1635 if (!gui_scope)
return;
1687 _nested_signal_builder_widgets,
lengthof(_nested_signal_builder_widgets)
1772 _nested_build_depot_widgets,
lengthof(_nested_build_depot_widgets)
1775 static void ShowBuildTrainDepotPicker(
Window *parent)
1799 size->width += resize->width * 2;
1800 size->height += resize->height * 2;
1815 switch (
GB(widget, 0, 16)) {
1817 byte type =
GB(widget, 16, 16);
1830 switch (
GB(widget, 0, 16)) {
1832 byte type =
GB(widget, 16, 16);
1871 _nested_build_waypoint_widgets,
lengthof(_nested_build_waypoint_widgets)
1874 static void ShowBuildWaypointPicker(
Window *parent)
1893 extern RailType _last_built_railtype;
1907 extern RailType _last_built_railtype;
1912 memset(count, 0,
sizeof(count));
1922 if (count[r] >= count[rt]) rt = r;
2014 if (!
HasBit(used_railtypes, rt))
continue;