1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
"""
Command line layout definitions
-------------------------------
The layout of a command line interface is defined by a Container instance.
There are two main groups of classes here. Containers and controls:
- A container can contain other containers or controls, it can have multiple
children and it decides about the dimensions.
- A control is responsible for rendering the actual content to a screen.
A control can propose some dimensions, but it's the container who decides
about the dimensions -- or when the control consumes more space -- which part
of the control will be visible.
Container classes::
- Container (Abstract base class)
|- HSplit (Horizontal split)
|- VSplit (Vertical split)
|- FloatContainer (Container which can also contain menus and other floats)
`- Window (Container which contains one actual control
Control classes::
- UIControl (Abstract base class)
|- FormattedTextControl (Renders formatted text, or a simple list of text fragments)
`- BufferControl (Renders an input buffer.)
Usually, you end up wrapping every control inside a `Window` object, because
that's the only way to render it in a layout.
There are some prepared toolbars which are ready to use::
- SystemToolbar (Shows the 'system' input buffer, for entering system commands.)
- ArgToolbar (Shows the input 'arg', for repetition of input commands.)
- SearchToolbar (Shows the 'search' input buffer, for incremental search.)
- CompletionsToolbar (Shows the completions of the current buffer.)
- ValidationToolbar (Shows validation errors of the current buffer.)
And one prepared menu:
- CompletionsMenu
"""
from __future__ import annotations
from .containers import (
AnyContainer,
ColorColumn,
ConditionalContainer,
Container,
DynamicContainer,
Float,
FloatContainer,
HorizontalAlign,
HSplit,
ScrollOffsets,
VerticalAlign,
VSplit,
Window,
WindowAlign,
WindowRenderInfo,
is_container,
to_container,
to_window,
)
from .controls import (
BufferControl,
DummyControl,
FormattedTextControl,
SearchBufferControl,
UIContent,
UIControl,
)
from .dimension import (
AnyDimension,
D,
Dimension,
is_dimension,
max_layout_dimensions,
sum_layout_dimensions,
to_dimension,
)
from .layout import InvalidLayoutError, Layout, walk
from .margins import (
ConditionalMargin,
Margin,
NumberedMargin,
PromptMargin,
ScrollbarMargin,
)
from .menus import CompletionsMenu, MultiColumnCompletionsMenu
from .scrollable_pane import ScrollablePane
__all__ = [
# Layout.
"Layout",
"InvalidLayoutError",
"walk",
# Dimensions.
"AnyDimension",
"Dimension",
"D",
"sum_layout_dimensions",
"max_layout_dimensions",
"to_dimension",
"is_dimension",
# Containers.
"AnyContainer",
"Container",
"HorizontalAlign",
"VerticalAlign",
"HSplit",
"VSplit",
"FloatContainer",
"Float",
"WindowAlign",
"Window",
"WindowRenderInfo",
"ConditionalContainer",
"ScrollOffsets",
"ColorColumn",
"to_container",
"to_window",
"is_container",
"DynamicContainer",
"ScrollablePane",
# Controls.
"BufferControl",
"SearchBufferControl",
"DummyControl",
"FormattedTextControl",
"UIControl",
"UIContent",
# Margins.
"Margin",
"NumberedMargin",
"ScrollbarMargin",
"ConditionalMargin",
"PromptMargin",
# Menus.
"CompletionsMenu",
"MultiColumnCompletionsMenu",
]
|