diff options
author | rubidium <rubidium@openttd.org> | 2011-01-20 12:40:04 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2011-01-20 12:40:04 +0000 |
commit | 4682434bc9b4a9768267633ae7a54c8eeb8d3429 (patch) | |
tree | 4c60be21ae25e3f6531c92aad3450396ef397bfa /src/rail_gui.cpp | |
parent | 2f6c840ebf94c9c0386abcb0217540a1c2a7ae85 (diff) | |
download | openttd-4682434bc9b4a9768267633ae7a54c8eeb8d3429.tar.xz |
(svn r21867) -Codechange: move creating the rail type dropdown to a more general location
Diffstat (limited to 'src/rail_gui.cpp')
-rw-r--r-- | src/rail_gui.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index d8e901bba..7beaf6eff 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -31,6 +31,7 @@ #include "spritecache.h" #include "core/geometry_func.hpp" #include "hotkeys.h" +#include "engine_base.h" #include "station_map.h" #include "tunnelbridge_map.h" @@ -1969,3 +1970,54 @@ void InitializeRailGUI() _cur_signal_type = _default_signal_type[_settings_client.gui.default_signal_type]; ResetSignalVariant(); } + +/** + * Compare railtypes based on their sorting order. + * @param first The railtype to compare to. + * @param second The railtype to compare. + * @return True iff the first should be sorted before the second. + */ +static bool CompareRailTypes(const DropDownListItem *first, const DropDownListItem *second) +{ + return GetRailTypeInfo((RailType)first->result)->sorting_order < GetRailTypeInfo((RailType)second->result)->sorting_order; +} + +/** + * Create a drop down list for all the rail types of the local company. + * @param for_replacement Whether this list is for the replacement window. + * @return The populated and sorted #DropDownList. + */ +DropDownList *GetRailTypeDropDownList(bool for_replacement) +{ + RailTypes used_railtypes = RAILTYPES_NONE; + + /* Find the used railtypes. */ + Engine *e; + FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; + + used_railtypes |= GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes; + } + + /* Get the date introduced railtypes as well. */ + used_railtypes = AddDateIntroducedRailTypes(used_railtypes, MAX_DAY); + + const Company *c = Company::Get(_local_company); + DropDownList *list = new DropDownList(); + for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { + /* If it's not used ever, don't show it to the user. */ + if (!HasBit(used_railtypes, rt)) continue; + + const RailtypeInfo *rti = GetRailTypeInfo(rt); + /* Skip rail type if it has no label */ + if (rti->label == 0) continue; + + StringID str = for_replacement ? rti->strings.replace_text : (rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING); + DropDownListParamStringItem *item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_railtypes, rt)); + item->SetParam(0, rti->strings.menu_text); + item->SetParam(1, rti->max_speed); + list->push_back(item); + } + list->sort(CompareRailTypes); + return list; +} |