aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Converters/MarginOffsetSliderConverter .cs
blob: e71994e1d89ac326ca283a83613ce379f7b62bd0 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;

namespace Tango.PPC.Jobs.Converters
{
    public class MarginOffsetSliderConverter : IMultiValueConverter
    {
        private enum SliderType
        {
            Left = 1,
            Middle = 2,
            Right = 3
        };
       
        public MarginOffsetSliderConverter()
        {
           
        }


        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if(values.Count() < 3 )
                return new Thickness(0, 0, 0, 0);

            double sliderValue = System.Convert.ToDouble(values[0]);
            var slider_width = System.Convert.ToDouble(values[1]);
            if(slider_width == 0)
                return new Thickness(0, 0, 0, 0);

            if (slider_width > 10)
                slider_width -= 10;//thumb offset;
            
            double thumbPos = Math.Round((sliderValue * slider_width)/100, 0, MidpointRounding.AwayFromZero);

            SliderType type = (SliderType)Enum.Parse(typeof(SliderType), System.Convert.ToString(parameter));
            var widthOfText = System.Convert.ToDouble(values[2]);
            
            switch (type)
            {
                case SliderType.Left:
                    {
                        var leftOffset = Math.Max( 0,  thumbPos - widthOfText / 2);
                        var middleoffsetLeft = System.Convert.ToDouble(values[3]);
                        
                         if (middleoffsetLeft > widthOfText)
                                leftOffset = Math.Min(leftOffset, (middleoffsetLeft - widthOfText - 5));
                     
                        return new Thickness(leftOffset, 0, 0, 0);
                    }
                   
                case SliderType.Middle:
                    {
                        var leftoffsetTextWidth = System.Convert.ToDouble(values[3]);
                        var rightoffsetTextWidth = System.Convert.ToDouble(values[4]);

                        var middleOffset = Math.Max(leftoffsetTextWidth + 5, thumbPos - widthOfText / 2);
                        var rightBorder = rightoffsetTextWidth > 0 ? (slider_width - (rightoffsetTextWidth + 12)) : slider_width - (widthOfText + 12);
                        
                        middleOffset = Math.Min(middleOffset , (rightBorder - widthOfText));

                        
                        return new Thickness(middleOffset, 0, 0, 0);
                    }
                   
                case SliderType.Right:
                    {
                        var middleoffsetBorder = System.Convert.ToDouble(values[3]);
                        var middleoffsetBorderWidth = System.Convert.ToDouble(values[4]);

                        var rightOffset = Math.Min((slider_width - widthOfText), thumbPos - widthOfText/2);
                        rightOffset = Math.Max(((middleoffsetBorder + middleoffsetBorderWidth) + 12), rightOffset);
                        return new Thickness(rightOffset, 0, 0, 0);
                    }
            }
            return new Thickness(thumbPos, 0, 0, 0);
                           
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            return null;
        }
    }
}