Source: session/developer_overlay/DeveloperOverlayControlDropDown.js

/**
 * This class sets up a dropdown in the developer overlay and assigns its specific handler.
 */
class DeveloperOverlayControlDropDown extends DeveloperOverlayControl
{
	constructor(handler, i)
	{
		super(handler, i);

		this.dropdown = Engine.GetGUIObjectByName("dev_command_dropdown[" + i + "]");
		this.dropdown.onSelectionChange = this.onSelectionChange.bind(this);
		this.dropdown.hidden = false;
	}

	onSelectionChange()
	{
		this.handler.onSelectionChange(this.dropdown.selected);
		this.update();
	}

	update()
	{
		this.dropdown.list = this.handler.values().map(e => e.label);
		this.dropdown.list_data = this.handler.values().map(e => e.value);
		if (this.handler.selected && this.dropdown.selected != this.handler.selected())
			this.dropdown.selected = this.handler.selected();
		if (this.handler.enabled)
			this.dropdown.enabled = this.handler.enabled();
	}

	setHidden(hidden)
	{
		if (hidden)
			unregisterSimulationUpdateHandler(this.updater);
		else
			registerSimulationUpdateHandler(this.updater);
	}
}