Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -15,7 +15,6 @@
|
||||
#include "command_func.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "dropdown_common_type.h"
|
||||
#include "house.h"
|
||||
#include "vehicle_gui.h"
|
||||
#include "rail_gui.h"
|
||||
@@ -79,6 +78,10 @@
|
||||
#include "citymania/cm_watch_gui.hpp"
|
||||
#include "citymania/cm_zoning.hpp"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
#include "dropdown_common_type.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
|
||||
@@ -90,14 +93,14 @@ RoadType _last_built_roadtype;
|
||||
RoadType _last_built_tramtype;
|
||||
|
||||
/** Toobar modes */
|
||||
enum ToolbarMode {
|
||||
enum ToolbarMode : uint8_t {
|
||||
TB_NORMAL,
|
||||
TB_UPPER,
|
||||
TB_LOWER
|
||||
};
|
||||
|
||||
/** Callback functions. */
|
||||
enum CallBackFunction {
|
||||
enum CallBackFunction : uint8_t {
|
||||
CBF_NONE,
|
||||
CBF_PLACE_SIGN,
|
||||
CBF_PLACE_LANDINFO,
|
||||
@@ -111,11 +114,8 @@ static CallBackFunction _last_started_action = CBF_NONE; ///< Last started user
|
||||
*/
|
||||
class DropDownListCompanyItem : public DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>> {
|
||||
public:
|
||||
DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>>(SPR_COMPANY_ICON, COMPANY_SPRITE_COLOUR(company), NetworkCanJoinCompany(company) ? SPR_EMPTY : SPR_LOCK, PAL_NONE, STR_NULL, company, false, shaded)
|
||||
DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon<DropDownIcon<DropDownString<DropDownListItem>, true>>(SPR_COMPANY_ICON, COMPANY_SPRITE_COLOUR(company), NetworkCanJoinCompany(company) ? SPR_EMPTY : SPR_LOCK, PAL_NONE, GetString(STR_COMPANY_NAME_COMPANY_NUM, company, company), company.base(), false, shaded)
|
||||
{
|
||||
SetDParam(0, company);
|
||||
SetDParam(1, company);
|
||||
this->SetString(GetString(STR_COMPANY_NAME_COMPANY_NUM));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -165,7 +165,7 @@ static const int CTMN_SPECTATOR = -4; ///< Show a company window as spectator
|
||||
* @param widget The button widget id.
|
||||
* @param grey A bitmask of which companies to mark as disabled.
|
||||
*/
|
||||
static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey = 0)
|
||||
static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask grey = {})
|
||||
{
|
||||
DropDownList list;
|
||||
|
||||
@@ -191,12 +191,12 @@ static void PopupMainCompanyToolbMenu(Window *w, WidgetID widget, CompanyMask gr
|
||||
break;
|
||||
}
|
||||
|
||||
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
||||
for (CompanyID c = CompanyID::Begin(); c < MAX_COMPANIES; ++c) {
|
||||
if (!Company::IsValidID(c)) continue;
|
||||
list.push_back(std::make_unique<DropDownListCompanyItem>(c, HasBit(grey, c)));
|
||||
list.push_back(std::make_unique<DropDownListCompanyItem>(c, grey.Test(c)));
|
||||
}
|
||||
|
||||
PopupMainToolbarMenu(w, widget, std::move(list), _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : (int)_local_company);
|
||||
PopupMainToolbarMenu(w, widget, std::move(list), _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : _local_company.base());
|
||||
}
|
||||
|
||||
static ToolbarMode _toolbar_mode;
|
||||
@@ -230,7 +230,7 @@ static CallBackFunction ToolbarPauseClick(Window *)
|
||||
{
|
||||
if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
|
||||
|
||||
if (Command<CMD_PAUSE>::Post(PM_PAUSED_NORMAL, _pause_mode == PM_UNPAUSED)) {
|
||||
if (Command<CMD_PAUSE>::Post(PauseMode::Normal, _pause_mode.None())) {
|
||||
if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
|
||||
}
|
||||
return CBF_NONE;
|
||||
@@ -254,7 +254,7 @@ static CallBackFunction ToolbarFastForwardClick(Window *)
|
||||
/**
|
||||
* Game Option button menu entries.
|
||||
*/
|
||||
enum OptionMenuEntries {
|
||||
enum OptionMenuEntries : uint8_t {
|
||||
OME_GAMEOPTIONS,
|
||||
OME_SETTINGS,
|
||||
OME_AI_SETTINGS,
|
||||
@@ -265,6 +265,12 @@ enum OptionMenuEntries {
|
||||
OME_TRANSPARENCIES,
|
||||
OME_SHOW_TOWNNAMES,
|
||||
OME_SHOW_STATIONNAMES,
|
||||
OME_SHOW_STATIONNAMES_TRAIN,
|
||||
OME_SHOW_STATIONNAMES_LORRY,
|
||||
OME_SHOW_STATIONNAMES_BUS,
|
||||
OME_SHOW_STATIONNAMES_SHIP,
|
||||
OME_SHOW_STATIONNAMES_PLANE,
|
||||
OME_SHOW_STATIONNAMES_GHOST,
|
||||
OME_SHOW_WAYPOINTNAMES,
|
||||
OME_SHOW_SIGNS,
|
||||
OME_SHOW_COMPETITOR_SIGNS,
|
||||
@@ -301,6 +307,12 @@ static CallBackFunction ToolbarOptionsClick(Window *w)
|
||||
list.push_back(MakeDropDownListDividerItem());
|
||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES));
|
||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES));
|
||||
list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::Train), STR_SETTINGS_MENU_STATION_NAMES_TRAIN, OME_SHOW_STATIONNAMES_TRAIN, false, false, 1));
|
||||
list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::TruckStop), STR_SETTINGS_MENU_STATION_NAMES_LORRY, OME_SHOW_STATIONNAMES_LORRY, false, false, 1));
|
||||
list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::BusStop), STR_SETTINGS_MENU_STATION_NAMES_BUS, OME_SHOW_STATIONNAMES_BUS, false, false, 1));
|
||||
list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::Dock), STR_SETTINGS_MENU_STATION_NAMES_SHIP, OME_SHOW_STATIONNAMES_SHIP, false, false, 1));
|
||||
list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(StationFacility::Airport), STR_SETTINGS_MENU_STATION_NAMES_PLANE, OME_SHOW_STATIONNAMES_PLANE, false, false, 1));
|
||||
list.push_back(MakeDropDownListCheckedItem(_facility_display_opt.Test(STATION_FACILITY_GHOST), STR_SETTINGS_MENU_STATION_NAMES_GHOST, OME_SHOW_STATIONNAMES_GHOST, false, false, 1));
|
||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES));
|
||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS));
|
||||
list.push_back(MakeDropDownListCheckedItem(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS));
|
||||
@@ -327,13 +339,19 @@ static CallBackFunction MenuClickSettings(int index)
|
||||
case OME_SETTINGS: ShowGameSettings(); return CBF_NONE;
|
||||
case OME_AI_SETTINGS: ShowAIConfigWindow(); return CBF_NONE;
|
||||
case OME_GAMESCRIPT_SETTINGS: ShowGSConfigWindow(); return CBF_NONE;
|
||||
case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, &_grfconfig); return CBF_NONE;
|
||||
case OME_NEWGRFSETTINGS: ShowNewGRFSettings(!_networking && _settings_client.gui.UserIsAllowedToChangeNewGRFs(), true, true, _grfconfig); return CBF_NONE;
|
||||
case OME_SANDBOX: ShowCheatWindow(); break;
|
||||
case CM_OME_ZONING: citymania::ShowZoningToolbar(); break;
|
||||
case OME_TRANSPARENCIES: ShowTransparencyToolbar(); break;
|
||||
|
||||
case OME_SHOW_TOWNNAMES: ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES); break;
|
||||
case OME_SHOW_STATIONNAMES: ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
|
||||
case OME_SHOW_STATIONNAMES_TRAIN: _facility_display_opt.Flip(StationFacility::Train); break;
|
||||
case OME_SHOW_STATIONNAMES_LORRY: _facility_display_opt.Flip(StationFacility::TruckStop); break;
|
||||
case OME_SHOW_STATIONNAMES_BUS: _facility_display_opt.Flip(StationFacility::BusStop); break;
|
||||
case OME_SHOW_STATIONNAMES_SHIP: _facility_display_opt.Flip(StationFacility::Dock); break;
|
||||
case OME_SHOW_STATIONNAMES_PLANE: _facility_display_opt.Flip(StationFacility::Airport); break;
|
||||
case OME_SHOW_STATIONNAMES_GHOST: _facility_display_opt.Flip(STATION_FACILITY_GHOST); break;
|
||||
case OME_SHOW_WAYPOINTNAMES: ToggleBit(_display_opt, DO_SHOW_WAYPOINT_NAMES); break;
|
||||
case OME_SHOW_SIGNS: ToggleBit(_display_opt, DO_SHOW_SIGNS); break;
|
||||
case OME_SHOW_COMPETITOR_SIGNS:
|
||||
@@ -352,7 +370,7 @@ static CallBackFunction MenuClickSettings(int index)
|
||||
/**
|
||||
* SaveLoad entries in scenario editor mode.
|
||||
*/
|
||||
enum SaveLoadEditorMenuEntries {
|
||||
enum SaveLoadEditorMenuEntries : uint8_t {
|
||||
SLEME_SAVE_SCENARIO = 0,
|
||||
SLEME_LOAD_SCENARIO,
|
||||
SLEME_SAVE_HEIGHTMAP,
|
||||
@@ -364,7 +382,7 @@ enum SaveLoadEditorMenuEntries {
|
||||
/**
|
||||
* SaveLoad entries in normal game mode.
|
||||
*/
|
||||
enum SaveLoadNormalMenuEntries {
|
||||
enum SaveLoadNormalMenuEntries : uint8_t {
|
||||
SLNME_SAVE_GAME = 0,
|
||||
SLNME_LOAD_GAME,
|
||||
SLNME_EXIT_TOINTRO,
|
||||
@@ -428,7 +446,7 @@ static CallBackFunction MenuClickSaveLoad(int index = 0)
|
||||
|
||||
/* --- Map button menu --- */
|
||||
|
||||
enum MapMenuEntries {
|
||||
enum MapMenuEntries : uint8_t {
|
||||
MME_SHOW_SMALLMAP = 0,
|
||||
MME_SHOW_EXTRAVIEWPORTS,
|
||||
MME_SHOW_LINKGRAPH,
|
||||
@@ -481,13 +499,21 @@ static CallBackFunction MenuClickMap(int index)
|
||||
|
||||
/* --- Town button menu --- */
|
||||
|
||||
enum TownMenuEntries {
|
||||
TME_SHOW_DIRECTORY = 0,
|
||||
TME_SHOW_FOUND_TOWN,
|
||||
TME_SHOW_PLACE_HOUSES,
|
||||
};
|
||||
|
||||
static CallBackFunction ToolbarTownClick(Window *w)
|
||||
{
|
||||
if (_settings_game.economy.found_town == TF_FORBIDDEN) {
|
||||
PopupMainToolbarMenu(w, WID_TN_TOWNS, {STR_TOWN_MENU_TOWN_DIRECTORY});
|
||||
} else {
|
||||
PopupMainToolbarMenu(w, WID_TN_TOWNS, {STR_TOWN_MENU_TOWN_DIRECTORY, STR_TOWN_MENU_FOUND_TOWN});
|
||||
}
|
||||
DropDownList list;
|
||||
list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, TME_SHOW_DIRECTORY));
|
||||
if (_settings_game.economy.found_town != TF_FORBIDDEN) list.push_back(MakeDropDownListStringItem(STR_TOWN_MENU_FOUND_TOWN, TME_SHOW_FOUND_TOWN));
|
||||
if (_settings_game.economy.place_houses != PH_FORBIDDEN) list.push_back(MakeDropDownListStringItem(STR_SCENEDIT_TOWN_MENU_PACE_HOUSE, TME_SHOW_PLACE_HOUSES));
|
||||
|
||||
PopupMainToolbarMenu(w, WID_TN_TOWNS, std::move(list), 0);
|
||||
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
@@ -500,10 +526,13 @@ static CallBackFunction ToolbarTownClick(Window *w)
|
||||
static CallBackFunction MenuClickTown(int index)
|
||||
{
|
||||
switch (index) {
|
||||
case 0: ShowTownDirectory(); break;
|
||||
case 1: // setting could be changed when the dropdown was open
|
||||
case TME_SHOW_DIRECTORY: ShowTownDirectory(); break;
|
||||
case TME_SHOW_FOUND_TOWN: // Setting could be changed when the dropdown was open
|
||||
if (_settings_game.economy.found_town != TF_FORBIDDEN) ShowFoundTownWindow();
|
||||
break;
|
||||
case TME_SHOW_PLACE_HOUSES: // Setting could be changed when the dropdown was open
|
||||
if (_settings_game.economy.place_houses != PH_FORBIDDEN) ShowBuildHousePicker(nullptr);
|
||||
break;
|
||||
}
|
||||
return CBF_NONE;
|
||||
}
|
||||
@@ -602,7 +631,7 @@ static CallBackFunction MenuClickWatch(int index)
|
||||
|
||||
static CallBackFunction ToolbarCompaniesClick(Window *w)
|
||||
{
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES, 0);
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES);
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
@@ -646,7 +675,7 @@ static CallBackFunction MenuClickCompany(int index)
|
||||
|
||||
static CallBackFunction ToolbarStoryClick(Window *w)
|
||||
{
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_STORY, 0);
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_STORY);
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
@@ -658,7 +687,7 @@ static CallBackFunction ToolbarStoryClick(Window *w)
|
||||
*/
|
||||
static CallBackFunction MenuClickStory(int index)
|
||||
{
|
||||
ShowStoryBook(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index);
|
||||
ShowStoryBook(index == CTMN_SPECTATOR ? CompanyID::Invalid() : (CompanyID)index);
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
@@ -666,7 +695,7 @@ static CallBackFunction MenuClickStory(int index)
|
||||
|
||||
static CallBackFunction ToolbarGoalClick(Window *w)
|
||||
{
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_GOAL, 0);
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_GOAL);
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
@@ -678,7 +707,7 @@ static CallBackFunction ToolbarGoalClick(Window *w)
|
||||
*/
|
||||
static CallBackFunction MenuClickGoal(int index)
|
||||
{
|
||||
ShowGoalsList(index == CTMN_SPECTATOR ? INVALID_COMPANY : (CompanyID)index);
|
||||
ShowGoalsList(index == CTMN_SPECTATOR ? CompanyID::Invalid() : (CompanyID)index);
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
@@ -702,7 +731,7 @@ static void AddDropDownLeagueTableOptions(DropDownList &list)
|
||||
{
|
||||
if (LeagueTable::GetNumItems() > 0) {
|
||||
for (LeagueTable *lt : LeagueTable::Iterate()) {
|
||||
list.push_back(MakeDropDownListStringItem(lt->title, lt->index));
|
||||
list.push_back(MakeDropDownListStringItem(lt->title.GetDecodedString(), lt->index.base()));
|
||||
}
|
||||
} else {
|
||||
list.push_back(MakeDropDownListStringItem(STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE, LTMN_PERFORMANCE_LEAGUE));
|
||||
@@ -808,10 +837,10 @@ static CallBackFunction MenuClickIndustry(int index)
|
||||
|
||||
static void ToolbarVehicleClick(Window *w, VehicleType veh)
|
||||
{
|
||||
CompanyMask dis = 0;
|
||||
CompanyMask dis{};
|
||||
|
||||
for (const Company *c : Company::Iterate()) {
|
||||
if (c->group_all[veh].num_vehicle == 0) SetBit(dis, c->index);
|
||||
if (c->group_all[veh].num_vehicle == 0) dis.Set(c->index);
|
||||
}
|
||||
PopupMainCompanyToolbMenu(w, WID_TN_VEHICLE_START + veh, dis);
|
||||
}
|
||||
@@ -1184,7 +1213,7 @@ void SetStartingYear(TimerGameCalendar::Year year)
|
||||
{
|
||||
_settings_game.game_creation.starting_year = Clamp(year, CalendarTime::MIN_YEAR, CalendarTime::MAX_YEAR);
|
||||
TimerGameCalendar::Date new_calendar_date = TimerGameCalendar::ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
|
||||
TimerGameEconomy::Date new_economy_date = new_calendar_date.base();
|
||||
TimerGameEconomy::Date new_economy_date{new_calendar_date.base()};
|
||||
|
||||
/* We must set both Calendar and Economy dates to keep them in sync. Calendar first. */
|
||||
TimerGameCalendar::SetDate(new_calendar_date, 0);
|
||||
@@ -1210,7 +1239,7 @@ static CallBackFunction MenuClickHelp(int index)
|
||||
case 1: citymania::ShowLoginWindow(); break;
|
||||
case 2: ShowHelpWindow(); break;
|
||||
case 3: IConsoleSwitch(); break;
|
||||
case 4: ShowScriptDebugWindow(INVALID_COMPANY, citymania::_fn_mod); break;
|
||||
case 4: ShowScriptDebugWindow(CompanyID::Invalid(), citymania::_fn_mod); break;
|
||||
case 5: ShowScreenshotWindow(); break;
|
||||
case 6: ShowFramerateWindow(); break;
|
||||
case 7: ShowAboutWindow(); break;
|
||||
@@ -1245,15 +1274,14 @@ static CallBackFunction ToolbarSwitchClick(Window *w)
|
||||
*/
|
||||
static CallBackFunction ToolbarScenDatePanel(Window *w)
|
||||
{
|
||||
SetDParam(0, _settings_game.game_creation.starting_year);
|
||||
ShowQueryString(STR_JUST_INT, STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QSF_ENABLE_DEFAULT);
|
||||
ShowQueryString(GetString(STR_JUST_INT, _settings_game.game_creation.starting_year), STR_MAPGEN_START_DATE_QUERY_CAPT, 8, w, CS_NUMERAL, QueryStringFlag::EnableDefault);
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
static CallBackFunction ToolbarScenDateBackward(Window *w)
|
||||
{
|
||||
/* don't allow too fast scrolling */
|
||||
if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
|
||||
if (!w->flags.Test(WindowFlag::Timeout) || w->timeout_timer <= 1) {
|
||||
w->HandleButtonClick(WID_TE_DATE_BACKWARD);
|
||||
w->SetDirty();
|
||||
|
||||
@@ -1266,7 +1294,7 @@ static CallBackFunction ToolbarScenDateBackward(Window *w)
|
||||
static CallBackFunction ToolbarScenDateForward(Window *w)
|
||||
{
|
||||
/* don't allow too fast scrolling */
|
||||
if (!(w->flags & WF_TIMEOUT) || w->timeout_timer <= 1) {
|
||||
if (!w->flags.Test(WindowFlag::Timeout) || w->timeout_timer <= 1) {
|
||||
w->HandleButtonClick(WID_TE_DATE_FORWARD);
|
||||
w->SetDirty();
|
||||
|
||||
@@ -1416,7 +1444,7 @@ static MenuClickedProc * const _menu_clicked_procs[] = {
|
||||
/** Full blown container to make it behave exactly as we want :) */
|
||||
class NWidgetToolbarContainer : public NWidgetContainer {
|
||||
protected:
|
||||
uint spacers; ///< Number of spacer widgets in this toolbar
|
||||
uint spacers = 0; ///< Number of spacer widgets in this toolbar
|
||||
|
||||
public:
|
||||
NWidgetToolbarContainer() : NWidgetContainer(NWID_HORIZONTAL)
|
||||
@@ -1463,7 +1491,13 @@ public:
|
||||
child_wid->current_x = child_wid->smallest_x;
|
||||
}
|
||||
}
|
||||
_toolbar_width = nbuttons * this->smallest_x;
|
||||
|
||||
/* Exclude the switcher button which is not displayed when the toolbar fits the screen. When the switch is
|
||||
* displayed there will be no spacers anyway. */
|
||||
--nbuttons;
|
||||
|
||||
/* Allow space for all buttons, and include spacers at quarter the width of buttons. */
|
||||
_toolbar_width = nbuttons * this->smallest_x + this->spacers * this->smallest_x / 4;
|
||||
}
|
||||
|
||||
void AssignSizePosition(SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
|
||||
@@ -1485,7 +1519,9 @@ public:
|
||||
NWidgetBase *nwid = it->get();
|
||||
nwid->current_x = 0; /* Hide widget, it will be revealed in the next step. */
|
||||
if (nwid->type == NWID_SPACER) continue;
|
||||
lookup[dynamic_cast<NWidgetCore *>(nwid)->index] = std::distance(this->children.begin(), it);
|
||||
NWidgetCore *nwc = dynamic_cast<NWidgetCore *>(nwid);
|
||||
assert(nwc != nullptr);
|
||||
lookup[nwc->GetIndex()] = std::distance(this->children.begin(), it);
|
||||
}
|
||||
|
||||
/* Now assign the widgets to their rightful place */
|
||||
@@ -1877,20 +1913,21 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer {
|
||||
|
||||
/** Container for the scenario editor's toolbar */
|
||||
class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
|
||||
uint panel_widths[2]; ///< The width of the two panels (the text panel and date panel)
|
||||
std::array<uint, 2> panel_widths{}; ///< The width of the two panels (the text panel and date panel)
|
||||
|
||||
void SetupSmallestSize(Window *w) override
|
||||
{
|
||||
this->NWidgetToolbarContainer::SetupSmallestSize(w);
|
||||
|
||||
/* Find the size of panel_widths */
|
||||
uint i = 0;
|
||||
auto it = this->panel_widths.begin();
|
||||
for (const auto &child_wid : this->children) {
|
||||
if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue;
|
||||
|
||||
assert(i < lengthof(this->panel_widths));
|
||||
this->panel_widths[i++] = child_wid->current_x;
|
||||
assert(it != this->panel_widths.end());
|
||||
*it = child_wid->current_x;
|
||||
_toolbar_width += child_wid->current_x;
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1964,7 +2001,7 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
|
||||
};
|
||||
|
||||
/* If we can place all buttons *and* the panels, show them. */
|
||||
uint min_full_width = (lengthof(arrange_all) - lengthof(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
|
||||
size_t min_full_width = (lengthof(arrange_all) - std::size(this->panel_widths)) * this->smallest_x + this->panel_widths[0] + this->panel_widths[1];
|
||||
if (width >= min_full_width) {
|
||||
width -= this->panel_widths[0] + this->panel_widths[1];
|
||||
arrangable_count = lengthof(arrange_all);
|
||||
@@ -1974,7 +2011,7 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer {
|
||||
}
|
||||
|
||||
/* Otherwise don't show the date panel and if we can't fit half the buttons and the panels anymore, split the toolbar in two */
|
||||
uint min_small_width = (lengthof(arrange_switch) - lengthof(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
|
||||
size_t min_small_width = (lengthof(arrange_switch) - std::size(this->panel_widths)) * this->smallest_x / 2 + this->panel_widths[1];
|
||||
if (width > min_small_width) {
|
||||
width -= this->panel_widths[1];
|
||||
arrangable_count = lengthof(arrange_nopanel);
|
||||
@@ -2039,7 +2076,7 @@ struct MainToolbarWindow : Window {
|
||||
this->InitNested(0);
|
||||
|
||||
_last_started_action = CBF_NONE;
|
||||
CLRBITS(this->flags, WF_WHITE_BORDER);
|
||||
this->flags.Reset(WindowFlag::WhiteBorder);
|
||||
this->SetWidgetDisabledState(WID_TN_PAUSE, _networking && !_network_server); // if not server, disable pause button
|
||||
this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button
|
||||
PositionMainToolbar(this);
|
||||
@@ -2183,7 +2220,7 @@ struct MainToolbarWindow : Window {
|
||||
|
||||
/** Refresh the state of pause / game-speed on a regular interval.*/
|
||||
IntervalTimer<TimerWindow> refresh_interval = {std::chrono::milliseconds(30), [this](auto) {
|
||||
if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) {
|
||||
if (this->IsWidgetLowered(WID_TN_PAUSE) != _pause_mode.Any()) {
|
||||
this->ToggleWidgetLoweredState(WID_TN_PAUSE);
|
||||
this->SetWidgetDirty(WID_TN_PAUSE);
|
||||
}
|
||||
@@ -2211,7 +2248,7 @@ struct MainToolbarWindow : Window {
|
||||
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
|
||||
{
|
||||
if (!gui_scope) return;
|
||||
HandleZoomMessage(this, GetMainWindow()->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT);
|
||||
HandleZoomMessage(this, *GetMainWindow()->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT);
|
||||
}
|
||||
|
||||
static inline HotkeyList hotkeys{"maintoolbar", {
|
||||
@@ -2318,7 +2355,7 @@ static std::unique_ptr<NWidgetBase> MakeMainToolbar()
|
||||
hor->Add(std::make_unique<NWidgetSpacer>(0, 0));
|
||||
break;
|
||||
}
|
||||
auto leaf = std::make_unique<NWidgetLeaf>(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i);
|
||||
auto leaf = std::make_unique<NWidgetLeaf>(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, WidgetData{.sprite = toolbar_button_sprites[i]}, STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i);
|
||||
leaf->SetMinimalSize(20, 20);
|
||||
hor->Add(std::move(leaf));
|
||||
}
|
||||
@@ -2333,7 +2370,7 @@ static constexpr NWidgetPart _nested_toolbar_normal_widgets[] = {
|
||||
static WindowDesc _toolb_normal_desc(
|
||||
WDP_MANUAL, nullptr, 0, 0,
|
||||
WC_MAIN_TOOLBAR, WC_NONE,
|
||||
WDF_NO_FOCUS | WDF_NO_CLOSE,
|
||||
{WindowDefaultFlag::NoFocus, WindowDefaultFlag::NoClose},
|
||||
_nested_toolbar_normal_widgets,
|
||||
&MainToolbarWindow::hotkeys
|
||||
);
|
||||
@@ -2393,7 +2430,7 @@ static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
|
||||
ToolbarSwitchClick,
|
||||
};
|
||||
|
||||
enum MainToolbarEditorHotkeys {
|
||||
enum MainToolbarEditorHotkeys : int32_t {
|
||||
MTEHK_PAUSE,
|
||||
MTEHK_FASTFORWARD,
|
||||
MTEHK_SETTINGS,
|
||||
@@ -2426,7 +2463,7 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
this->InitNested(0);
|
||||
|
||||
_last_started_action = CBF_NONE;
|
||||
CLRBITS(this->flags, WF_WHITE_BORDER);
|
||||
this->flags.Reset(WindowFlag::WhiteBorder);
|
||||
PositionMainToolbar(this);
|
||||
DoZoomInOutWindow(ZOOM_NONE, this);
|
||||
}
|
||||
@@ -2440,18 +2477,20 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
{
|
||||
this->SetWidgetDisabledState(WID_TE_DATE_BACKWARD, _settings_game.game_creation.starting_year <= CalendarTime::MIN_YEAR);
|
||||
this->SetWidgetDisabledState(WID_TE_DATE_FORWARD, _settings_game.game_creation.starting_year >= CalendarTime::MAX_YEAR);
|
||||
this->SetWidgetDisabledState(WID_TE_ROADS, (GetRoadTypes(true) & ~_roadtypes_type) == ROADTYPES_NONE);
|
||||
this->SetWidgetDisabledState(WID_TE_TRAMS, (GetRoadTypes(true) & _roadtypes_type) == ROADTYPES_NONE);
|
||||
this->SetWidgetDisabledState(WID_TE_ROADS, !GetRoadTypes(true).Any(GetMaskForRoadTramType(RTT_ROAD)));
|
||||
this->SetWidgetDisabledState(WID_TE_TRAMS, !GetRoadTypes(true).Any(GetMaskForRoadTramType(RTT_TRAM)));
|
||||
|
||||
this->DrawWidgets();
|
||||
}
|
||||
|
||||
void SetStringParameters(WidgetID widget) const override
|
||||
std::string GetWidgetString(WidgetID widget, StringID stringid) const override
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_TE_DATE:
|
||||
SetDParam(0, TimerGameCalendar::ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
|
||||
break;
|
||||
return GetString(STR_JUST_DATE_LONG, TimerGameCalendar::ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
|
||||
|
||||
default:
|
||||
return this->Window::GetWidgetString(widget, stringid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2479,8 +2518,7 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_TE_DATE:
|
||||
SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 0, 1));
|
||||
size = GetStringBoundingBox(STR_JUST_DATE_LONG);
|
||||
size = GetStringBoundingBox(GetString(STR_JUST_DATE_LONG, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 0, 1)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2562,7 +2600,7 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
|
||||
/** Refresh the state of pause / game-speed on a regular interval.*/
|
||||
IntervalTimer<TimerWindow> refresh_interval = {std::chrono::milliseconds(30), [this](auto) {
|
||||
if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) {
|
||||
if (this->IsWidgetLowered(WID_TE_PAUSE) != _pause_mode.Any()) {
|
||||
this->ToggleWidgetLoweredState(WID_TE_PAUSE);
|
||||
this->SetDirty();
|
||||
}
|
||||
@@ -2581,7 +2619,7 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
|
||||
{
|
||||
if (!gui_scope) return;
|
||||
HandleZoomMessage(this, GetMainWindow()->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT);
|
||||
HandleZoomMessage(this, *GetMainWindow()->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT);
|
||||
}
|
||||
|
||||
void OnQueryTextFinished(std::optional<std::string> str) override
|
||||
@@ -2591,10 +2629,10 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
|
||||
TimerGameCalendar::Year value;
|
||||
if (!str->empty()) {
|
||||
value = atoi(str->c_str());
|
||||
value = TimerGameCalendar::Year{atoi(str->c_str())};
|
||||
} else {
|
||||
/* An empty string means revert to the default */
|
||||
value = CalendarTime::DEF_START_YEAR.base();
|
||||
value = TimerGameCalendar::Year{CalendarTime::DEF_START_YEAR.base()};
|
||||
}
|
||||
SetStartingYear(value);
|
||||
|
||||
@@ -2630,38 +2668,38 @@ struct ScenarioEditorToolbarWindow : Window {
|
||||
};
|
||||
|
||||
static constexpr NWidgetPart _nested_toolb_scen_inner_widgets[] = {
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetDataTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetDataTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetDataTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetDataTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_PAUSE), SetSpriteTip(SPR_IMG_PAUSE, STR_TOOLBAR_TOOLTIP_PAUSE_GAME),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_FAST_FORWARD), SetSpriteTip(SPR_IMG_FASTFORWARD, STR_TOOLBAR_TOOLTIP_FORWARD),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SETTINGS), SetSpriteTip(SPR_IMG_SETTINGS, STR_TOOLBAR_TOOLTIP_OPTIONS),
|
||||
NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_TE_SAVE), SetSpriteTip(SPR_IMG_SAVE, STR_SCENEDIT_TOOLBAR_SAVE_SCENARIO_LOAD_SCENARIO_TOOLTIP),
|
||||
NWidget(NWID_SPACER),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_SPACER), EndContainer(),
|
||||
NWidget(NWID_SPACER),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_TE_DATE_PANEL),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(2, 2, 2), SetPadding(1),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_TE_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE), SetTextStyle(TC_WHITE), SetAlignment(SA_CENTER), SetFill(0, 1),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_BACKWARD), SetSpriteTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_MOVE_THE_STARTING_DATE_BACKWARD_TOOLTIP), SetFill(0, 1),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_TE_DATE), SetToolTip(STR_SCENEDIT_TOOLBAR_SET_DATE_TOOLTIP), SetTextStyle(TC_WHITE), SetAlignment(SA_CENTER), SetFill(0, 1),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_DATE_FORWARD), SetSpriteTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_MOVE_THE_STARTING_DATE_FORWARD_TOOLTIP), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetDataTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SMALL_MAP), SetSpriteTip(SPR_IMG_SMALLMAP, STR_SCENEDIT_TOOLBAR_DISPLAY_MAP_TOWN_DIRECTORY_TOOLTIP),
|
||||
NWidget(NWID_SPACER),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_IN), SetSpriteTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_ZOOM_OUT), SetSpriteTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT),
|
||||
NWidget(NWID_SPACER),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetDataTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetDataTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetDataTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetDataTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetDataTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetDataTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetDataTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetDataTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_LAND_GENERATE), SetSpriteTip(SPR_IMG_LANDSCAPING, STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TOWN_GENERATE), SetSpriteTip(SPR_IMG_TOWN, STR_SCENEDIT_TOOLBAR_TOWN_GENERATION_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_INDUSTRY), SetSpriteTip(SPR_IMG_INDUSTRY, STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_ROADS), SetSpriteTip(SPR_IMG_BUILDROAD, STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION_TOOLTIP),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_TRAMS), SetSpriteTip(SPR_IMG_BUILDTRAMS, STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_WATER), SetSpriteTip(SPR_IMG_BUILDWATER, STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_TREES), SetSpriteTip(SPR_IMG_PLANTTREES, STR_SCENEDIT_TOOLBAR_PLANT_TREES_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_TE_SIGNS), SetSpriteTip(SPR_IMG_SIGN, STR_SCENEDIT_TOOLBAR_PLACE_SIGN_TOOLTIP),
|
||||
NWidget(NWID_SPACER),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetDataTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetDataTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_MUSIC_SOUND), SetSpriteTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_HELP), SetSpriteTip(SPR_IMG_QUERY, STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION),
|
||||
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_TE_SWITCH_BAR), SetSpriteTip(SPR_IMG_SWITCH_TOOLBAR, STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR),
|
||||
};
|
||||
|
||||
static std::unique_ptr<NWidgetBase> MakeScenarioToolbar()
|
||||
@@ -2676,7 +2714,7 @@ static constexpr NWidgetPart _nested_toolb_scen_widgets[] = {
|
||||
static WindowDesc _toolb_scen_desc(
|
||||
WDP_MANUAL, nullptr, 0, 0,
|
||||
WC_MAIN_TOOLBAR, WC_NONE,
|
||||
WDF_NO_FOCUS | WDF_NO_CLOSE,
|
||||
{WindowDefaultFlag::NoFocus, WindowDefaultFlag::NoClose},
|
||||
_nested_toolb_scen_widgets,
|
||||
&ScenarioEditorToolbarWindow::hotkeys
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user