Source: gamesetup/Pages/GameSetupPage/GameSettings/Single/Dropdowns/MapType.js

/**
 * Maptype design:
 * Scenario maps have fixed terrain and all settings predetermined.
 * Skirmish maps have fixed terrain, playercount but settings are free.
 * For random maps, settings are fully determined by the player and the terrain is generated based on them.
 */
GameSettingControls.MapType = class MapType extends GameSettingControlDropdown
{
	constructor(...args)
	{
		super(...args);

		this.dropdown.list = g_MapTypes.Title;
		this.dropdown.list_data = g_MapTypes.Name;

	}

	onSettingsLoaded()
	{
		if (this.gameSettingsController.guiData.lockSettings?.map)
			this.setEnabled(false);
		else
		{
			g_GameSettings.map.watch(() => this.render(), ["type"]);

			// Select a default map type if none are currently chosen.
			// This in cascade will select a default filter and a default map.
			if (!g_GameSettings.map.type)
				g_GameSettings.map.setType(g_MapTypes.Name[g_MapTypes.Default]);
		}

		this.render();
	}

	onHoverChange()
	{
		this.dropdown.tooltip = g_MapTypes.Description[this.dropdown.hovered] || this.Tooltip;
	}

	render()
	{
		if (!this.enabled)
		{
			if (!this.hidden)
				this.setHidden(true);
			return;
		}

		this.setSelectedValue(g_GameSettings.map.type);
	}

	getAutocompleteEntries()
	{
		return g_MapTypes.Title;
	}

	onSelectionChange(itemIdx)
	{
		g_GameSettings.map.setType(g_MapTypes.Name[itemIdx]);
		this.gameSettingsController.setNetworkInitAttributes();
	}
};

GameSettingControls.MapType.prototype.TitleCaption =
	translate("Map Type");

GameSettingControls.MapType.prototype.Tooltip =
	translate("Select a map type.");

GameSettingControls.MapType.prototype.AutocompleteOrder = 0;