HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
audio_device_widget.hpp
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
5#pragma once
6
7#include "selection_widget.hpp"
8#include "grid_widget.hpp"
9#include "../audio/audio_system.hpp"
10#include "../audio/audio_device.hpp"
11#include "../audio/audio_direction.hpp"
12#include "../label.hpp"
13#include <memory>
14#include <string>
15#include <array>
16#include <optional>
17#include <future>
18
19namespace hi::inline v1 {
20
23class audio_device_widget final : public widget {
24public:
25 using super = widget;
26
30
33 observable<audio_direction> direction = audio_direction::bidirectional;
34
35 virtual ~audio_device_widget();
36
37 audio_device_widget(gui_window& window, widget *parent, hi::audio_system &audio_system) noexcept;
38
40 [[nodiscard]] generator<widget *> children() const noexcept override;
41 widget_constraints const& set_constraints() noexcept override;
42 void set_layout(widget_layout const& layout) noexcept override;
43 void draw(draw_context const& context) noexcept override;
44 hitbox hitbox_test(point3 position) const noexcept override;
45 [[nodiscard]] bool accepts_keyboard_focus(keyboard_focus_group group) const noexcept override;
47private:
48 hi::audio_system *_audio_system;
49
52 std::unique_ptr<grid_widget> _grid_widget;
53
54 aarectangle _grid_rectangle;
55
58 selection_widget *_device_selection_widget = nullptr;
59
60 observable<std::vector<std::pair<std::string,label>>> _device_list;
61
62 hi::scoped_task<> _sync_device_list_task;
63
64 [[nodiscard]] hi::scoped_task<> sync_device_list() noexcept;
65};
66
67} // namespace hi::inline v1
STL namespace.
Definition audio_system.hpp:18
A return value for a generator-function.
Definition generator.hpp:28
Class which represents an axis-aligned rectangle.
Definition axis_aligned_rectangle.hpp:20
Draw context for drawing using the HikoGUI shaders.
Definition draw_context.hpp:52
Definition gui_window.hpp:39
Definition hitbox.hpp:16
A label consisting of localizable text and an icon.
Definition label.hpp:27
An observable value.
Definition observable.hpp:359
A scoped_task.
Definition scoped_task.hpp:28
Audio device configuration widget.
Definition audio_device_widget.hpp:23
observable< std::string > device_id
The audio device this widget has selected and is configuring.
Definition audio_device_widget.hpp:29
A GUI widget that lays out child-widgets in a grid with variable sized cells.
Definition grid_widget.hpp:37
A graphical control element that allows the user to choose only one of a predefined set of mutually e...
Definition selection_widget.hpp:37
An interactive graphical object as part of the user-interface.
Definition widget.hpp:39
Definition widget_constraints.hpp:13
Definition widget_layout.hpp:18