OpenTTD Source 20241224-master-gf74b0cf984
dropdown.cpp File Reference

Implementation of the dropdown widget. More...

#include "stdafx.h"
#include "dropdown_type.h"
#include "dropdown_func.h"
#include "dropdown_common_type.h"
#include "strings_func.h"
#include "timer/timer.h"
#include "timer/timer_window.h"
#include "window_gui.h"
#include "window_func.h"
#include "zoom_func.h"
#include "widgets/dropdown_widget.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  DropdownWindow
 Drop-down menu window. More...
 

Functions

std::unique_ptr< DropDownListItemMakeDropDownListDividerItem ()
 
std::unique_ptr< DropDownListItemMakeDropDownListStringItem (StringID str, int value, bool masked, bool shaded)
 
std::unique_ptr< DropDownListItemMakeDropDownListStringItem (const std::string &str, int value, bool masked, bool shaded)
 
std::unique_ptr< DropDownListItemMakeDropDownListIconItem (SpriteID sprite, PaletteID palette, StringID str, int value, bool masked, bool shaded)
 
std::unique_ptr< DropDownListItemMakeDropDownListIconItem (const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked, bool shaded)
 
std::unique_ptr< DropDownListItemMakeDropDownListCheckedItem (bool checked, StringID str, int value, bool masked, bool shaded)
 
void ReplaceDropDownList (Window *parent, DropDownList &&list)
 
Dimension GetDropDownListDimension (const DropDownList &list)
 Determine width and height required to fully display a DropDownList.
 
void ShowDropDownListAt (Window *w, DropDownList &&list, int selected, WidgetID button, Rect wi_rect, Colours wi_colour, bool instant_close, bool persist)
 Show a drop down list.
 
void ShowDropDownList (Window *w, DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close, bool persist)
 Show a drop down list.
 
void ShowDropDownMenu (Window *w, std::span< const StringID > strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width)
 Show a dropdown menu window near a widget of the parent window.
 

Variables

static constexpr NWidgetPart _nested_dropdown_menu_widgets []
 
static WindowDesc _dropdown_desc (WDP_MANUAL, nullptr, 0, 0, WC_DROPDOWN_MENU, WC_NONE, WDF_NO_FOCUS, _nested_dropdown_menu_widgets)
 

Detailed Description

Implementation of the dropdown widget.

Definition in file dropdown.cpp.

Function Documentation

◆ GetDropDownListDimension()

Dimension GetDropDownListDimension ( const DropDownList list)

Determine width and height required to fully display a DropDownList.

Parameters
listThe list.
Returns
Dimension required to display the list.

Definition at line 363 of file dropdown.cpp.

References WidgetDimensions::dropdowntext, RectPadding::Horizontal(), and WidgetDimensions::scaled.

Referenced by DropdownWindow::UpdateSizeAndPosition(), BuildVehicleWindow::UpdateWidgetSize(), VehicleGroupWindow::UpdateWidgetSize(), GameOptionsWindow::UpdateWidgetSize(), and VehicleListWindow::UpdateWidgetSize().

◆ MakeDropDownListCheckedItem()

std::unique_ptr< DropDownListItem > MakeDropDownListCheckedItem ( bool  checked,
StringID  str,
int  value,
bool  masked,
bool  shaded 
)

Definition at line 50 of file dropdown.cpp.

◆ MakeDropDownListDividerItem()

std::unique_ptr< DropDownListItem > MakeDropDownListDividerItem ( )

Definition at line 25 of file dropdown.cpp.

◆ MakeDropDownListIconItem() [1/2]

std::unique_ptr< DropDownListItem > MakeDropDownListIconItem ( const Dimension dim,
SpriteID  sprite,
PaletteID  palette,
StringID  str,
int  value,
bool  masked,
bool  shaded 
)

Definition at line 45 of file dropdown.cpp.

◆ MakeDropDownListIconItem() [2/2]

std::unique_ptr< DropDownListItem > MakeDropDownListIconItem ( SpriteID  sprite,
PaletteID  palette,
StringID  str,
int  value,
bool  masked,
bool  shaded 
)

Definition at line 40 of file dropdown.cpp.

◆ MakeDropDownListStringItem() [1/2]

std::unique_ptr< DropDownListItem > MakeDropDownListStringItem ( const std::string &  str,
int  value,
bool  masked,
bool  shaded 
)

Definition at line 35 of file dropdown.cpp.

◆ MakeDropDownListStringItem() [2/2]

std::unique_ptr< DropDownListItem > MakeDropDownListStringItem ( StringID  str,
int  value,
bool  masked,
bool  shaded 
)

Definition at line 30 of file dropdown.cpp.

◆ ReplaceDropDownList()

void ReplaceDropDownList ( Window parent,
DropDownList &&  list 
)

Definition at line 352 of file dropdown.cpp.

◆ ShowDropDownList()

void ShowDropDownList ( Window w,
DropDownList &&  list,
int  selected,
WidgetID  button,
uint  width,
bool  instant_close,
bool  persist 
)

Show a drop down list.

