aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/ExtensionMethods/ObservableCollectionExtensions.cs
blob: c539273d924361a8ed3622b23011b51a12ea4143 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;

public static class ObservableCollectionExtensions
{
    public static ObservableCollection<T> ToObservableCollectionAsyncIdle<T>(this ObservableCollection<T> source)
    {
        var copy = source.ToList();
        ObservableCollection<T> result = new ObservableCollection<T>();

        foreach (var item in copy)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                result.Add(item);
            }), DispatcherPriority.ContextIdle);
        }

        return result;
    }

    public static void ReloadAsyncIdle<T>(this ObservableCollection<T> source, Action<int, int> onProgress, Action onComplete = null)
    {
        var copy = source.ToList();
        source.Clear();

        int count = copy.Count;
        int completed = 0;

        foreach (var item in copy)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                source.Add(item);
                completed++;

                onProgress?.Invoke(completed, count);

                if (completed == count)
                {
                    onComplete?.Invoke();
                }
            }), DispatcherPriority.ContextIdle);
        }
    }
}
="c1">/// The result of the operator. /// </returns> public static Int32DataPoint operator -(Int32DataPoint a, Int32DataPoint b) { return new Int32DataPoint(a.Value - b.Value); } /// <summary> /// Implements the operator +. /// </summary> /// <param name="a">a.</param> /// <param name="b">The b.</param> /// <returns> /// The result of the operator. /// </returns> public static Int32DataPoint operator +(Int32DataPoint a, Int32DataPoint b) { return new Int32DataPoint(a.Value + b.Value); } /// <summary> /// Sums the value of this instance with another instance value and returns the result. /// </summary> /// <param name="other">The other instance.</param> /// <returns></returns> public override IGraphDataPoint Add(IGraphDataPoint other) { return new Int32DataPoint(this.Value + (other as Int32DataPoint).Value); } /// <summary> /// Subtract the value of another instance from this instance and returns the result. /// </summary> /// <param name="other">The other instance.</param> /// <returns></returns> public override IGraphDataPoint Subtract(IGraphDataPoint other) { return new Int32DataPoint(this.Value - (other as Int32DataPoint).Value); } /// <summary> /// Multiplies the value of this instance with another instance value and returns the result. /// </summary> /// <param name="other">The other instance.</param> /// <returns></returns> public override IGraphDataPoint Multiply(IGraphDataPoint other) { return new Int32DataPoint(this.Value * (other as Int32DataPoint).Value); } /// <summary> /// Divides the value of this instance with another instance value and returns the result. /// </summary> /// <param name="other">The other instance.</param> /// <returns></returns> public override IGraphDataPoint Divide(IGraphDataPoint other) { return new Int32DataPoint(this.Value / (other as Int32DataPoint).Value); } /// <summary> /// Returns the percentage value of this instance between the specified minimum and maximum values. /// </summary> /// <param name="min">The minimum.</param> /// <param name="max">The maximum.</param> /// <returns></returns> public override double ComputeRelativePosition(IGraphDataPoint min, IGraphDataPoint max) { Int32DataPoint dMin = min as Int32DataPoint; Int32DataPoint dMax = max as Int32DataPoint; var result = ((Value - dMin) * 100) / (dMax - dMin); return result; } /// <summary> /// Returns the absolute value of the specified percentage value between the specified minimum and maximum values. /// </summary> /// <param name="min">The minimum.</param> /// <param name="max">The maximum.</param> /// <param name="percentage">The percentage.</param> /// <returns></returns> public override IGraphDataPoint ComputeAbsolutePosition(IGraphDataPoint min, IGraphDataPoint max, double percentage) { int minimum = (int)min.GetValue(); int maximum = (int)max.GetValue(); return new Int32DataPoint((int)(minimum + (maximum - minimum) * percentage)); } /// <summary> /// Creates a range of values from the specified minimum and maximum. /// </summary> /// <param name="min">The minimum.</param> /// <param name="max">The maximum.</param> /// <param name="count">The count.</param> /// <returns></returns> public override IEnumerable<IGraphDataPoint> CreateRange(IGraphDataPoint min, IGraphDataPoint max, int count) { int minimum = (int)min.GetValue(); int maximum = (int)max.GetValue(); return Enumerable.Range(0, count). Select(i => minimum + (maximum - minimum) * ((int)i / (count - 1))). Select(x => new Int32DataPoint(x)); } /// <summary> /// Returns a formated string of this data point. /// </summary> /// <param name="format">The format.</param> /// <returns></returns> public override string ToString(string format) { return Value.ToString(format); } } }