opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
liboscar
ui
tabs
tab_registry.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <
liboscar/ui/tabs/tab.h
>
4
#include <
liboscar/ui/tabs/tab_registry_entry.h
>
5
#include <
liboscar/utilities/c_string_view.h
>
6
7
#include <concepts>
8
#include <cstddef>
9
#include <memory>
10
#include <optional>
11
#include <string_view>
12
13
namespace
osc
{
class
Widget; }
14
15
namespace
osc
16
{
17
template
<
typename
T>
18
concept
StandardRegisterableTab
=
19
std::derived_from<T, Tab>
and
20
std::constructible_from<T, Widget*>
and
21
requires
(
T
) {
22
{ T::id() } -> std::same_as<CStringView>;
23
};
24
25
// container for alphabetically-sorted tab entries
26
class
TabRegistry
final
{
27
public
:
28
using
value_type
=
TabRegistryEntry
;
29
using
size_type
=
size_t
;
30
using
iterator
=
const
TabRegistryEntry
*;
31
using
const_iterator
=
const
TabRegistryEntry
*;
32
33
TabRegistry
();
34
TabRegistry
(
const
TabRegistry
&) =
delete
;
35
TabRegistry
(
TabRegistry
&&)
noexcept
;
36
TabRegistry
&
operator
=(
const
TabRegistry
&) =
delete
;
37
TabRegistry
&
operator
=(
TabRegistry
&&)
noexcept
;
38
~
TabRegistry
()
noexcept
;
39
40
void
register_tab
(
const
TabRegistryEntry
&);
41
42
template
<
StandardRegisterableTab
T
>
43
void
register_tab
()
44
{
45
register_tab
(
TabRegistryEntry
{
46
T::id(),
47
[](
Widget
* parent) {
return
std::make_unique<T>(parent); },
48
});
49
}
50
51
const_iterator
begin
()
const
;
52
const_iterator
end
()
const
;
53
[[
nodiscard
]]
bool
empty
()
const
{
return
size
() <= 0; }
54
size_type
size
()
const
;
55
TabRegistryEntry
operator[]
(
size_type
)
const
;
56
std::optional<TabRegistryEntry>
find_by_name
(std::string_view)
const
;
57
58
private
:
59
class
Impl
;
60
std::unique_ptr<Impl> impl_;
61
};
62
}
c_string_view.h
osc::TabRegistryEntry
Definition
tab_registry_entry.h:14
osc::TabRegistry
Definition
tab_registry.h:26
osc::TabRegistry::find_by_name
std::optional< TabRegistryEntry > find_by_name(std::string_view) const
osc::TabRegistry::operator[]
TabRegistryEntry operator[](size_type) const
osc::TabRegistry::empty
bool empty() const
Definition
tab_registry.h:53
osc::TabRegistry::TabRegistry
TabRegistry()
osc::TabRegistry::size_type
size_t size_type
Definition
tab_registry.h:29
osc::TabRegistry::size
size_type size() const
osc::TabRegistry::TabRegistry
TabRegistry(const TabRegistry &)=delete
osc::TabRegistry::end
const_iterator end() const
osc::TabRegistry::TabRegistry
TabRegistry(TabRegistry &&) noexcept
osc::TabRegistry::begin
const_iterator begin() const
osc::TabRegistry::register_tab
void register_tab()
Definition
tab_registry.h:43
osc::Widget
Definition
widget.h:26
osc::StandardRegisterableTab
Definition
tab_registry.h:18
osc
Definition
custom_decoration_generator.h:5
osc::Key::T
@ T
osc::to
constexpr U to(T &&value)
Definition
conversion.h:56
osc::and
and
Definition
algorithms.h:158
tab.h
tab_registry_entry.h
Generated by
1.9.8