Ejemplo n.º 1
0
        /**
         * FloatParameterControl requested to move focus.
         */
        void TabMoveEventHandler(FloatParameterControl sender, bool backwards)
        {
            int index = _parameterControls.IndexOf(sender);

            if (index != -1)
            {
                index += backwards ? -1 : 1;
                index += _parameterControls.Count;
                index %= _parameterControls.Count();
                _parameterControls[index].SwitchToTextEdit();
            }
        }
Ejemplo n.º 2
0
        private void UpdateManipulationCommand(FloatParameterControl control, float newValue)
        {
            var cmd = _commandsForControls[control];

            if (cmd is AddOrUpdateKeyframeCommand)
            {
                var addKeyframeCommand = cmd as AddOrUpdateKeyframeCommand;
                addKeyframeCommand.KeyframeValue.Value = newValue;
            }
            else
            {
                var updateValueCommand = cmd as UpdateOperatorPartValueFunctionCommand;
                updateValueCommand.Value = new Float(newValue);
            }
        }
Ejemplo n.º 3
0
        private ICommand BuildManipulationCommand(FloatParameterControl control, float newValue)
        {
            ICommand cmd;

            if (control.IsAnimated)
            {
                cmd = new AddOrUpdateKeyframeCommand(App.Current.Model.GlobalTime, newValue, control.ValueHolder);
            }
            else
            {
                cmd = new UpdateOperatorPartValueFunctionCommand(control.ValueHolder, new Float(newValue));
            }
            _commandsForControls[control] = cmd;
            return(cmd);
        }
Ejemplo n.º 4
0
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            int i = 0;

            XGrid.ColumnDefinitions.Clear();
            foreach (var opPart in _operatorParts)
            {
                XGrid.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    MinWidth = 25
                });
                var newControl = new FloatParameterControl(opPart);
                Grid.SetColumn(newControl, i++);
                _parameterControls.Add(newControl);
                newControl.TabMoveEvent += TabMoveEventHandler;
                XGrid.Children.Add(newControl);
            }
        }
Ejemplo n.º 5
0
        public RgbaParameterValue(OperatorPart[] valueHolders)
        {
            InitializeComponent();

            _rFloatEdit = new FloatParameterControl(valueHolders[0])
            {
                Precision = 2
            };
            Grid.SetColumn(_rFloatEdit, 0);
            XGrid.Children.Add(_rFloatEdit);
            _rFloatEdit.TabMoveEvent += TabMoveEventHandler;
            _parameterControls.Add(_rFloatEdit);

            _gFloatEdit = new FloatParameterControl(valueHolders[1])
            {
                Precision = 2
            };
            Grid.SetColumn(_gFloatEdit, 1);
            XGrid.Children.Add(_gFloatEdit);
            _gFloatEdit.TabMoveEvent += TabMoveEventHandler;
            _parameterControls.Add(_gFloatEdit);

            _bFloatEdit = new FloatParameterControl(valueHolders[2])
            {
                Precision = 2
            };
            Grid.SetColumn(_bFloatEdit, 2);
            XGrid.Children.Add(_bFloatEdit);
            _bFloatEdit.TabMoveEvent += TabMoveEventHandler;
            _parameterControls.Add(_bFloatEdit);

            _aFloatEdit = new FloatParameterControl(valueHolders[3])
            {
                Precision = 2
            };
            Grid.SetColumn(_aFloatEdit, 4);
            XGrid.Children.Add(_aFloatEdit);
            _aFloatEdit.TabMoveEvent += TabMoveEventHandler;
            _parameterControls.Add(_aFloatEdit);


            // Bind color fields
            var multiBinding = new MultiBinding {
                Converter = RgbToBrushConverter
            };

            multiBinding.Bindings.Add(new Binding("Value")
            {
                Source = _rFloatEdit
            });
            multiBinding.Bindings.Add(new Binding("Value")
            {
                Source = _gFloatEdit
            });
            multiBinding.Bindings.Add(new Binding("Value")
            {
                Source = _bFloatEdit
            });
            BindingOperations.SetBinding(XColorThumb, Border.BackgroundProperty, multiBinding);

            var binding = new Binding("Value")
            {
                Source = _aFloatEdit
            };

            XPatternOverlay.SetBinding(OpacityProperty, binding);


            Loaded   += RgbaParameterValue_Loaded;
            Unloaded += RgbaParameterValue_Unloaded;
        }
