diff --git a/StarterNG/Controls/KeySlot.cs b/StarterNG/Controls/KeySlot.cs
new file mode 100644
index 0000000..c274075
--- /dev/null
+++ b/StarterNG/Controls/KeySlot.cs
@@ -0,0 +1,21 @@
+using Avalonia;
+using Avalonia.Controls;
+
+namespace StarterNG.Controls;
+
+///
+/// Where the settings layout wants the row of one of the SimulatorKeys, so it
+/// sits among the rows it belongs with; the row is put in when the page is built.
+///
+public sealed class KeySlot : Decorator
+{
+ public static readonly StyledProperty KeyProperty =
+ AvaloniaProperty.Register(nameof(Key));
+
+ /// The eu07.ini key whose row goes here.
+ public string? Key
+ {
+ get => GetValue(KeyProperty);
+ set => SetValue(KeyProperty, value);
+ }
+}
diff --git a/StarterNG/Controls/SettingRow.cs b/StarterNG/Controls/SettingRow.cs
index bee10d4..42a993b 100644
--- a/StarterNG/Controls/SettingRow.cs
+++ b/StarterNG/Controls/SettingRow.cs
@@ -17,6 +17,13 @@ public class SettingRow : ContentControl
public static readonly StyledProperty ValueTextProperty =
AvaloniaProperty.Register(nameof(ValueText));
+ ///
+ /// Why the simulator to be started would pass this setting over; the row dims
+ /// and says so. The input stays usable - the file may serve another build.
+ ///
+ public static readonly StyledProperty IdleNoteProperty =
+ AvaloniaProperty.Register(nameof(IdleNote));
+
public string? Label
{
get => GetValue(LabelProperty);
@@ -41,6 +48,12 @@ public class SettingRow : ContentControl
set => SetValue(ValueTextProperty, value);
}
+ public string? IdleNote
+ {
+ get => GetValue(IdleNoteProperty);
+ set => SetValue(IdleNoteProperty, value);
+ }
+
public SettingRow()
{
UpdatePseudoClasses();
@@ -54,8 +67,12 @@ public class SettingRow : ContentControl
change.Property == DescriptionProperty ||
change.Property == ConfigKeyProperty ||
change.Property == ValueTextProperty ||
+ change.Property == IdleNoteProperty ||
change.Property == ContentProperty)
UpdatePseudoClasses();
+
+ if (change.Property == IdleNoteProperty)
+ ToolTip.SetTip(this, string.IsNullOrEmpty(IdleNote) ? null : IdleNote);
}
private void UpdatePseudoClasses()
@@ -65,5 +82,6 @@ public class SettingRow : ContentControl
PseudoClasses.Set(":no-key", string.IsNullOrEmpty(ConfigKey));
PseudoClasses.Set(":no-value", string.IsNullOrEmpty(ValueText));
PseudoClasses.Set(":no-content", Content is null);
+ PseudoClasses.Set(":idle", !string.IsNullOrEmpty(IdleNote));
}
}
diff --git a/StarterNG/Controls/SettingsSection.cs b/StarterNG/Controls/SettingsSection.cs
index 7cb092d..02fd743 100644
--- a/StarterNG/Controls/SettingsSection.cs
+++ b/StarterNG/Controls/SettingsSection.cs
@@ -1,4 +1,6 @@
+using System;
using Avalonia;
+using Avalonia.Controls;
using Avalonia.Controls.Primitives;
namespace StarterNG.Controls;
@@ -8,9 +10,56 @@ public class SettingsSection : HeaderedContentControl
public static readonly StyledProperty