summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorterkhen <terkhen@openttd.org>2010-03-06 13:03:17 +0000
committerterkhen <terkhen@openttd.org>2010-03-06 13:03:17 +0000
commit3ed1442e055fdc5217378fba14d8003009b048a2 (patch)
tree9cab13c9e8a1e18dfc8eb205b173fc84bd094153
parentbe3b839ded1372ad6a3802118bb70fead2ccd4ce (diff)
downloadopenttd-3ed1442e055fdc5217378fba14d8003009b048a2.tar.xz
(svn r19348) -Add: Allow to sort road vehicles by power and by power vs running cost at the engine preview window.
-rw-r--r--src/build_vehicle_gui.cpp31
-rw-r--r--src/settings.cpp2
2 files changed, 26 insertions, 7 deletions
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index 1ac9936e9..74396bb4a 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -203,8 +203,7 @@ static int CDECL EngineRunningCostSorter(const EngineID *a, const EngineID *b)
return _internal_sort_order ? -r : r;
}
-/* Train sorting functions */
-static int CDECL TrainEnginePowerVsRunningCostSorter(const EngineID *a, const EngineID *b)
+static int CDECL EnginePowerVsRunningCostSorter(const EngineID *a, const EngineID *b)
{
const Engine *e_a = Engine::Get(*a);
const Engine *e_b = Engine::Get(*b);
@@ -224,6 +223,8 @@ static int CDECL TrainEnginePowerVsRunningCostSorter(const EngineID *a, const En
return _internal_sort_order ? -r : r;
}
+/* Train sorting functions */
+
static int CDECL TrainEngineCapacitySorter(const EngineID *a, const EngineID *b)
{
const RailVehicleInfo *rvi_a = RailVehInfo(*a);
@@ -308,7 +309,7 @@ static EngList_SortTypeFunction * const _sorter[][10] = {{
&EngineIntroDateSorter,
&EngineNameSorter,
&EngineRunningCostSorter,
- &TrainEnginePowerVsRunningCostSorter,
+ &EnginePowerVsRunningCostSorter,
&EngineReliabilitySorter,
&TrainEngineCapacitySorter,
}, {
@@ -321,6 +322,8 @@ static EngList_SortTypeFunction * const _sorter[][10] = {{
&EngineRunningCostSorter,
&EngineReliabilitySorter,
&RoadVehEngineCapacitySorter,
+ &EnginePowerSorter,
+ &EnginePowerVsRunningCostSorter,
}, {
/* Ships */
&EngineNumberSorter,
@@ -366,6 +369,8 @@ static const StringID _sort_listing[][11] = {{
STR_SORT_BY_RUNNING_COST,
STR_SORT_BY_RELIABILITY,
STR_SORT_BY_CARGO_CAPACITY,
+ STR_SORT_BY_POWER,
+ STR_SORT_BY_POWER_VS_RUNNING_COST,
INVALID_STRING_ID
}, {
/* Ships */
@@ -1047,9 +1052,16 @@ struct BuildVehicleWindow : Window {
break;
}
- case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
- ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
- break;
+ case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: { // Select sorting criteria dropdown menu
+ uint32 hidden_mask = 0;
+ /* Disable sorting by power when the original acceleration model for road vehicles is being used. */
+ if (this->vehicle_type == VEH_ROAD &&
+ _settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) {
+ SetBit(hidden_mask, 8);
+ SetBit(hidden_mask, 9);
+ }
+ ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, hidden_mask);
+ } break;
case BUILD_VEHICLE_WIDGET_CARGO_FILTER_DROPDOWN: // Select cargo filtering criteria dropdown menu
ShowDropDownMenu(this, this->cargo_filter_texts, this->cargo_filter_criteria, BUILD_VEHICLE_WIDGET_CARGO_FILTER_DROPDOWN, 0, 0);
@@ -1078,6 +1090,13 @@ struct BuildVehicleWindow : Window {
virtual void OnInvalidateData(int data)
{
+ /* When switching to original acceleration model for road vehicles, clear the selected sort criteria if it is not available now. */
+ if (this->vehicle_type == VEH_ROAD &&
+ _settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL &&
+ this->sort_criteria > 7) {
+ this->sort_criteria = 0;
+ _last_sort_criteria[VEH_ROAD] = 0;
+ }
this->eng_list.ForceRebuild();
}
diff --git a/src/settings.cpp b/src/settings.cpp
index 2aa30d750..9826d0c3a 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -793,7 +793,7 @@ static bool RoadVehAccelerationModelChanged(int32 p1)
/* These windows show acceleration values only when realistic acceleration is on. They must be redrawn after a setting change. */
SetWindowClassesDirty(WC_ENGINE_PREVIEW);
- SetWindowClassesDirty(WC_BUILD_VEHICLE);
+ InvalidateWindowClassesData(WC_BUILD_VEHICLE, 0);
SetWindowClassesDirty(WC_VEHICLE_DETAILS);
return true;