@@ -23,6 +23,7 @@ namespace TerminalGuiDesigner.UI.Windows;
2323public partial class PosEditor : Dialog , IValueGetterDialog {
2424
2525 private Design design ;
26+ private readonly Dictionary < string , Design > _siblings ;
2627
2728 /// <summary>
2829 /// Users configured <see cref="Pos"/> (assembled from radio button
@@ -57,13 +58,18 @@ public PosEditor(Design design, Pos oldValue) {
5758 Cancelled = true ;
5859 Modal = true ;
5960
60- var siblings = design . GetSiblings ( ) . ToListObs ( ) ;
61+ _siblings = design . GetSiblings ( ) . ToDictionary (
62+ d=> d . FieldName ,
63+ d=> d ) ;
6164
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+ } ;
6469
6570 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 ) )
6773 {
6874 switch ( type )
6975 {
@@ -76,8 +82,8 @@ public PosEditor(Design design, Pos oldValue) {
7682 case PosType . Relative :
7783 rgPosType . SelectedItem = 2 ;
7884 if ( relativeTo != null )
79- ddRelativeTo . SelectedItem = siblings . IndexOf ( relativeTo ) ;
80- ddSide . SelectedItem = ( int ) side ;
85+ tbRelativeTo . Text = relativeTo . FieldName ;
86+ rgSide . SelectedItem = ( int ) side ;
8187 break ;
8288 case PosType . Center :
8389 rgPosType . SelectedItem = 3 ;
@@ -120,9 +126,9 @@ private void SetupForCurrentPosType()
120126 {
121127 case PosType . Percent :
122128 lblRelativeTo . Visible = false ;
123- ddRelativeTo . Visible = false ;
129+ tbRelativeTo . Visible = false ;
124130 lblSide . Visible = false ;
125- ddSide . Visible = false ;
131+ rgSide . Visible = false ;
126132
127133 lblValue . Y = 1 ;
128134 lblValue . Visible = true ;
@@ -138,9 +144,9 @@ private void SetupForCurrentPosType()
138144 break ;
139145 case PosType . Center :
140146 lblRelativeTo . Visible = false ;
141- ddRelativeTo . Visible = false ;
147+ tbRelativeTo . Visible = false ;
142148 lblSide . Visible = false ;
143- ddSide . Visible = false ;
149+ rgSide . Visible = false ;
144150
145151 lblValue . Visible = false ;
146152 tbValue . Visible = false ;
@@ -154,10 +160,10 @@ private void SetupForCurrentPosType()
154160 break ;
155161 case PosType . Absolute :
156162 case PosType . AnchorEnd :
157- ddRelativeTo . Visible = false ;
163+ tbRelativeTo . Visible = false ;
158164 lblRelativeTo . Visible = false ;
159165 lblSide . Visible = false ;
160- ddSide . Visible = false ;
166+ rgSide . Visible = false ;
161167
162168 lblValue . Y = 1 ;
163169 lblValue . Visible = true ;
@@ -170,23 +176,23 @@ private void SetupForCurrentPosType()
170176 case PosType . Relative :
171177 lblRelativeTo . Y = 1 ;
172178 lblRelativeTo . Visible = true ;
173- ddRelativeTo . Y = 1 ;
174- ddRelativeTo . Visible = true ;
179+ tbRelativeTo . Y = 1 ;
180+ tbRelativeTo . Visible = true ;
175181
176182 lblSide . Y = 3 ;
177183 lblSide . Visible = true ;
178184
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 ;
183189
184190 lblValue . Visible = false ;
185191 tbValue . Visible = false ;
186192
187- lblOffset . Y = 5 ;
193+ lblOffset . Y = 7 ;
188194 lblOffset . Visible = true ;
189- tbOffset . Y = 5 ;
195+ tbOffset . Y = 7 ;
190196 tbOffset . Visible = true ;
191197 SetNeedsDraw ( ) ;
192198 break ;
@@ -249,7 +255,7 @@ private PosType GetPosType()
249255
250256 private Side ? GetSide ( )
251257 {
252- return ddSide . SelectedItem == - 1 ? null : ( Side ) ddSide . Source . ToList ( ) [ ddSide . SelectedItem ] ;
258+ return rgSide . SelectedItem == - 1 ? null : ( Side ) rgSide . SelectedItem ;
253259 }
254260
255261 private bool GetOffset ( out int offset )
@@ -274,7 +280,9 @@ private bool GetOffset(out int offset)
274280
275281 private bool BuildPosRelative ( out Pos result )
276282 {
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 ;
278286
279287 if ( relativeTo != null )
280288 {
0 commit comments