OpenTTD Source
20241108-master-g80f628063a
|
Scrollbar data structure. More...
#include <widget_type.h>
Public Types | |
enum | ScrollbarStepping { SS_RAW , SS_SMALL , SS_BIG } |
Stepping sizes when scrolling. More... | |
using | size_type = int32_t |
Public Member Functions | |
Scrollbar (bool is_vertical) | |
size_type | GetCount () const |
Gets the number of elements in the list. More... | |
size_type | GetCapacity () const |
Gets the number of visible elements of the scrollbar. More... | |
size_type | GetPosition () const |
Gets the position of the first visible element in the list. More... | |
bool | IsVisible (size_type item) const |
Checks whether given current item is visible in the list. More... | |
bool | IsVertical () const |
Is the scrollbar vertical or not? More... | |
void | SetStepSize (size_t stepsize) |
Set the distance to scroll when using the buttons or the wheel. More... | |
void | SetCount (size_t num) |
Sets the number of elements in the list. More... | |
void | SetCapacity (size_t capacity) |
Set the capacity of visible elements. More... | |
void | SetCapacityFromWidget (Window *w, WidgetID widget, int padding=0) |
Set capacity of visible elements from the size and resize properties of a widget. More... | |
bool | SetPosition (size_type position) |
Sets the position of the first visible element. More... | |
bool | UpdatePosition (int difference, ScrollbarStepping unit=SS_SMALL) |
Updates the position of the first visible element by the given amount. More... | |
void | ScrollTowards (size_type position) |
Scroll towards the given position; if the item is visible nothing happens, otherwise it will be shown either at the bottom or top of the window depending on where in the list it was. More... | |
size_type | GetScrolledRowFromWidget (int clickpos, const Window *const w, WidgetID widget, int padding=0, int line_height=-1) const |
Compute the row of a scrolled widget that a user clicked in. More... | |
template<typename Tcontainer > | |
auto | GetVisibleRangeIterators (Tcontainer &container) const |
Get a pair of iterators for the range of visible elements in a container. More... | |
template<typename Tcontainer > | |
auto | GetScrolledItemFromWidget (Tcontainer &container, int clickpos, const Window *const w, WidgetID widget, int padding=0, int line_height=-1) const |
Return an iterator pointing to the element of a scrolled widget that a user clicked in. More... | |
EventState | UpdateListPositionOnKeyPress (int &list_position, uint16_t keycode) const |
Update the given list position as if it were on this scroll bar when the given keycode was pressed. More... | |
Static Public Attributes | |
static constexpr size_type | max_size_type = std::numeric_limits<size_type>::max() |
static constexpr size_type | npos = max_size_type |
Private Attributes | |
const bool | is_vertical |
Scrollbar has vertical orientation. | |
size_type | count |
Number of elements in the list. | |
size_type | cap |
Number of visible elements of the scroll bar. | |
size_type | pos |
Index of first visible item of the list. | |
size_type | stepsize |
Distance to scroll, when pressing the buttons or using the wheel. | |
Scrollbar data structure.
Definition at line 694 of file widget_type.h.
Stepping sizes when scrolling.
Enumerator | |
---|---|
SS_RAW | Step in single units. |
SS_SMALL | Step in stepsize units. |
SS_BIG | Step in cap units. |
Definition at line 708 of file widget_type.h.
|
inline |
Gets the number of visible elements of the scrollbar.
Definition at line 731 of file widget_type.h.
References cap.
Referenced by DispatchMouseWheelEvent(), GoalListWindow::DrawListColumn(), NewGRFInspectWindow::DrawString(), GetVisibleRangeIterators(), HandleScrollbarHittest(), IsVisible(), ScrollTowards(), and ScriptDebugWindow::UpdateLogScroll().
|
inline |
Gets the number of elements in the list.
Definition at line 722 of file widget_type.h.
References count.
Referenced by DispatchMouseWheelEvent(), GetScrolledItemFromWidget(), GetScrolledRowFromWidget(), GetVisibleRangeIterators(), HandleScrollbarHittest(), NewGRFParametersWindow::OnInvalidateData(), StoryBookWindow::OnPaint(), ScrollRect(), and ScriptDebugWindow::UpdateLogScroll().
|
inline |
Gets the position of the first visible element in the list.
Definition at line 740 of file widget_type.h.
References pos.
Referenced by IndustryCargoesWindow::CalculatePositionInWidget(), ScriptDebugWindow::ChangeToScript(), TextfileWindow::CheckHyperlinkClick(), TimetableWindow::DrawArrivalDeparturePanel(), GoalListWindow::DrawListColumn(), NewGRFInspectWindow::DrawString(), TimetableWindow::DrawTimetablePanel(), GetScrolledRowFromWidget(), NWidgetMatrix::GetScrollOffsets(), GetVisibleRangeIterators(), HandleScrollbarHittest(), IsVisible(), ScrollRect(), ScrollTowards(), NWidgetMatrix::SetClicked(), TextfileWindow::UpdateHistoryScrollpos(), and ScriptDebugWindow::UpdateLogScroll().
|
inline |
Return an iterator pointing to the element of a scrolled widget that a user clicked in.
container | Container of elements represented by the scrollbar. |
clickpos | Vertical position of the mouse click (without taking scrolling into account). |
w | The window the click was in. |
widget | Widget number of the widget clicked in. |
padding | Amount of empty space between the widget edge and the top of the first row. Default value is 0 . |
line_height | Height of a single row. A negative value means using the vertical resize step of the widget. |
Definition at line 879 of file widget_type.h.
References GetCount(), and GetScrolledRowFromWidget().
Scrollbar::size_type Scrollbar::GetScrolledRowFromWidget | ( | int | clickpos, |
const Window *const | w, | ||
WidgetID | widget, | ||
int | padding = 0 , |
||
int | line_height = -1 |
||
) | const |
Compute the row of a scrolled widget that a user clicked in.
clickpos | Vertical position of the mouse click (without taking scrolling into account). |
w | The window the click was in. |
widget | Widget number of the widget clicked in. |
padding | Amount of empty space between the widget edge and the top of the first row. Default value is 0 . |
line_height | Height of a single row. A negative value means using the vertical resize step of the widget. |
Definition at line 2320 of file widget.cpp.
References GetCount(), GetPosition(), Window::GetRowFromWidget(), and pos.
Referenced by NetworkClientListWindow::GetButtonAtPoint(), and GetScrolledItemFromWidget().
|
inline |
Get a pair of iterators for the range of visible elements in a container.
container | Container of elements represented by the scrollbar. |
Definition at line 860 of file widget_type.h.
References GetCapacity(), GetCount(), and GetPosition().
Referenced by DrawEngineList(), and NetworkContentListWindow::DrawMatrix().
|
inline |
Is the scrollbar vertical or not?
Definition at line 759 of file widget_type.h.
References is_vertical.
Referenced by NWidgetMatrix::GetScrollOffsets(), ScrollRect(), SetCapacityFromWidget(), and NWidgetMatrix::SetCount().
|
inline |
Checks whether given current item is visible in the list.
item | to check |
Definition at line 750 of file widget_type.h.
References GetCapacity(), GetPosition(), and IsInsideBS().
Referenced by TimetableWindow::DrawArrivalDeparturePanel(), and OrdersWindow::OnInvalidateData().
|
inline |
Scroll towards the given position; if the item is visible nothing happens, otherwise it will be shown either at the bottom or top of the window depending on where in the list it was.
position | the position to scroll towards. |
Definition at line 841 of file widget_type.h.
References GetCapacity(), GetPosition(), and SetPosition().
Referenced by ReplaceVehicleWindow::GenerateLists(), OrdersWindow::OnInvalidateData(), NetworkContentListWindow::ScrollToSelected(), VehicleGroupWindow::SelectGroup(), NWidgetMatrix::SetClicked(), and NewGRFWindow::UpdateScrollBars().
|
inline |
Set the capacity of visible elements.
capacity | the new capacity |
Definition at line 794 of file widget_type.h.
References SetPosition().
Referenced by DepotWindow::OnResize(), SetCapacityFromWidget(), NWidgetMatrix::SetCount(), and DropdownWindow::UpdateSizeAndPosition().
Set capacity of visible elements from the size and resize properties of a widget.
w | Window. |
widget | Widget with size and resize properties. |
padding | Padding to subtract from the size. |
Definition at line 2394 of file widget.cpp.
References NWidgetBase::current_x, NWidgetBase::current_y, Window::GetWidget(), IsVertical(), NWidgetBase::resize_x, NWidgetBase::resize_y, and SetCapacity().
Referenced by ReplaceVehicleWindow::OnResize(), BuildBridgeWindow::OnResize(), BuildVehicleWindow::OnResize(), SelectCompanyLiveryWindow::OnResize(), DepotWindow::OnResize(), SaveLoadWindow::OnResize(), GSConfigWindow::OnResize(), GoalListWindow::OnResize(), PaymentRatesGraphWindow::OnResize(), IndustryProductionGraphWindow::OnResize(), VehicleGroupWindow::OnResize(), BuildIndustryWindow::OnResize(), IndustryDirectoryWindow::OnResize(), IndustryCargoesWindow::OnResize(), NetworkContentListWindow::OnResize(), NetworkGameWindow::OnResize(), NetworkClientListWindow::OnResize(), NewGRFInspectWindow::OnResize(), SpriteAlignerWindow::OnResize(), NewGRFParametersWindow::OnResize(), NewGRFWindow::OnResize(), SavePresetWindow::OnResize(), MessageHistoryWindow::OnResize(), OrdersWindow::OnResize(), PickerWindow::OnResize(), ScriptListWindow::OnResize(), ScriptSettingsWindow::OnResize(), ScriptDebugWindow::OnResize(), GameSettingsWindow::OnResize(), SignListWindow::OnResize(), CompanyStationsWindow::OnResize(), StationViewWindow::OnResize(), SelectStationWindow< T >::OnResize(), StoryBookWindow::OnResize(), SubsidyListWindow::OnResize(), TextfileWindow::OnResize(), TimetableWindow::OnResize(), TownDirectoryWindow::OnResize(), RefitWindow::OnResize(), VehicleListWindow::OnResize(), and VehicleDetailsWindow::OnResize().
|
inline |
Sets the number of elements in the list.
num | the number of elements in the list |
Definition at line 780 of file widget_type.h.
References SetPosition().
Referenced by NetworkContentListWindow::BuildContentList(), PickerWindow::BuildPickerClassList(), IndustryDirectoryWindow::BuildSortIndustriesList(), CompanyStationsWindow::BuildStationsList(), IndustryCargoesWindow::ComputeCargoDisplay(), IndustryCargoesWindow::ComputeIndustryDisplay(), ReplaceVehicleWindow::GenerateLists(), GoalListWindow::OnInvalidateData(), SpriteAlignerWindow::OnInvalidateData(), NewGRFParametersWindow::OnInvalidateData(), MessageHistoryWindow::OnInvalidateData(), OrdersWindow::OnInvalidateData(), ScriptDebugWindow::OnInvalidateData(), GameSettingsWindow::OnInvalidateData(), SelectStationWindow< T >::OnInvalidateData(), SubsidyListWindow::OnInvalidateData(), BuildVehicleWindow::OnPaint(), VehicleGroupWindow::OnPaint(), StationViewWindow::OnPaint(), StoryBookWindow::OnPaint(), TimetableWindow::OnPaint(), RefitWindow::OnPaint(), VehicleDetailsWindow::OnPaint(), StoryBookWindow::OnResize(), GSConfigWindow::RebuildVisibleSettings(), ScriptSettingsWindow::RebuildVisibleSettings(), StoryBookWindow::RefreshSelectedPage(), SavePresetWindow::SavePresetWindow(), ScriptListWindow::ScriptListWindow(), BuildAirportWindow::SelectFirstAvailableAirport(), VehicleGroupWindow::SelectGroup(), NWidgetMatrix::SetCount(), TextfileWindow::SetupScrollbars(), ScriptDebugWindow::UpdateLogScroll(), NewGRFWindow::UpdateScrollBars(), DropdownWindow::UpdateSizeAndPosition(), and IndustryProductionGraphWindow::UpdateStatistics().
|
inline |
Sets the position of the first visible element.
position | the position of the element |
Definition at line 810 of file widget_type.h.
Referenced by ReplaceVehicleWindow::OnRailRoadTypeChange(), ScrollTowards(), SetCapacity(), SetCount(), ScriptDebugWindow::UpdateLogScroll(), and UpdatePosition().
|
inline |
Set the distance to scroll when using the buttons or the wheel.
stepsize | Scrolling speed. |
Definition at line 768 of file widget_type.h.
References stepsize.
Referenced by ScriptDebugWindow::ScriptDebugWindow(), and NWidgetMatrix::SetCount().
EventState Scrollbar::UpdateListPositionOnKeyPress | ( | int & | list_position, |
uint16_t | keycode | ||
) | const |
Update the given list position as if it were on this scroll bar when the given keycode was pressed.
This does not update the actual position of this scroll bar, that is left to the caller. It does, however use the capacity and count of the scroll bar for the bounds and amount to scroll.
When the count is 0 or the return is ES_NOT_HANDLED, then the position is not updated. With WKC_UP and WKC_DOWN the position goes one up or down respectively. With WKC_PAGEUP and WKC_PAGEDOWN the position goes one capacity up or down respectively. With WKC_HOME the first position is selected and with WKC_END the last position is selected. This function ensures that pos is in the range [0..count).
list_position | The current position in the list. |
key_code | The pressed key code. |
Definition at line 2341 of file widget.cpp.
|
inline |
Updates the position of the first visible element by the given amount.
If the position would be too low or high it will be clamped appropriately
difference | the amount of change requested |
unit | The stepping unit of difference |
Definition at line 824 of file widget_type.h.
References cap, SetPosition(), SS_BIG, SS_SMALL, and stepsize.
Referenced by DispatchMouseWheelEvent(), and DropdownWindow::UpdateSizeAndPosition().