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);
        }
Beispiel #2
0
        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();
            }
        }
Beispiel #3
0
        public static T GetValue <T>(this IDataflowProvider <T> arg)
        {
            var dataflow = arg.GetDataflow();

            dataflow.Poll();
            return(dataflow.Value);
        }
Beispiel #4
0
 public void SetComponent(string text, IDataflowProvider <float> current)
 {
     if (Parser.TryParse(text, out double newValue))
     {
         SetProperty((float)newValue);
     }
     editor.Text = current.GetValue().ToString("0.###");
 }
Beispiel #5
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);
        }
Beispiel #6
0
        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());
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
 public void SetComponent(string text, IDataflowProvider <string> currentColorString)
 {
     if (Color4.TryParse(text, out var newColor))
     {
         SetProperty(newColor);
     }
     else
     {
         editor.Text = SameValues() ? currentColorString.GetValue() : ManyValuesText;
     }
 }
Beispiel #11
0
        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));
 }
Beispiel #14
0
 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()));
 }
Beispiel #15
0
            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));
 }
Beispiel #17
0
 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)));
 }
Beispiel #18
0
 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())));
 }
Beispiel #19
0
 public static void AddChangeLateWatcher <T>(this Widget widget, IDataflowProvider <T> provider, Action <T> action)
 {
     widget.LateTasks.Add(provider.DistinctUntilChanged().Consume(action));
 }
Beispiel #20
0
 public static IDataflowProvider <T> Where <T>(this IDataflowProvider <T> arg, Predicate <T> predicate)
 {
     return(new DataflowProvider <T>(() => new WhereProvider <T>(arg.GetDataflow(), predicate)));
 }
Beispiel #21
0
 public static void AddChangeLateWatcher <T>(this Node node, IDataflowProvider <T> provider, Action <T> action)
 {
     node.Components.GetOrAdd <LateConsumeBehaviour>().Add(provider.DistinctUntilChanged().Consume(action));
 }
Beispiel #22
0
 public static IDataflowProvider <T> DistinctUntilChanged <T>(this IDataflowProvider <T> arg)
 {
     return(new DataflowProvider <T>(() => new DistinctUntilChangedProvider <T>(arg.GetDataflow())));
 }
Beispiel #23
0
 public static Consumer <T> WhenChanged <T>(this IDataflowProvider <T> arg, Action <T> action)
 {
     return(DistinctUntilChanged(arg).Consume(action));
 }
Beispiel #24
0
 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)));
 }
Beispiel #25
0
 public static IDataflowProvider <T> Skip <T>(this IDataflowProvider <T> arg, int count)
 {
     return(new DataflowProvider <T>(() => new SkipProvider <T>(arg.GetDataflow(), count)));
 }
Beispiel #26
0
 public static Consumer <T> Consume <T>(this IDataflowProvider <T> arg, Action <T> action)
 {
     return(new Consumer <T>(arg.GetDataflow(), action));
 }