3#include "di/container/tree/tree_set.h"
4#include "di/reflect/prelude.h"
5#include "di/vocab/pointer/box.h"
28 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<LayoutEntry>) {
29 return di::make_fields<
"LayoutEntry">(
58 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<LayoutNode>) {
59 return di::make_fields<
"LayoutNode">(
71 -> di::Tuple<di::Span<u32 const>, di::Span<u32 const>>;
81 di::Optional<di::Path>
cwd {};
92constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<ResizeDirection>) {
94 return di::make_enumerators<
"ResizeDirection">(di::enumerator<
"Left",
Left>, di::enumerator<
"Right",
Right>,
95 di::enumerator<
"Top",
Top>, di::enumerator<
"Bottom",
Bottom>);
104 constexpr auto empty() const ->
bool {
return m_children.empty(); }
105 constexpr auto single() const ->
bool {
return m_children.size() == 1; }
111 di::FunctionRef<di::Result<di::Box<Pane>>(u64, di::Optional<di::Path>,
Size const&)> make_pane)
112 -> di::Result<LayoutGroup>;
118 -> di::Tuple<di::Box<LayoutNode>, di::Optional<LayoutEntry&>, di::Optional<di::Box<Pane>&>>;
129 auto layout(
Size const& size, u32 row_offset, u32 col_offset) -> di::Box<LayoutNode>;
140 i64 original_size_available, i64 new_size_available);
141 void validate_layout();
constexpr auto empty() const -> bool
Definition layout.h:104
auto resize(LayoutNode &root, Pane *pane, ResizeDirection direction, i32 amount_in_cells) -> bool
Definition layout.cpp:406
auto split(Size const &size, u32 row_offset, u32 col_offset, Pane *reference, Direction direction) -> di::Tuple< di::Box< LayoutNode >, di::Optional< LayoutEntry & >, di::Optional< di::Box< Pane > & > >
Definition layout.cpp:231
friend struct FromJsonV1
Definition layout.h:136
constexpr auto relative_size() -> i64 &
Definition layout.h:106
constexpr auto relative_size() const -> i64
Definition layout.h:107
constexpr auto direction() const -> Direction
Definition layout.h:103
static auto from_json_v1(json::v1::PaneLayoutNode const &json, Size const &size, di::FunctionRef< di::Result< di::Box< Pane > >(u64, di::Optional< di::Path >, Size const &)> make_pane) -> di::Result< LayoutGroup >
Definition layout.cpp:731
friend struct FindPaneInLayoutGroup
Definition layout.h:134
friend struct MakePane
Definition layout.h:137
auto as_json_v1() const -> json::v1::PaneLayoutNode
Definition layout.cpp:670
auto layout(Size const &size, u32 row_offset, u32 col_offset) -> di::Box< LayoutNode >
Definition layout.cpp:520
friend struct ToJsonV1
Definition layout.h:135
auto remove_pane(Pane *pane) -> di::Box< Pane >
Definition layout.cpp:300
constexpr auto single() const -> bool
Definition layout.h:105
Definition layout_json.h:10
Definition clipboard.h:10
Direction
Definition direction.h:7
@ None
Definition direction.h:8
constexpr auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< ClipboardMode >)
Definition clipboard.h:21
@ Right
Definition key.h:70
@ Left
Definition key.h:69
constexpr auto max_layout_precision
Definition layout.h:74
ResizeDirection
Definition layout.h:85
@ Bottom
Definition layout.h:89
@ Top
Definition layout.h:88
auto border_intersections(di::Variant< di::Box< LayoutNode >, LayoutEntry > const &layout) -> di::Tuple< di::Span< u32 const >, di::Span< u32 const > >
Definition layout.cpp:630
LayoutNode * parent
Definition layout.h:22
LayoutPane const * ref
Definition layout.h:23
Size size
Definition layout.h:21
u32 row
Definition layout.h:19
auto operator==(LayoutEntry const &) const -> bool=default
Pane * pane
Definition layout.h:24
u32 col
Definition layout.h:20
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< LayoutEntry >)
Definition layout.h:28
Direction direction
Definition layout.h:45
auto hit_test_horizontal_line(u32 row, u32 col_start, u32 col_end) -> di::TreeSet< LayoutEntry * >
Definition layout.cpp:144
LayoutGroup * group
Definition layout.h:44
di::Vector< u32 > start_intersections
Definition layout.h:47
u32 row
Definition layout.h:39
auto find_pane_by_id(u64 id) -> di::Optional< LayoutEntry & >
Definition layout.cpp:76
di::Vector< di::Variant< di::Box< LayoutNode >, LayoutEntry > > children
Definition layout.h:42
auto hit_test_vertical_line(u32 col, u32 row_start, u32 row_end) -> di::TreeSet< LayoutEntry * >
Definition layout.cpp:123
di::Vector< u32 > end_intersections
Definition layout.h:49
auto hit_test(u32 row, u32 col) -> di::Optional< LayoutEntry & >
Definition layout.cpp:99
LayoutNode * parent
Definition layout.h:43
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< LayoutNode >)
Definition layout.h:58
u32 col
Definition layout.h:40
auto find_pane(Pane *pane) -> di::Optional< LayoutEntry & >
Definition layout.cpp:56
Size size
Definition layout.h:41
u64 pane_id
Definition layout.h:80
i64 relative_size
Definition layout.h:82
di::Optional< di::Path > cwd
Definition layout.h:81
di::Box< Pane > pane
Definition layout.h:79
Definition layout_json.h:36