Ejemplo n.º 6
0
        public OperatorParameterView(Operator op)
        {
            var watch = new Stopwatch();

            watch.Start();

            InitializeComponent();
            Operator = op;

            var binding = new Binding("Namespace");

            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            binding.Source = op.Definition;
            binding.Path   = new PropertyPath("Namespace");
            NamespaceTextBox.SetBinding(TextBox.TextProperty, binding);

            binding = new Binding("Type");
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            binding.Source = op.Definition;
            binding.Path   = new PropertyPath("Name");
            TypeTextBox.SetBinding(TextBox.TextProperty, binding);


            binding = new Binding("OperatorName")
            {
                Mode = BindingMode.OneWay
            };
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            binding.Source = op;
            binding.Path   = new PropertyPath("Name");
            XNameTextBox.XTextEdit.SetBinding(TextBox.TextProperty, binding);
            XNameTextBox.EditingStartedEvent += () =>
            {
                _opStateEntry = new UpdateOperatorPropertiesCommand.Entry(op);
                _updateOperatorPropertiesCommand = new UpdateOperatorPropertiesCommand(op, _opStateEntry);
            };
            XNameTextBox.EditingUpdatedEvent += (o, ev) =>
            {
                _updateOperatorPropertiesCommand.ChangeEntries[0].Name = XNameTextBox.textEditButton.XTextEdit.Text;
                _updateOperatorPropertiesCommand.Do();
            };
            XNameTextBox.EditingCompletedEvent += () =>
            {
                App.Current.UndoRedoStack.Add(_updateOperatorPropertiesCommand);
                _updateOperatorPropertiesCommand = new UpdateOperatorPropertiesCommand(op, _opStateEntry);
            };
            XParameterStackPanel = new StackPanel();
            XParameterStackPanel.Children.Clear();

            // find groups
            var inputGroups = from input in op.Inputs
                              group input by input.Name.Split(new[] { '.' })[0] into g
                              select new { Name = g.Key, Inputs = g.ToArray() };

            foreach (var group in inputGroups)
            {
                var singleParameterRow = new OperatorParameterViewRow(group.Inputs.ToList());
                singleParameterRow.XParameterNameButton.Content = group.Name;

                singleParameterRow.XInputControls.Children.Add(new GroupInputControl(group.Inputs.ToList())); // This is slooww (half of operator selection time)

                // Single Parameter
                if (group.Inputs.Length == 1)
                {
                    XParameterStackPanel.Children.Add(singleParameterRow);

                    var input = group.Inputs[0];
                    if (input.Type == FunctionType.Float)
                    {
                        if (!input.IsMultiInput)
                        {
                            var metaInput  = input.Parent.GetMetaInput(input);
                            var enumValues = metaInput.EnumValues;

                            // ENUM - Parameter
                            if (enumValues.Count > 0)
                            {
                                var newEnumControl = new EnumParameterValue(input);
                                singleParameterRow.ResetToDefaultEvent += newEnumControl.ResetToDefaultHandler;
                                singleParameterRow.XParameterValue.Children.Add(newEnumControl);
                            }

                            // Single Float Parameter
                            else
                            {
                                FloatParameterControl newFloatControl = new FloatParameterControl(input);
                                singleParameterRow.XParameterValue.Children.Add(newFloatControl);
                                singleParameterRow.ResetToDefaultEvent     += newFloatControl.ParameterRow_ResetSingleParameterHandler;
                                singleParameterRow.StartManipulationEvent  += newFloatControl.ParameterRow_StartManipulationHandler;
                                singleParameterRow.UpdateManipulationEvent += newFloatControl.ParameterRow_UpdateManipulaitonHandler;
                                singleParameterRow.EndManipulationEvent    += newFloatControl.ParameterRow_EndManipulationHandler;
                            }
                        }
                    }
                    else if (input.Type == FunctionType.Text)
                    {
                        var paramEdit = new TextParameterValue(input);
                        if (input.Name.EndsWith("Text"))
                        {
                            singleParameterRow.XAdditionalContent.Child = paramEdit;
                        }
                        else
                        {
                            singleParameterRow.XParameterValue.Children.Add(paramEdit);
                        }
                    }
                    else if (input.Type == FunctionType.Scene)
                    {
                        var paramEdit = new SceneParameterValue(input);
                        singleParameterRow.XParameterValue.Children.Add(paramEdit);
                    }
                    else if (input.Type == FunctionType.Image)
                    {
                        var paramEdit = new ImageParameterValue(input);
                        singleParameterRow.XParameterValue.Children.Add(paramEdit);
                    }
                    else if (input.Type == FunctionType.Dynamic)
                    {
                        var paramEdit = new DynamicParameterValue(input);
                        singleParameterRow.XParameterValue.Children.Add(paramEdit);
                    }
                    else if (input.Type == FunctionType.Generic)
                    {
                        var paramEdit = new GenericParameterValue(input);
                        singleParameterRow.XParameterValue.Children.Add(paramEdit);
                    }
                    else if (input.Type == FunctionType.Mesh)
                    {
                        var paramEdit = new MeshParameterValue(input);
                        singleParameterRow.XParameterValue.Children.Add(paramEdit);
                    }
                }

                // Float Parameter Groups
                else
                {
                    if (group.Inputs.Length == 4 &&
                        group.Inputs[0].Name.EndsWith(".R") &&
                        group.Inputs[1].Name.EndsWith(".G") &&
                        group.Inputs[2].Name.EndsWith(".B") &&
                        group.Inputs[3].Name.EndsWith(".A"))
                    {
                        var rgbaControl = new RgbaParameterValue(group.Inputs);
                        singleParameterRow.ResetToDefaultEvent     += rgbaControl.ResetToDefaultHandler;
                        singleParameterRow.StartManipulationEvent  += rgbaControl.StartManipulationHandler;
                        singleParameterRow.UpdateManipulationEvent += rgbaControl.UpdateManipulationHandler;
                        singleParameterRow.EndManipulationEvent    += rgbaControl.EndManipulationHandler;
                        singleParameterRow.XParameterValue.Children.Add(rgbaControl);
                    }
                    else
                    {
                        var vectorControl = new VectorNParameterValue(group.Inputs);

                        singleParameterRow.StartManipulationEvent  += vectorControl.StartManipulationHandler;
                        singleParameterRow.UpdateManipulationEvent += vectorControl.UpdateManipulationHandler;
                        singleParameterRow.EndManipulationEvent    += vectorControl.EndManipulationHandler;
                        singleParameterRow.ResetToDefaultEvent     += vectorControl.ResetToDefaultHandler;
                        singleParameterRow.XParameterValue.Children.Add(vectorControl);
                    }

                    var parameterGroupComponent = new ParameterGroup(group.Inputs);
                    parameterGroupComponent.XParameterGroupPanel.Children.Add(singleParameterRow);
                    XParameterStackPanel.Children.Add(parameterGroupComponent);
                }
            }

            var descriptionBox = new ICSharpCode.AvalonEdit.Editing.TextArea();

            descriptionBox.ToolTip    = "Operator description. Click to edit";
            descriptionBox.Foreground = Brushes.Gray;
            descriptionBox.Margin     = new Thickness(4, 6, 4, 4);
            descriptionBox.MinHeight  = 40;
            descriptionBox.FontSize   = 13;

            DescriptionDoc              = new TextDocument(op.Definition.Description);
            DescriptionDoc.TextChanged += HandleDescriptionChange;
            descriptionBox.Document     = DescriptionDoc;
            XParameterStackPanel.Children.Add(descriptionBox);

            XParameterScrollViewer.Content = XParameterStackPanel;
            App.Current.OperatorPresetManager.FilterPresetsForSelectedOperator();

            watch.Stop();
        }