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
//! **The conversation row's own acts**, hung off the row a secondary click
//! names (DESIGN §4.23; bl-dbc9).
//!
//! # One design, two platforms, because the toolkit synthesizes the trigger
//!
//! The operator's requirement was conversation management reachable from the
//! conversation itself — a right-click here, a long-press on the android
//! client. egui synthesizes a **secondary click from a touch long-press**, so
//! the two are one gesture and this is one design: `Response::context_menu` on
//! the row, and the platform-native trigger falls out with nothing written for
//! it.
//!
//! # It is the composer's second row, on the row
//!
//! The seam is already drawn and this file does not draw a second one:
//! `crate::ui::composer::acts` is *the acts that spend no words*, and those are
//! exactly the acts a list row can offer. `send` and `interrupt` stay off it,
//! together, because both advance the turn and both spend the composer's ONE
//! draft box — an item pointing at a box shared by two verbs names neither.
//!
//! So every item here is one of two things and the separator is where the
//! difference is:
//!
//! - **it fires**, because the gesture is the wall and the conversation and
//! nothing else ([`straight`]) — [`crate::verbs::STOP`],
//! [`crate::verbs::RETARGET`], and [`crate::verbs::SEEN`] on a row that is
//! asking;
//! - **it leads somewhere and spends nothing here** — the records pane, and the
//! two boxes on the composer that fill an act this menu cannot
//! (`crate::ui::model::fill`).
//!
//! # Its subject is the ROW, and only the items that lead somewhere select it
//!
//! This is `crate::ui::queue`'s division read one pane over, not a new one: a
//! queue row's `seen` acts on that row without selecting it, and only *go to
//! it* moves the focus. A fired act here carries `(aim.address, row.root_id)`
//! outright, so it needs no selection and takes none — a secondary click that
//! stops a driver must not throw away the transcript the operator was reading.
//! The three that lead somewhere DO select, because each opens a surface whose
//! subject is the selected conversation, and a place opened about nothing would
//! be a place about the wrong thing.
//!
//! # Nothing here can destroy, which is §4.20 read on a control
//!
//! *"A routine pane is a surface an operator moves through quickly; a mis-aimed
//! click there must not be able to land on this."* A list row's menu is that
//! surface exactly — the next row is one pixel away and the menu opens under
//! the pointer. So `delete` does not fire here: the item OPENS the arming,
//! which is the box on the composer, and the act stays where an operator has to
//! reach for it deliberately.
use crateConvRow;
use crate;
use crate;
/// **What a word wears when the item leads somewhere rather than acting.** The
/// ellipsis is the whole of the convention and it has one home: an item that
/// carries it spends nothing now.
/// The door every fired item goes through: a wall and a conversation, and
/// nothing else. **That signature is the admission test** — an act that needs a
/// third parameter has a box, and a box is not something a menu can hold.
type Door = fn ;
/// **The acts this menu fires outright**: the word on the item, the op it
/// carries, and the door that builds it.
///
/// [`crate::verbs::SEEN`] rides only on a row that is **asking** — it answers
/// what a conversation is currently asking about, so on a row with nothing
/// waiting it is an act with no subject. That is the one convenience this menu
/// adds over the composer's second row, and it is offered where the row itself
/// says it applies.
/// Hang the menu off a painted row and take what it was given.
///
/// `aim` is the wall the list is showing, which is what every gesture composed
/// here is addressed with — the row's own list is the aimed wall's, so there is
/// no second resolution to get wrong.