Skip to content

Commit e8e2844

Browse files
committed
Change PosEditor to use radio group and text autocomplete
Mark ComboBox as not a supported control ComboBox has always been buggy, lets just get rid of it till it works.
1 parent dac5834 commit e8e2844

File tree

3 files changed

+74
-58
lines changed

3 files changed

+74
-58
lines changed

src/UI/Windows/PosEditor.Designer.cs

Lines changed: 40 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/UI/Windows/PosEditor.cs

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ namespace TerminalGuiDesigner.UI.Windows;
2323
public 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
{

src/ViewFactory.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ public static class ViewFactory
5353
typeof(Menuv2),
5454
typeof(ScrollBar),
5555
typeof(ScrollSlider),
56-
typeof(TileView)
56+
typeof(TileView),
57+
58+
// Terminal.Gui combo boxes do not really work properly
59+
typeof(ComboBox)
5760
];
5861

5962
/// <summary>

0 commit comments

Comments
 (0)