Parameters
wParent window for the list.
listPrepopulated DropDownList.
selectedThe initially selected list item.
buttonThe widget within the parent window that is used to determine the list's location.
widthOverride the minimum width determined by the selected widget and list contents.
instant_closeSet to true if releasing mouse button should close the list regardless of where the cursor is.
persistSet if this dropdown should stay open after an option is selected.

Definition at line 404 of file dropdown.cpp.

References _current_text_dir, NWidgetCore::colour, NWidgetCore::disp_flags, Window::GetWidget(), ND_DROPDOWN_ACTIVE, NWID_BUTTON_DROPDOWN, ScaleGUITrad(), NWidgetBase::SetDirty(), NWidgetCore::SetLowered(), ShowDropDownListAt(), TD_RTL, and NWidgetBase::type.

Referenced by BuildAirportWindow::OnClick(), ReplaceVehicleWindow::OnClick(), BuildVehicleWindow::OnClick(), GenerateLandscapeWindow::OnClick(), CreateScenarioWindow::OnClick(), VehicleGroupWindow::OnClick(), IndustryDirectoryWindow::OnClick(), IndustryCargoesWindow::OnClick(), MusicTrackSelectionWindow::OnClick(), NetworkStartServerWindow::OnClick(), NetworkClientListWindow::OnClick(), NewGRFWindow::OnClick(), OrdersWindow::OnClick(), GameOptionsWindow::OnClick(), GameSettingsWindow::OnClick(), CompanyStationsWindow::OnClick(), StoryBookWindow::OnClick(), TextfileWindow::OnClick(), VehicleListWindow::OnClick(), PopupMainToolbarMenu(), SetDateWindow::ShowDateDropDown(), ShowDropDownMenu(), and ToolbarOptionsClick().

◆ ShowDropDownListAt()

void ShowDropDownListAt ( Window w,
DropDownList &&  list,
int  selected,
WidgetID  button,
Rect  wi_rect,
Colours  wi_colour,
bool  instant_close,
bool  persist 
)

Show a drop down list.

Parameters
wParent window for the list.
listPrepopulated DropDownList.
selectedThe initially selected list item.
buttonThe widget which is passed to Window::OnDropdownSelect and OnDropdownClose. Unless you override those functions, this should be then widget index of the dropdown button.
wi_rectCoord of the parent drop down button, used to position the dropdown menu.
instant_closeSet to true if releasing mouse button should close the list regardless of where the cursor is.
persistSet if this dropdown should stay open after an option is selected.

Definition at line 386 of file dropdown.cpp.

References CloseWindowByClass(), and WC_DROPDOWN_MENU.

Referenced by GSConfigWindow::OnClick(), NewGRFParametersWindow::OnClick(), ScriptSettingsWindow::OnClick(), GameSettingsWindow::OnClick(), NetworkClientListWindow::OnClickClientAdmin(), NetworkClientListWindow::OnClickCompanyAdmin(), and ShowDropDownList().

◆ ShowDropDownMenu()

void ShowDropDownMenu ( Window w,
std::span< const StringID strings,
int  selected,
WidgetID  button,
uint32_t  disabled_mask,
uint32_t  hidden_mask,
uint  width 
)

Show a dropdown menu window near a widget of the parent window.

The result code of the items is their index in the strings list.

Parameters
wParent window that wants the dropdown menu.
stringsMenu list.
selectedIndex of initial selected item.
buttonButton widget number of the parent window w that wants the dropdown menu.
disabled_maskBitmask for disabled items (items with their bit set are displayed, but not selectable in the dropdown list).
hidden_maskBitmask for hidden items (items with their bit set are not copied to the dropdown list).
widthMinimum width of the dropdown menu.

Definition at line 441 of file dropdown.cpp.

References HasBit(), and ShowDropDownList().

Referenced by DisplayVehicleSortDropDown(), ReplaceVehicleWindow::OnClick(), BuildBridgeWindow::OnClick(), GenerateLandscapeWindow::OnClick(), VehicleGroupWindow::OnClick(), IndustryDirectoryWindow::OnClick(), OrdersWindow::OnClick(), CompanyStationsWindow::OnClick(), StationViewWindow::OnClick(), TownDirectoryWindow::OnClick(), VehicleListWindow::OnClick(), and VehicleDetailsWindow::OnClick().

Variable Documentation

◆ _nested_dropdown_menu_widgets

constexpr NWidgetPart _nested_dropdown_menu_widgets[]
staticconstexpr
Initial value:
= {
}
@ WID_DM_ITEMS
Panel showing the dropdown items.
@ WID_DM_SCROLL
Scrollbar.
@ WID_DM_SHOW_SCROLL
Hide scrollbar if too few items.
constexpr NWidgetPart SetScrollbar(WidgetID index)
Attach a scrollbar to a widget.
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
@ NWID_HORIZONTAL
Horizontal container.
Definition widget_type.h:75
@ WWT_PANEL
Simple depressed panel.
Definition widget_type.h:50
@ NWID_VSCROLLBAR
Vertical scrollbar.
Definition widget_type.h:85
@ NWID_SELECTION
Stacked widgets, only one visible at a time (eg in a panel with tabs).
Definition widget_type.h:80

Definition at line 55 of file dropdown.cpp.