842 this->filter.flags = |
843 this->filter.flags = |
843 tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags; |
844 tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags; |
844 break; |
845 break; |
845 } |
846 } |
846 this->SetupWindowStrings(type); |
847 this->SetupWindowStrings(type); |
847 ResizeButtons(this, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME); |
848 |
|
849 this->listview_mode = (this->window_number <= VEH_END); |
|
850 /* If we are just viewing the list of vehicles, we do not need the Build button. |
|
851 * So we just hide it, and enlarge the Rename buton by the now vacant place. */ |
|
852 if (this->listview_mode) { |
|
853 this->HideWidget(BUILD_VEHICLE_WIDGET_BUILD); |
|
854 this->widget[BUILD_VEHICLE_WIDGET_RENAME].left = this->widget[BUILD_VEHICLE_WIDGET_BUILD].left; |
|
855 } else { |
|
856 /* Both are visible, adjust the size of each */ |
|
857 ResizeButtons(this, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME); |
|
858 } |
848 |
859 |
849 this->GenerateBuildList(); // generate the list, since we need it in the next line |
860 this->GenerateBuildList(); // generate the list, since we need it in the next line |
850 /* Select the first engine in the list as default when opening the window */ |
861 /* Select the first engine in the list as default when opening the window */ |
851 if (this->eng_list.Length() > 0) this->sel_engine = this->eng_list[0]; |
862 if (this->eng_list.Length() > 0) this->sel_engine = this->eng_list[0]; |
852 |
863 |
854 } |
865 } |
855 |
866 |
856 /* Setup widget strings to fit the different types of vehicles */ |
867 /* Setup widget strings to fit the different types of vehicles */ |
857 void SetupWindowStrings(VehicleType type) |
868 void SetupWindowStrings(VehicleType type) |
858 { |
869 { |
859 bool available_vehicle = this->window_number <= VEH_END; |
|
860 switch (type) { |
870 switch (type) { |
861 default: NOT_REACHED(); |
871 default: NOT_REACHED(); |
862 |
872 |
863 case VEH_TRAIN: |
873 case VEH_TRAIN: |
864 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = available_vehicle ? STR_AVAILABLE_TRAINS : STR_JUST_STRING; |
874 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = this->listview_mode ? STR_AVAILABLE_TRAINS : STR_JUST_STRING; |
865 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_8843_TRAIN_VEHICLE_SELECTION; |
875 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_8843_TRAIN_VEHICLE_SELECTION; |
866 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_881F_BUILD_VEHICLE; |
876 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_881F_BUILD_VEHICLE; |
867 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN; |
877 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN; |
868 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_8820_RENAME; |
878 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_8820_RENAME; |
869 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE; |
879 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE; |
870 break; |
880 break; |
871 |
881 |
872 case VEH_ROAD: |
882 case VEH_ROAD: |
873 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = available_vehicle ? STR_AVAILABLE_ROAD_VEHICLES : STR_9006_NEW_ROAD_VEHICLES; |
883 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = this->listview_mode ? STR_AVAILABLE_ROAD_VEHICLES : STR_9006_NEW_ROAD_VEHICLES; |
874 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_9026_ROAD_VEHICLE_SELECTION; |
884 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_9026_ROAD_VEHICLE_SELECTION; |
875 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_9007_BUILD_VEHICLE; |
885 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_9007_BUILD_VEHICLE; |
876 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_9027_BUILD_THE_HIGHLIGHTED_ROAD; |
886 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_9027_BUILD_THE_HIGHLIGHTED_ROAD; |
877 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_9034_RENAME; |
887 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_9034_RENAME; |
878 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE; |
888 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE; |
879 break; |
889 break; |
880 |
890 |
881 case VEH_SHIP: |
891 case VEH_SHIP: |
882 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = available_vehicle ? STR_AVAILABLE_SHIPS : STR_9808_NEW_SHIPS; |
892 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = this->listview_mode ? STR_AVAILABLE_SHIPS : STR_9808_NEW_SHIPS; |
883 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_9825_SHIP_SELECTION_LIST_CLICK; |
893 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_9825_SHIP_SELECTION_LIST_CLICK; |
884 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_9809_BUILD_SHIP; |
894 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_9809_BUILD_SHIP; |
885 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_9826_BUILD_THE_HIGHLIGHTED_SHIP; |
895 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_9826_BUILD_THE_HIGHLIGHTED_SHIP; |
886 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_9836_RENAME; |
896 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_9836_RENAME; |
887 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE; |
897 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE; |
888 break; |
898 break; |
889 |
899 |
890 case VEH_AIRCRAFT: |
900 case VEH_AIRCRAFT: |
891 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = available_vehicle ? STR_AVAILABLE_AIRCRAFT : STR_A005_NEW_AIRCRAFT; |
901 this->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = this->listview_mode ? STR_AVAILABLE_AIRCRAFT : STR_A005_NEW_AIRCRAFT; |
892 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_A025_AIRCRAFT_SELECTION_LIST; |
902 this->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_A025_AIRCRAFT_SELECTION_LIST; |
893 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_A006_BUILD_AIRCRAFT; |
903 this->widget[BUILD_VEHICLE_WIDGET_BUILD].data = STR_A006_BUILD_AIRCRAFT; |
894 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT; |
904 this->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips = STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT; |
895 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_A037_RENAME; |
905 this->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_A037_RENAME; |
896 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_A038_RENAME_AIRCRAFT_TYPE; |
906 this->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_A038_RENAME_AIRCRAFT_TYPE; |
996 const Engine *e; |
1006 const Engine *e; |
997 FOR_ALL_ENGINES_OF_TYPE(e, VEH_AIRCRAFT) { |
1007 FOR_ALL_ENGINES_OF_TYPE(e, VEH_AIRCRAFT) { |
998 EngineID eid = e->index; |
1008 EngineID eid = e->index; |
999 if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue; |
1009 if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue; |
1000 /* First VEH_END window_numbers are fake to allow a window open for all different types at once */ |
1010 /* First VEH_END window_numbers are fake to allow a window open for all different types at once */ |
1001 if (this->window_number > VEH_END && !CanAircraftUseStation(eid, this->window_number)) continue; |
1011 if (!this->listview_mode && !CanAircraftUseStation(eid, this->window_number)) continue; |
1002 |
1012 |
1003 *this->eng_list.Append() = eid; |
1013 *this->eng_list.Append() = eid; |
1004 if (eid == this->sel_engine) sel_id = eid; |
1014 if (eid == this->sel_engine) sel_id = eid; |
1005 } |
1015 } |
1006 |
1016 |
1107 this->GenerateBuildList(); |
1117 this->GenerateBuildList(); |
1108 } |
1118 } |
1109 |
1119 |
1110 uint max = min(this->vscroll.pos + this->vscroll.cap, this->eng_list.Length()); |
1120 uint max = min(this->vscroll.pos + this->vscroll.cap, this->eng_list.Length()); |
1111 |
1121 |
1112 this->SetWidgetDisabledState(BUILD_VEHICLE_WIDGET_BUILD, this->window_number <= VEH_END); |
|
1113 |
|
1114 SetVScrollCount(this, this->eng_list.Length()); |
1122 SetVScrollCount(this, this->eng_list.Length()); |
1115 SetDParam(0, this->filter.railtype + STR_881C_NEW_RAIL_VEHICLES); // This should only affect rail vehicles |
1123 SetDParam(0, this->filter.railtype + STR_881C_NEW_RAIL_VEHICLES); // This should only affect rail vehicles |
1116 |
1124 |
1117 /* Set text of sort by dropdown */ |
1125 /* Set text of sort by dropdown */ |
1118 this->widget[BUILD_VEHICLE_WIDGET_SORT_DROPDOWN].data = _sort_listing[this->vehicle_type][this->sort_criteria]; |
1126 this->widget[BUILD_VEHICLE_WIDGET_SORT_DROPDOWN].data = _sort_listing[this->vehicle_type][this->sort_criteria]; |
1169 this->SetDirty(); |
1177 this->SetDirty(); |
1170 } |
1178 } |
1171 |
1179 |
1172 virtual void OnResize(Point new_size, Point delta) |
1180 virtual void OnResize(Point new_size, Point delta) |
1173 { |
1181 { |
1174 if (delta.x != 0) ResizeButtons(this, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME); |
1182 if (delta.x != 0 && !this->listview_mode) { |
|
1183 ResizeButtons(this, BUILD_VEHICLE_WIDGET_BUILD, BUILD_VEHICLE_WIDGET_RENAME); |
|
1184 } |
1175 if (delta.y == 0) return; |
1185 if (delta.y == 0) return; |
1176 |
1186 |
1177 this->vscroll.cap += delta.y / (int)GetVehicleListHeight(this->vehicle_type); |
1187 this->vscroll.cap += delta.y / (int)GetVehicleListHeight(this->vehicle_type); |
1178 this->widget[BUILD_VEHICLE_WIDGET_LIST].data = (this->vscroll.cap << 8) + 1; |
1188 this->widget[BUILD_VEHICLE_WIDGET_LIST].data = (this->vscroll.cap << 8) + 1; |
1179 } |
1189 } |