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 [[nodiscard]] box_constraints update_constraints() 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(point2i 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::shared_ptr<grid_widget> _grid_widget;
58 box_constraints _grid_constraints;
59 box_shape _grid_shape;
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
geometry/margins.hpp
Definition assert.hpp:18
2D constraints.
Definition box_constraints.hpp:25
Definition box_shape.hpp:15
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:39
A graphical control element that allows the user to choose only one of a predefined set of mutually e...
Definition selection_widget.hpp:44
An interactive graphical object as part of the user-interface.
Definition widget.hpp:46
widget(widget *parent) noexcept
widget * parent
Pointer to the parent widget.
Definition widget.hpp:51
The layout of a widget.
Definition widget_layout.hpp:41