HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
audio_device_widget.hpp
Go to the documentation of this file.
1// Copyright Take Vos 2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
9#pragma once
10
11#include "selection_widget.hpp"
12#include "grid_widget.hpp"
13#include "../audio/audio_system.hpp"
14#include "../audio/audio_device.hpp"
15#include "../audio/audio_direction.hpp"
16#include "../label.hpp"
17#include <memory>
18#include <string>
19#include <array>
20#include <optional>
21#include <future>
22
23namespace hi { inline namespace v1 {
24
28class audio_device_widget final : public widget {
29public:
30 using super = widget;
31
34 observer<std::string> device_id;
35
38 observer<audio_direction> direction = audio_direction::bidirectional;
39
40 virtual ~audio_device_widget();
41
42 audio_device_widget(widget *parent, hi::audio_system& audio_system) noexcept;
43
45 [[nodiscard]] generator<widget *> children() const noexcept override;
46 widget_constraints const& set_constraints(set_constraints_context const& context) noexcept override;
47 void set_layout(widget_layout const& context) noexcept override;
48 void draw(draw_context const& context) noexcept override;
49 hitbox hitbox_test(point3 position) const noexcept override;
50 [[nodiscard]] bool accepts_keyboard_focus(keyboard_focus_group group) const noexcept override;
52private:
53 hi::audio_system *_audio_system;
54
57 std::unique_ptr<grid_widget> _grid_widget;
58
59 aarectangle _grid_rectangle;
60
63 selection_widget *_device_selection_widget = nullptr;
64
65 observer<std::vector<std::pair<std::string, label>>> _device_list;
66
67 hi::scoped_task<> _sync_device_list_task;
68
69 [[nodiscard]] hi::scoped_task<> sync_device_list() noexcept;
70};
71
72}} // namespace hi::v1
Functionality for labels, text and icons.
Defines selection_widget.
Defines grid_widget.
STL namespace.
DOXYGEN BUG.
Definition algorithm.hpp:15
The HikoGUI namespace.
Definition ascii.hpp:19
Audio device configuration widget.
Definition audio_device_widget.hpp:28
observer< audio_direction > direction
The audio direction (input or output) of devices is should show.
Definition audio_device_widget.hpp:38
observer< std::string > device_id
The audio device this widget has selected and is configuring.
Definition audio_device_widget.hpp:34
A GUI widget that lays out child-widgets in a grid with variable sized cells.
Definition grid_widget.hpp:40
A graphical control element that allows the user to choose only one of a predefined set of mutually e...
Definition selection_widget.hpp:44
Definition set_constraints_context.hpp:15
An interactive graphical object as part of the user-interface.
Definition widget.hpp:45
widget(widget *parent) noexcept
widget * parent
Pointer to the parent widget.
Definition widget.hpp:50
The constraints of a widget.
Definition widget_constraints.hpp:26
The layout of a widget.
Definition widget_layout.hpp:40