aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Converters/BrushStopToOffsetLimitConverter.cs
blob: eb98fe7942e5e198fc71991876028c496a458049 (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
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using Tango.BL.Entities;

namespace Tango.MachineStudio.Developer.Converters
{
    public class BrushStopToOffsetLimitConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            try
            {
                BrushStop stop = values[0] as BrushStop;
                Segment segment = values[1] as Segment;
                String sign = parameter.ToString();

                if (stop != null && segment != null)
                {

                    if (stop.IsLast)
                    {
                        return 100d;
                    }
                    else if (stop.IsFirst)
                    {
                        return 0d;
                    }
                    else
                    {
                        return sign == "min" ? 0 : 100d;
                    }
                }
                else
                {
                    return 100d;
                }
            }
            catch
            {
                return 100d;
            }
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
class="c1">/// <summary> /// Gets the location of the next new line character, or SimpleSegment.Invalid /// if none is found. /// </summary> internal static SimpleSegment NextNewLine(ITextSource text, int offset) { int textLength = text.TextLength; int pos = text.IndexOfAny(newline, offset, textLength - offset); if (pos >= 0) { if (text.GetCharAt(pos) == '\r') { if (pos + 1 < textLength && text.GetCharAt(pos + 1) == '\n') return new SimpleSegment(pos, 2); } return new SimpleSegment(pos, 1); } return SimpleSegment.Invalid; } } partial class TextUtilities { /// <summary> /// Finds the next new line character starting at offset. /// </summary> /// <param name="text">The text source to search in.</param> /// <param name="offset">The starting offset for the search.</param> /// <param name="newLineType">The string representing the new line that was found, or null if no new line was found.</param> /// <returns>The position of the first new line starting at or after <paramref name="offset"/>, /// or -1 if no new line was found.</returns> public static int FindNextNewLine(ITextSource text, int offset, out string newLineType) { if (text == null) throw new ArgumentNullException("text"); if (offset < 0 || offset > text.TextLength) throw new ArgumentOutOfRangeException("offset", offset, "offset is outside of text source"); SimpleSegment s = NewLineFinder.NextNewLine(text, offset); if (s == SimpleSegment.Invalid) { newLineType = null; return -1; } else { if (s.Length == 2) { newLineType = "\r\n"; } else if (text.GetCharAt(s.Offset) == '\n') { newLineType = "\n"; } else { newLineType = "\r"; } return s.Offset; } } /// <summary> /// Gets whether the specified string is a newline sequence. /// </summary> public static bool IsNewLine(string newLine) { return newLine == "\r\n" || newLine == "\n" || newLine == "\r"; } /// <summary> /// Normalizes all new lines in <paramref name="input"/> to be <paramref name="newLine"/>. /// </summary> public static string NormalizeNewLines(string input, string newLine) { if (input == null) return null; if (!IsNewLine(newLine)) throw new ArgumentException("newLine must be one of the known newline sequences"); SimpleSegment ds = NewLineFinder.NextNewLine(input, 0); if (ds == SimpleSegment.Invalid) // text does not contain any new lines return input; StringBuilder b = new StringBuilder(input.Length); int lastEndOffset = 0; do { b.Append(input, lastEndOffset, ds.Offset - lastEndOffset); b.Append(newLine); lastEndOffset = ds.EndOffset; ds = NewLineFinder.NextNewLine(input, lastEndOffset); } while (ds != SimpleSegment.Invalid); // remaining string (after last newline) b.Append(input, lastEndOffset, input.Length - lastEndOffset); return b.ToString(); } /// <summary> /// Gets the newline sequence used in the document at the specified line. /// </summary> public static string GetNewLineFromDocument(TextDocument document, int lineNumber) { DocumentLine line = document.GetLineByNumber(lineNumber); if (line.DelimiterLength == 0) { // at the end of the document, there's no line delimiter, so use the delimiter // from the previous line line = line.PreviousLine; if (line == null) return Environment.NewLine; } return document.GetText(line.Offset + line.Length, line.DelimiterLength); } } }