private void SetLink(int index, IDataflowProvider <CoalescedValue <int> > indexProvider, IDataflowProvider <CoalescedValue <float> > weightProvider) { var currentIndexValue = indexProvider.GetValue(); var currentWeightValue = weightProvider.GetValue(); var indexEditor = indexEditors[index]; var weightEditor = weightsSliders[index]; indexEditor.Submitted += text => SetIndexValue(index, indexEditor, currentIndexValue); weightEditor.Changed += () => SetWeightValue(index, weightEditor); weightEditor.Value = currentWeightValue.IsDefined ? currentWeightValue.Value : 0; indexEditor.AddChangeLateWatcher(indexProvider, v => indexEditor.Text = v.IsDefined ? v.Value.ToString() : ManyValuesText); weightEditor.AddChangeLateWatcher(weightProvider, v => { weightEditor.Value = v.IsDefined ? v.Value : 0; if (!v.IsDefined) { weightEditor.LabelText = ManyValuesText; } }); weightEditor.DragStarted += () => { EditorParams.History?.BeginTransaction(); previousValue = weightEditor.Value; }; weightEditor.DragEnded += () => { if (weightEditor.Value != previousValue || (EditorParams.Objects.Skip(1).Any() && SameValues())) { EditorParams.History?.CommitTransaction(); } EditorParams.History?.EndTransaction(); }; ManageManyValuesOnFocusChange(indexEditor, indexProvider); ManageManyValuesOnFocusChange(weightEditor.Editor, weightProvider); }
protected IDataflowProvider <ComponentType> CoalescedPropertyComponentValue <ComponentType>(Func <T, ComponentType> selector, ComponentType defaultValue = default(ComponentType)) { var indexParameters = EditorParams.PropertyInfo.GetIndexParameters(); if (indexParameters.Length == 0) { IDataflowProvider <ComponentType> provider = null; foreach (var o in EditorParams.Objects) { var p = new Property <T>(o, EditorParams.PropertyName).Select(selector); provider = (provider == null) ? p : provider.SameOrDefault(p, defaultValue); } return(provider); } else if (indexParameters.Length == 1 && indexParameters.First().ParameterType == typeof(int)) { IDataflowProvider <ComponentType> provider = null; foreach (var o in EditorParams.Objects) { var p = new IndexedProperty <T>(o, EditorParams.PropertyName, EditorParams.IndexInList).Select(selector); provider = (provider == null) ? p : provider.SameOrDefault(p, defaultValue); } return(provider); } else { throw new NotSupportedException(); } }
public static T GetValue <T>(this IDataflowProvider <T> arg) { var dataflow = arg.GetDataflow(); dataflow.Poll(); return(dataflow.Value); }
public void SetComponent(string text, IDataflowProvider <float> current) { if (Parser.TryParse(text, out double newValue)) { SetProperty((float)newValue); } editor.Text = current.GetValue().ToString("0.###"); }
public static bool TryGetValue <T>(this IDataflowProvider <T> arg, out T result) { var dataflow = arg.GetDataflow(); dataflow.Poll(); result = dataflow.GotValue ? dataflow.Value : default(T); return(dataflow.GotValue); }
private void SetLink(int idx, IDataflowProvider <SkinningWeights> provider) { var currentValue = provider.GetValue(); indexEditors[idx].Submitted += text => SetIndexValue(EditorParams, idx, indexEditors[idx], currentValue); weigthsEditors[idx].Submitted += text => SetWeightValue(EditorParams, idx, weigthsEditors[idx], currentValue); indexEditors[idx].AddChangeWatcher(provider, v => indexEditors[idx].Text = v[idx].Index.ToString()); weigthsEditors[idx].AddChangeWatcher(provider, v => weigthsEditors[idx].Text = v[idx].Weight.ToString()); }
protected IDataflowProvider <T> CoalescedPropertyValue(T defaultValue = default(T)) { IDataflowProvider <T> provider = null; foreach (var o in EditorParams.Objects) { var p = new Property <T>(o, EditorParams.PropertyName); provider = (provider == null) ? p : provider.SameOrDefault(p, defaultValue); } return(provider); }
protected IDataflowProvider <ComponentType> CoalescedPropertyComponentValue <ComponentType>(Func <T, ComponentType> selector, ComponentType defaultValue = default(ComponentType)) { IDataflowProvider <ComponentType> provider = null; foreach (var o in EditorParams.Objects) { var p = new Property <T>(o, EditorParams.PropertyName).Select(selector); provider = (provider == null) ? p : provider.SameOrDefault(p, defaultValue); } return(provider); }
public static IDataflowProvider <R> GetProvider <R>(IPropertyEditorParams context, Func <IKeyframe, R> selector) { IDataflowProvider <R> provider = null; foreach (var obj in context.RootObjects) { var p = new DataflowProvider <IKeyframe>(() => new KeyframeDataflow(obj, context.PropertyPath)).Select(selector); provider = (provider == null) ? p : provider.SameOrDefault(p); } return(provider); }
public void SetComponent(string text, IDataflowProvider <string> currentColorString) { if (Color4.TryParse(text, out var newColor)) { SetProperty(newColor); } else { editor.Text = SameValues() ? currentColorString.GetValue() : ManyValuesText; } }
public void SetComponent(string text, IDataflowProvider <string> currentColorString) { Color4 newColor; if (Color4.TryParse(text, out newColor)) { SetProperty(newColor); } else { editor.Text = currentColorString.GetValue(); } }
private void SetLink(int idx, IDataflowProvider <CoalescedValue <int> > indexProvider, IDataflowProvider <CoalescedValue <float> > weightProvider) { var currentIndexValue = indexProvider.GetValue(); var currentWeightValue = weightProvider.GetValue(); indexEditors[idx].Submitted += text => SetIndexValue(EditorParams, idx, indexEditors[idx], currentIndexValue); weigthsEditors[idx].Submitted += text => SetWeightValue(EditorParams, idx, weigthsEditors[idx], currentWeightValue); indexEditors[idx].AddChangeLateWatcher(indexProvider, v => indexEditors[idx].Text = v.IsDefined ? v.Value.ToString() : ManyValuesText); weigthsEditors[idx].AddChangeLateWatcher(weightProvider, v => weigthsEditors[idx].Text = v.IsDefined ? v.Value.ToString("0.###") : ManyValuesText); ManageManyValuesOnFocusChange(indexEditors[idx], indexProvider); ManageManyValuesOnFocusChange(weigthsEditors[idx], weightProvider); }
public BezierHandle( int index, CommonPropertyEditor <BezierEasing> editor, IDataflowProvider <CoalescedValue <BezierEasing> > valueProvider, Action <BezierEasing> propertySetter, Widget canvas) { this.index = index; this.editor = editor; this.valueProvider = valueProvider; this.propertySetter = propertySetter; this.canvas = canvas; canvas.CompoundPostPresenter.Add(new SyncDelegatePresenter <Widget>(Render)); canvas.Tasks.Add(DragTask(canvas)); }
private void SelectPoint(GradientControlPoint point) { colorEditor.Tasks.Clear(); positionEditor.Tasks.Clear(); selectedPointColorProperty = new Property <Color4>(point, nameof(GradientControlPoint.Color)); selectedPointPositionProperty = new Property <float>(point, nameof(GradientControlPoint.Position)); currentColorString = selectedPointColorProperty.DistinctUntilChanged().Select(i => i.ToString(Color4.StringPresentation.Dec)); colorEditor.Tasks.Add(currentColorString.Consume(v => colorEditor.Text = v)); colorPanel.Color = selectedPointColorProperty.GetValue(); colorEditor.Tasks.Add(selectedPointColorProperty.DistinctUntilChanged().Consume(v => { if (colorPanel.Color != v) { colorPanel.Color = v; } })); positionEditor.Tasks.Add(selectedPointPositionProperty.DistinctUntilChanged().Consume(v => positionEditor.Text = v.ToString())); }
public ColorBoxButton(IDataflowProvider <Color4> colorProvider) { Nodes.Clear(); Size = MinMaxSize = new Vector2(25, Theme.Metrics.DefaultButtonSize.Y); var color = colorProvider.GetDataflow(); PostPresenter = new SyncDelegatePresenter <Widget>(widget => { widget.PrepareRendererState(); Renderer.DrawRect(Vector2.Zero, widget.Size, Color4.White); color.Poll(); var checkSize = new Vector2(widget.Width / 4, widget.Height / 3); for (int i = 0; i < 3; i++) { var checkPos = new Vector2(widget.Width / 2 + ((i == 1) ? widget.Width / 4 : 0), i * checkSize.Y); Renderer.DrawRect(checkPos, checkPos + checkSize, Color4.Black); } Renderer.DrawRect(Vector2.Zero, widget.Size, color.Value); Renderer.DrawRectOutline(Vector2.Zero, widget.Size, ColorTheme.Current.Inspector.BorderAroundKeyframeColorbox); }); }
public EasingEditorPanel( CommonPropertyEditor <BezierEasing> editor, IDataflowProvider <CoalescedValue <BezierEasing> > valueProvider, Action <BezierEasing> propertySetter) { this.valueProvider = valueProvider; canvas = new Widget { MinMaxSize = new Vector2(160, 120), Padding = new Thickness(6), LayoutCell = new LayoutCell(Alignment.Center), HitTestTarget = true }; Widget = new Frame { ClipChildren = ClipMethod.ScissorTest, Layout = new StackLayout(), Nodes = { canvas, new Widget() } }; new BezierHandle(0, editor, valueProvider, propertySetter, canvas); new BezierHandle(1, editor, valueProvider, propertySetter, canvas); canvas.CompoundPostPresenter.Add(new SyncDelegatePresenter <Widget>(RenderSpline)); canvas.CompoundPostPresenter.Add(new WidgetBoundsPresenter(ColorTheme.Current.Inspector.BorderAroundKeyframeColorbox)); }
public static IDataflowProvider <R> Select <T, R>(this IDataflowProvider <T> arg, Func <T, R> selector) { return(new DataflowProvider <R>(() => new SelectProvider <T, R>(arg.GetDataflow(), selector))); }
public static IDataflowProvider <Tuple <T1, T2> > Coalesce <T1, T2>(this IDataflowProvider <T1> arg1, IDataflowProvider <T2> arg2) { return(new DataflowProvider <Tuple <T1, T2> >(() => new CoalesceProvider <T1, T2>(arg1.GetDataflow(), arg2.GetDataflow()))); }
public static void AddChangeLateWatcher <T>(this Widget widget, IDataflowProvider <T> provider, Action <T> action) { widget.LateTasks.Add(provider.DistinctUntilChanged().Consume(action)); }
public static IDataflowProvider <T> Where <T>(this IDataflowProvider <T> arg, Predicate <T> predicate) { return(new DataflowProvider <T>(() => new WhereProvider <T>(arg.GetDataflow(), predicate))); }
public static void AddChangeLateWatcher <T>(this Node node, IDataflowProvider <T> provider, Action <T> action) { node.Components.GetOrAdd <LateConsumeBehaviour>().Add(provider.DistinctUntilChanged().Consume(action)); }
public static IDataflowProvider <T> DistinctUntilChanged <T>(this IDataflowProvider <T> arg) { return(new DataflowProvider <T>(() => new DistinctUntilChangedProvider <T>(arg.GetDataflow()))); }
public static Consumer <T> WhenChanged <T>(this IDataflowProvider <T> arg, Action <T> action) { return(DistinctUntilChanged(arg).Consume(action)); }
public static IDataflowProvider <T> SameOrDefault <T>(this IDataflowProvider <T> arg1, IDataflowProvider <T> arg2, T defaultValue = default(T)) { return(new DataflowProvider <T>(() => new SameOrDefaultProvider <T>(arg1.GetDataflow(), arg2.GetDataflow(), defaultValue))); }
public static IDataflowProvider <T> Skip <T>(this IDataflowProvider <T> arg, int count) { return(new DataflowProvider <T>(() => new SkipProvider <T>(arg.GetDataflow(), count))); }
public static Consumer <T> Consume <T>(this IDataflowProvider <T> arg, Action <T> action) { return(new Consumer <T>(arg.GetDataflow(), action)); }