@@ -23,6 +23,7 @@ namespace TerminalGuiDesigner.UI.Windows;
23
23
public partial class PosEditor : Dialog , IValueGetterDialog {
24
24
25
25
private Design design ;
26
+ private readonly Dictionary < string , Design > _siblings ;
26
27
27
28
/// <summary>
28
29
/// Users configured <see cref="Pos"/> (assembled from radio button
@@ -57,13 +58,18 @@ public PosEditor(Design design, Pos oldValue) {
57
58
Cancelled = true ;
58
59
Modal = true ;
59
60
60
- var siblings = design . GetSiblings ( ) . ToListObs ( ) ;
61
+ _siblings = design . GetSiblings ( ) . ToDictionary (
62
+ d=> d . FieldName ,
63
+ d=> d ) ;
61
64
62
- ddRelativeTo . SetSource ( siblings ) ;
63
- ddSide . SetSource ( Enum . GetValues ( typeof ( Side ) ) . Cast < Enum > ( ) . ToListObs ( ) ) ;
65
+ tbRelativeTo . Autocomplete . SuggestionGenerator = new SingleWordSuggestionGenerator ( )
66
+ {
67
+ AllSuggestions = _siblings . Keys . OrderBy ( a => a ) . ToList ( )
68
+ } ;
64
69
65
70
var val = oldValue ;
66
- if ( val . GetPosType ( siblings , out var type , out var value , out var relativeTo , out var side , out var offset ) )
71
+ if ( val . GetPosType ( _siblings . Values . ToList ( ) ,
72
+ out var type , out var value , out var relativeTo , out var side , out var offset ) )
67
73
{
68
74
switch ( type )
69
75
{
@@ -76,8 +82,8 @@ public PosEditor(Design design, Pos oldValue) {
76
82
case PosType . Relative :
77
83
rgPosType . SelectedItem = 2 ;
78
84
if ( relativeTo != null )
79
- ddRelativeTo . SelectedItem = siblings . IndexOf ( relativeTo ) ;
80
- ddSide . SelectedItem = ( int ) side ;
85
+ tbRelativeTo . Text = relativeTo . FieldName ;
86
+ rgSide . SelectedItem = ( int ) side ;
81
87
break ;
82
88
case PosType . Center :
83
89
rgPosType . SelectedItem = 3 ;
@@ -120,9 +126,9 @@ private void SetupForCurrentPosType()
120
126
{
121
127
case PosType . Percent :
122
128
lblRelativeTo . Visible = false ;
123
- ddRelativeTo . Visible = false ;
129
+ tbRelativeTo . Visible = false ;
124
130
lblSide . Visible = false ;
125
- ddSide . Visible = false ;
131
+ rgSide . Visible = false ;
126
132
127
133
lblValue . Y = 1 ;
128
134
lblValue . Visible = true ;
@@ -138,9 +144,9 @@ private void SetupForCurrentPosType()
138
144
break ;
139
145
case PosType . Center :
140
146
lblRelativeTo . Visible = false ;
141
- ddRelativeTo . Visible = false ;
147
+ tbRelativeTo . Visible = false ;
142
148
lblSide . Visible = false ;
143
- ddSide . Visible = false ;
149
+ rgSide . Visible = false ;
144
150
145
151
lblValue . Visible = false ;
146
152
tbValue . Visible = false ;
@@ -154,10 +160,10 @@ private void SetupForCurrentPosType()
154
160
break ;
155
161
case PosType . Absolute :
156
162
case PosType . AnchorEnd :
157
- ddRelativeTo . Visible = false ;
163
+ tbRelativeTo . Visible = false ;
158
164
lblRelativeTo . Visible = false ;
159
165
lblSide . Visible = false ;
160
- ddSide . Visible = false ;
166
+ rgSide . Visible = false ;
161
167
162
168
lblValue . Y = 1 ;
163
169
lblValue . Visible = true ;
@@ -170,23 +176,23 @@ private void SetupForCurrentPosType()
170
176
case PosType . Relative :
171
177
lblRelativeTo . Y = 1 ;
172
178
lblRelativeTo . Visible = true ;
173
- ddRelativeTo . Y = 1 ;
174
- ddRelativeTo . Visible = true ;
179
+ tbRelativeTo . Y = 1 ;
180
+ tbRelativeTo . Visible = true ;
175
181
176
182
lblSide . Y = 3 ;
177
183
lblSide . Visible = true ;
178
184
179
- ddSide . IsInitialized = false ;
180
- ddSide . Y = 3 ;
181
- ddSide . Visible = true ;
182
- ddSide . IsInitialized = true ;
185
+ rgSide . IsInitialized = false ;
186
+ rgSide . Y = 3 ;
187
+ rgSide . Visible = true ;
188
+ rgSide . IsInitialized = true ;
183
189
184
190
lblValue . Visible = false ;
185
191
tbValue . Visible = false ;
186
192
187
- lblOffset . Y = 5 ;
193
+ lblOffset . Y = 7 ;
188
194
lblOffset . Visible = true ;
189
- tbOffset . Y = 5 ;
195
+ tbOffset . Y = 7 ;
190
196
tbOffset . Visible = true ;
191
197
SetNeedsDraw ( ) ;
192
198
break ;
@@ -249,7 +255,7 @@ private PosType GetPosType()
249
255
250
256
private Side ? GetSide ( )
251
257
{
252
- return ddSide . SelectedItem == - 1 ? null : ( Side ) ddSide . Source . ToList ( ) [ ddSide . SelectedItem ] ;
258
+ return rgSide . SelectedItem == - 1 ? null : ( Side ) rgSide . SelectedItem ;
253
259
}
254
260
255
261
private bool GetOffset ( out int offset )
@@ -274,7 +280,9 @@ private bool GetOffset(out int offset)
274
280
275
281
private bool BuildPosRelative ( out Pos result )
276
282
{
277
- var relativeTo = ddRelativeTo . SelectedItem == - 1 ? null : ddRelativeTo . Source . ToList ( ) [ ddRelativeTo . SelectedItem ] as Design ;
283
+ var key = tbRelativeTo . Text ;
284
+
285
+ var relativeTo = ( ! string . IsNullOrWhiteSpace ( key ) ) && _siblings . TryGetValue ( key , out var d ) ? d : null ;
278
286
279
287
if ( relativeTo != null )
280
288
{
0 commit comments