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));
        }
Exemple #2
0
        /// <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();
        }