mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r21867) -Codechange: move creating the rail type dropdown to a more general location
This commit is contained in:
parent
2f6c840ebf
commit
4682434bc9
|
@ -31,6 +31,7 @@
|
||||||
#include "spritecache.h"
|
#include "spritecache.h"
|
||||||
#include "core/geometry_func.hpp"
|
#include "core/geometry_func.hpp"
|
||||||
#include "hotkeys.h"
|
#include "hotkeys.h"
|
||||||
|
#include "engine_base.h"
|
||||||
|
|
||||||
#include "station_map.h"
|
#include "station_map.h"
|
||||||
#include "tunnelbridge_map.h"
|
#include "tunnelbridge_map.h"
|
||||||
|
@ -1969,3 +1970,54 @@ void InitializeRailGUI()
|
||||||
_cur_signal_type = _default_signal_type[_settings_client.gui.default_signal_type];
|
_cur_signal_type = _default_signal_type[_settings_client.gui.default_signal_type];
|
||||||
ResetSignalVariant();
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -13,10 +13,12 @@
|
||||||
#define RAIL_GUI_H
|
#define RAIL_GUI_H
|
||||||
|
|
||||||
#include "rail_type.h"
|
#include "rail_type.h"
|
||||||
|
#include "widgets/dropdown_type.h"
|
||||||
|
|
||||||
struct Window *ShowBuildRailToolbar(RailType railtype);
|
struct Window *ShowBuildRailToolbar(RailType railtype);
|
||||||
void ReinitGuiAfterToggleElrail(bool disable);
|
void ReinitGuiAfterToggleElrail(bool disable);
|
||||||
bool ResetSignalVariant(int32 = 0);
|
bool ResetSignalVariant(int32 = 0);
|
||||||
void InitializeRailGUI();
|
void InitializeRailGUI();
|
||||||
|
DropDownList *GetRailTypeDropDownList(bool for_replacement = false);
|
||||||
|
|
||||||
#endif /* RAIL_GUI_H */
|
#endif /* RAIL_GUI_H */
|
||||||
|
|
|
@ -691,50 +691,9 @@ static CallBackFunction ToolbarZoomOutClick(Window *w)
|
||||||
|
|
||||||
/* --- Rail button menu --- */
|
/* --- Rail button menu --- */
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
static CallBackFunction ToolbarBuildRailClick(Window *w)
|
static CallBackFunction ToolbarBuildRailClick(Window *w)
|
||||||
{
|
{
|
||||||
RailTypes used_railtypes = RAILTYPES_NONE;
|
ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, TBN_RAILS, 140, true, true);
|
||||||
|
|
||||||
/* 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 = 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);
|
|
||||||
ShowDropDownList(w, list, _last_built_railtype, TBN_RAILS, 140, true, true);
|
|
||||||
SndPlayFx(SND_15_BEEP);
|
SndPlayFx(SND_15_BEEP);
|
||||||
return CBF_NONE;
|
return CBF_NONE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue