/** * 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(); } }
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); } }
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); }
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); } }
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; }
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(); }