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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
//! **One engine's row**, the control that begins a conversation on it, and the
//! cursor track the whole list makes (DESIGN §4.39).
//!
//! Split from [`super`] at the design-time budget on the seam the pane now
//! has: [`super`] is the list and what a section says, `wall` is one
//! workspace, and this is the engine itself — the row an operator clicks to
//! open one, the `+` at its right edge, and the order the rows stand in.
//!
//! **The cursor here is not the selection, and it is the one place in this
//! window where that is true** (§4.39). Landing on an engine's row only stands
//! there: opening is an act, and a walk that opened every engine it moved
//! through would be a walk nobody could use to reach the one below. So the row
//! carries the brand rule while the cursor is on it, and
//! [`crate::ui::keys`]'s Enter calls [`Model::open_engine`] — the same door
//! this file's click calls, which is what keeps it from being a second
//! surface.
use crate;
/// **The word on the control that begins a conversation on this engine**
/// (§4.39) — one glyph, at the right edge of every engine's row.
///
/// A glyph with no word beside it, which is the one compact control in this
/// window that has none (`docs/STYLE.md` §2). What a word would cost is the
/// row: the engine's own name, its host and its dial state are what the row is
/// for, and a control captioned *begin* on every one of them would take a
/// third of the list's width away from the thing being listed. `+` is the one
/// glyph a person reads as *another one of these* without being taught.
pub const BEGIN: &str = "+";
/// **One stop on the window's cursor track**: an engine's own row, a wall
/// under the open one, or a conversation under the aimed wall.
///
/// Three kinds because landing on them means three different things (§4.39):
/// landing on a wall aims it and landing on a conversation selects it, exactly
/// as a click does, and landing on an engine row only stands there — the walk
/// must not open every engine it passes through.
/// **Every stop the walk makes, in the order the pane paints them.**
///
/// It is the keyboard's cursor track and it is a **query**, derived from the
/// same rows and the same order [`super::render`] draws — so a key cannot walk
/// onto a row a click cannot reach, and cannot walk in an order the glass does
/// not show. A closed engine offers its own row and nothing under it; a wall
/// this seat holds no name for is on neither surface, because no envelope can
/// address it; and a wall that is not the aimed one offers no conversations,
/// because this seat has asked about none (§4.12) and the glass paints none.
/// **Paint one engine's row with its `+`, and take a click on either.**
///
/// The open one is the chosen row, which is what an accordion has instead of a
/// disclosure triangle: the raise says which one you are inside. The standing
/// one carries the brand rule, and takes the keyboard so the ring is on it and
/// Enter fires it.
///
/// **The row is handed a width with the `+` already taken out of it**, rather
/// than painted full width with the control on top: two widgets over one
/// rectangle is a click that fires both, and `theme::paint::row` fills
/// whatever width it is given. The control is a square one row tall, so what
/// it costs the name is a constant and the Tab order runs left to right the
/// way the row reads.
///
/// **The `+` stands down while a pane covers the conversation**, which is the
/// per-wall controls' own rule one row kind over (`super::wall`): what it does
/// is put the caret in the composer's box, the composer stands down under
/// every covering pane, so a `+` offered there would drop the selection and
/// ask for a caret in a box that is not on the glass.