public PresentedParameter PresentPopup(IParameterDescriptor param, Action updateCallback) { var factory = param.GetParameterizedObjectFactory(); var grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(4, GridUnitType.Star) }); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star), MinWidth = 110, MaxWidth = 130 }); var button = new Button { Content = "Configure →" }; grid.Children.Add(button); Grid.SetColumn(button, 1); var container = new Atomic <IParameterizedObject>(); void Setter(object obj) => container.Set((IParameterizedObject)obj); object Getter() => container.Get(); void Updater(ParameterStateType state, bool value) { if (state != ParameterStateType.Enabled) { return; } button.IsEnabled = value; } button.Click += (sender, e) => { var subParams = factory.GetParameters(param); var context = factory.Parse(param, container.Get()); var configWindow = new ParameterizedConfigWindow(param.Name ?? "Parameter", subParams, context) { Width = 400 }; if (configWindow.ShowDialog(out var @params)) { container.Set(factory.Create(param, @params)); updateCallback(); } }; return(new PresentedParameter(param, grid, Getter, Setter, null, Updater)); }
/// <summary> /// Open a config window to modify the system variables. /// </summary> public static void ConfigSystemVariables() { var configWindow = new ParameterizedConfigWindow("System Variables", SystemVariables.ParameterDefinitions, SystemVariables.Context) { Width = 800 }; if (!configWindow.ShowDialog(out var @params)) { return; } SystemVariables.Apply(@params); SaveSystemVariables(); }