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]);
174 if (result.
Failed())
return;
189 VpSetPlaceSizingLimit(-1);
253 CcPlaySound_SPLAT_RAIL);
336 VpSetPlaceSizingLimit(-1);
352 static void DoRailroadTrack(
int mode)
358 CcPlaySound_SPLAT_RAIL);
361 static void HandleAutodirPlacement()
370 DoRailroadTrack(trackstat);
413 CcPlaySound_SPLAT_RAIL);
444 if (!gui_scope)
return;
479 void UpdateRemoveWidgetStatus(
int clicked_widget)
481 switch (clicked_widget) {
514 SetDParam(0, STR_TOOLBAR_RAILTYPE_VELOCITY);
561 ShowBuildTrainDepotPicker(
this);
570 ShowBuildWaypointPicker(
this);
609 default: NOT_REACHED();
611 this->UpdateRemoveWidgetStatus(widget);
678 default: NOT_REACHED();
693 switch (select_proc) {
694 default: NOT_REACHED();
701 HandleAutodirPlacement();
723 HandleStationPlacement(start_tile, end_tile);
743 virtual void OnPlaceObjectAbort()
745 this->RaiseButtons();
781 extern RailType _last_built_railtype;
789 static Hotkey railtoolbar_hotkeys[] = {
808 static const NWidgetPart _nested_build_rail_widgets[] = {
853 _nested_build_rail_widgets,
lengthof(_nested_build_rail_widgets),
854 &BuildRailToolbarWindow::hotkeys
883 uint numtracks = ta.w;
884 uint platlength = ta.h;
967 if (!newstation || _railstation.
station_class >= (
int)StationClass::GetClassCount()) {
979 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1018 for (uint bits = 0; bits < 7; bits++) {
1020 if (statspec == NULL) {
1053 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1057 size->width =
max(size->width, d.width + padding.width);
1073 StringID str = this->GetWidget<NWidgetCore>(widget)->widget_data;
1078 const StationSpec *statspec = stclass->GetSpec(j);
1079 SetDParam(0, (statspec != NULL && statspec->
name != 0) ? statspec->
name : STR_STATION_CLASS_DFLT);
1083 size->width =
max(size->width, d.width + padding.width);
1109 switch (
GB(widget, 0, 16)) {
1112 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
1114 _cur_dpi = &tmp_dpi;
1126 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
1128 _cur_dpi = &tmp_dpi;
1141 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1155 byte type =
GB(widget, 16, 16);
1164 if (
FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
1166 _cur_dpi = &tmp_dpi;
1190 SetDParam(0, (statspec != NULL && statspec->
name != 0) ? statspec->
name : STR_STATION_CLASS_DFLT);
1196 switch (
GB(widget, 0, 16)) {
1225 for (uint i = 0; i < 7; i++) {
1260 for (uint i = 0; i < 7; i++) {
1285 for (uint i = 0; i < 7; i++) {
1294 for (uint i = 0; i < 7; i++) {
1323 if (y >= (
int)StationClass::GetClassCount())
return;
1324 for (uint i = 0; i < StationClass::GetClassCount(); i++) {
1350 int y =
GB(widget, 16, 16);
1376 static const NWidgetPart _nested_station_builder_widgets[] = {
1394 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL),
SetPadding(1, 2, 0, 2),
1397 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(),
1399 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(),
1402 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),
1403 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_NUMBER_OF_TRACKS, STR_NULL),
SetPadding(0, 2, 0, 2),
1415 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_PLATFORM_LENGTH, STR_NULL),
SetPadding(2, 2, 0, 2),
1433 NWidget(
WWT_LABEL, COLOUR_DARK_GREEN),
SetMinimalSize(144, 11),
SetDataTip(STR_STATION_BUILD_COVERAGE_AREA_TITLE, STR_NULL),
SetPadding(3, 2, 0, 2),
1437 SetDataTip(STR_STATION_BUILD_COVERAGE_OFF, STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP),
1439 SetDataTip(STR_STATION_BUILD_COVERAGE_ON, STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP),
1447 NWidget(
NWID_MATRIX, COLOUR_DARK_GREEN,
WID_BRAS_MATRIX),
SetScrollbar(
WID_BRAS_MATRIX_SCROLL),
SetPIP(0, 2, 0),
SetPadding(2, 0, 0, 0),
1471 WDP_AUTO,
"build_station_rail", 350, 0,
1474 _nested_station_builder_widgets,
lengthof(_nested_station_builder_widgets)
1500 const NWidgetBase *widget = this->GetWidget<NWidgetBase>(widget_index);
1501 int x = widget->
pos_x - offset.x +
1502 (widget->
current_x - sprite_size.width + offset.x) / 2;
1532 for (uint lowered = 0; lowered < 2; lowered++) {
1634 if (!gui_scope)
return;
1686 _nested_signal_builder_widgets,
lengthof(_nested_signal_builder_widgets)
1771 _nested_build_depot_widgets,
lengthof(_nested_build_depot_widgets)
1774 static void ShowBuildTrainDepotPicker(
Window *parent)
1798 size->width += resize->width * 2;
1799 size->height += resize->height * 2;
1814 switch (
GB(widget, 0, 16)) {
1816 byte type =
GB(widget, 16, 16);
1829 switch (
GB(widget, 0, 16)) {
1831 byte type =
GB(widget, 16, 16);
1870 _nested_build_waypoint_widgets,
lengthof(_nested_build_waypoint_widgets)
1873 static void ShowBuildWaypointPicker(
Window *parent)
1892 extern RailType _last_built_railtype;
1906 extern RailType _last_built_railtype;
1911 memset(count, 0,
sizeof(count));
1921 if (count[r] >= count[rt]) rt = r;
2013 if (!
HasBit(used_railtypes, rt))
continue;