HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Data Fields
hi::v1::tab_widget Class Referencefinal

#include <hikogui/widgets/tab_widget.hpp>

Inheritance diagram for hi::v1::tab_widget:
hi::v1::widget std::enable_shared_from_this< widget >

Public Types

using super = widget
 
using delegate_type = tab_delegate
 

Public Member Functions

 tab_widget (widget *parent, std::shared_ptr< delegate_type > delegate) noexcept
 Construct a tab widget with a delegate.
 
 tab_widget (widget *parent, different_from< std::shared_ptr< delegate_type > > auto &&value) noexcept
 Construct a tab widget with an observer value.
 
template<typename WidgetType , typename Key , typename... Args>
WidgetType & make_widget (Key const &key, Args &&...args)
 Make and add a child widget.
 
- Public Member Functions inherited from hi::v1::widget
 widget (widget *parent) noexcept
 
 widget (const widget &)=delete
 
widgetoperator= (const widget &)=delete
 
 widget (widget &&)=delete
 
widgetoperator= (widget &&)=delete
 
generator< widget & > children (bool include_invisible) noexcept
 
virtual hitbox hitbox_test_from_parent (point2i position) const noexcept
 Call hitbox_test from a parent widget.
 
virtual hitbox hitbox_test_from_parent (point2i position, hitbox sibling_hitbox) const noexcept
 Call hitbox_test from a parent widget.
 
virtual bool accepts_keyboard_focus (keyboard_focus_group group) const noexcept
 Check if the widget will accept keyboard focus.
 
widget_layout const & layout () const noexcept
 Get the current layout for this widget.
 
virtual bool process_event (gui_event const &event) const noexcept
 
virtual void request_redraw () const noexcept
 Request the widget to be redrawn on the next frame.
 
virtual bool handle_event (gui_event const &event) noexcept
 Handle command.
 
virtual bool handle_event_recursive (gui_event const &event, std::vector< widget_id > const &reject_list=std::vector< widget_id >{}) noexcept
 Handle command recursive.
 
widget_id find_first_widget (keyboard_focus_group group) const noexcept
 
widget_id find_last_widget (keyboard_focus_group group) const noexcept
 
bool is_first (keyboard_focus_group group) const noexcept
 Is this widget the first widget in the parent container.
 
bool is_last (keyboard_focus_group group) const noexcept
 Is this widget the last widget in the parent container.
 
virtual void scroll_to_show (hi::aarectanglei rectangle) noexcept
 Scroll to show the given rectangle on the window.
 
void scroll_to_show () noexcept
 Scroll to show the important part of the widget.
 
std::vector< widget_id > parent_chain () const noexcept
 Get a list of parents of a given widget.
 
virtual gui_window * window () const noexcept
 
virtual hi::theme const & theme () const noexcept
 
virtual gfx_surface const * surface () const noexcept
 
virtual color background_color () const noexcept
 
virtual color foreground_color () const noexcept
 
virtual color focus_color () const noexcept
 
virtual color accent_color () const noexcept
 
virtual color label_color () const noexcept
 
- Public Member Functions inherited from std::enable_shared_from_this< widget >
enable_shared_from_this (T... args)
 
operator= (T... args)
 
shared_from_this (T... args)
 
~enable_shared_from_this (T... args)
 

Data Fields

std::shared_ptr< delegate_typedelegate
 
- Data Fields inherited from hi::v1::widget
widgetparent = nullptr
 Pointer to the parent widget.
 
widget_id id = {}
 The numeric identifier of a widget.
 
observer< widget_modemode = widget_mode::enabled
 The widget mode.
 
observer< bool > hover = false
 Mouse cursor is hovering over the widget.
 
observer< bool > focus = false
 The widget has keyboard focus.
 
int semantic_layer = 0
 The draw layer of the widget.
 
int logical_layer = 0
 The logical layer of the widget.
 
observer< extent2iminimum = extent2i{}
 The minimum size this widget is allowed to be.
 
observer< extent2imaximum = extent2i::large()
 The maximum size this widget is allowed to be.
 

Detailed Description

A graphical element that shows only one of a predefined set of mutually exclusive child widgets.

A tab widget is generally controlled by a toolbar_tab_button_widget or another selection widget.

In the following example we create three tabs on the window which observes a value controlled by a set of toolbar tab buttons. Each tab is configured with a different value: 0, 1 and 2.

auto& tab_view = window->content().make_widget<tab_widget>("A1", value);
tab_view.make_widget<label_widget>(0, tr("one"), alignment::middle_center());
tab_view.make_widget<label_widget>(1, tr("two"), alignment::middle_center());
tab_view.make_widget<label_widget>(2, tr("three"), alignment::middle_center());
Note
A tab_button is not directly controlled by a toolbar_tab_button_widget. This is accomplished by sharing a delegate or a observer between the toolbar tab button and the tab widget.

Constructor & Destructor Documentation

◆ tab_widget() [1/2]

hi::v1::tab_widget::tab_widget ( widget * parent,
std::shared_ptr< delegate_type > delegate )
noexcept

Construct a tab widget with a delegate.

Parameters
parentThe owner of this widget.
delegateThe delegate that will control this widget.

◆ tab_widget() [2/2]

hi::v1::tab_widget::tab_widget ( widget * parent,
different_from< std::shared_ptr< delegate_type > > auto && value )
inlinenoexcept

Construct a tab widget with an observer value.

Parameters
parentThe owner of this widget.
valueThe value or observer value to monitor for which child widget to display.

Member Function Documentation

◆ make_widget()

template<typename WidgetType , typename Key , typename... Args>
WidgetType & hi::v1::tab_widget::make_widget ( Key const & key,
Args &&... args )
inline

Make and add a child widget.

Precondition
A widget with the same value must not have been added before.
Template Parameters
WidgetTypeThe type of the widget to create.
KeyThe type of the key, must be convertible to std::size_t.
Parameters
keyThe value used as a key to select this newly added widget.
argsThe arguments to pass to the constructor of widget to add.

The documentation for this class was generated from the following file: