예제 #1
0
        public void CanRoundTrip()
        {
            // Level Zero Interval
            Assert.AreEqual("1964/2008", ExtendedDateTimeInterval.Parse("1964/2008").ToString());
            Assert.AreEqual("2004-06/2006-08", ExtendedDateTimeInterval.Parse("2004-06/2006-08").ToString());
            Assert.AreEqual("2004-02-01/2005-02-08", ExtendedDateTimeInterval.Parse("2004-02-01/2005-02-08").ToString());
            Assert.AreEqual("2004-02-01/2005-02", ExtendedDateTimeInterval.Parse("2004-02-01/2005-02").ToString());
            Assert.AreEqual("2004-02-01/2005", ExtendedDateTimeInterval.Parse("2004-02-01/2005").ToString());
            Assert.AreEqual("2005/2006-02", ExtendedDateTimeInterval.Parse("2005/2006-02").ToString());

            // Level One Interval
            Assert.AreEqual("unknown/2006", ExtendedDateTimeInterval.Parse("unknown/2006").ToString());
            Assert.AreEqual("2004-06-01/unknown", ExtendedDateTimeInterval.Parse("2004-06-01/unknown").ToString());
            Assert.AreEqual("2004-01-01/open", ExtendedDateTimeInterval.Parse("2004-01-01/open").ToString());
            Assert.AreEqual("1984~/2004-06", ExtendedDateTimeInterval.Parse("1984~/2004-06").ToString());
            Assert.AreEqual("1984/2004-06~", ExtendedDateTimeInterval.Parse("1984/2004-06~").ToString());
            Assert.AreEqual("1984~/2004~", ExtendedDateTimeInterval.Parse("1984~/2004~").ToString());
            Assert.AreEqual("1984?/2004?~", ExtendedDateTimeInterval.Parse("1984?/2004?~").ToString());
            Assert.AreEqual("1984-06?/2004-08?", ExtendedDateTimeInterval.Parse("1984-06?/2004-08?").ToString());
            Assert.AreEqual("1984-06-02?/2004-08-08~", ExtendedDateTimeInterval.Parse("1984-06-02?/2004-08-08~").ToString());
            Assert.AreEqual("1984-06-02?/unknown", ExtendedDateTimeInterval.Parse("1984-06-02?/unknown").ToString());

            // Level Two Interval
            Assert.AreEqual("2004-06-(01)~/2004-06-(20)~", ExtendedDateTimeInterval.Parse("2004-06-(01)~/2004-06-(20)~").ToString());
            Assert.AreEqual("2004-06-uu/2004-07-03", ExtendedDateTimeInterval.Parse("2004-06-uu/2004-07-03").ToString());
        }
 public ComposerEventViewModel(string label, ExtendedDateTimeInterval dates, Composer composer, Brush background, Brush foreground, IEnumerable<ComposerEraViewModel> eras, ICommand clickCommand)
 {
     _dates = dates;
     _composer = composer;
     _background = background;
     _foreground = foreground;
     _label = label;
     _eras = eras;
     _clickCommand = clickCommand;
 }
예제 #3
0
        public ComposerEraViewModel(string label, ExtendedDateTimeInterval dates, Brush background, SolidColorBrush foreground)
        {
            _dates = dates;

            if ((ExtendedDateTime)dates.End == ExtendedDateTime.Open)
            {
                _dates.End = ExtendedDateTime.Now;
            }

            _background = background;
            _foreground = foreground;
            _label = label;
        }
예제 #4
0
        public override object ConvertFrom(ITypeDescriptorContext context, Globalization.CultureInfo culture, object value)
        {
            if (value == null)
            {
                throw GetConvertFromException(value);
            }

            var source = value as string;

            if (source != null)
            {
                return(ExtendedDateTimeInterval.Parse(source));
            }

            return(base.ConvertFrom(context, culture, value));
        }
예제 #5
0
        public double ToPixels(ExtendedDateTimeInterval dates)
        {
            switch (TimeRulerUnit)
            {
                case TimeRulerUnit.Day:
                    return dates.Span().TotalDays * TimeUnitWidth;

                case TimeRulerUnit.Hour:
                    return dates.Span().TotalHours * TimeUnitWidth;

                case TimeRulerUnit.Minute:
                    return dates.Span().TotalMinutes * TimeUnitWidth;

                case TimeRulerUnit.Second:
                    return dates.Span().TotalSeconds * TimeUnitWidth;

                default:
                    return double.NaN;
            }
        }
예제 #6
0
        internal static string Serialize(ExtendedDateTimeInterval extendedDateTimeInterval)
        {
            var stringBuilder = new StringBuilder();

            if (extendedDateTimeInterval.Start == null)
            {
                return("Error: An interval must have both a start and end defined. Use \"ExtendedDateTime.Unknown\" if the date is unknown.");
            }

            stringBuilder.Append(extendedDateTimeInterval.Start.ToString());

            stringBuilder.Append("/");

            if (extendedDateTimeInterval.End == null)
            {
                return("Error: An interval must have both a start and end defined. Use \"ExtendedDateTime.Unknown\" if the date is unknown.");
            }

            stringBuilder.Append(extendedDateTimeInterval.End.ToString());

            return(stringBuilder.ToString());
        }
예제 #7
0
        internal static ExtendedDateTimeInterval Parse(string extendedDateTimeIntervalString, ExtendedDateTimeInterval extendedDateTimeInterval = null)
        {
            if (string.IsNullOrWhiteSpace(extendedDateTimeIntervalString))
            {
                return(null);
            }

            var intervalPartStrings = extendedDateTimeIntervalString.Split(new char[] { '/' });

            if (intervalPartStrings.Length != 2)
            {
                throw new ParseException("An interval string must contain exactly one forward slash.", extendedDateTimeIntervalString);
            }

            var startString = intervalPartStrings[0];
            var endString   = intervalPartStrings[1];

            if (extendedDateTimeInterval == null)
            {
                extendedDateTimeInterval = new ExtendedDateTimeInterval();
            }

            if (startString[0] == '{')
            {
                throw new ParseException("An interval cannot contain a collection.", startString);
            }

            if (startString == "unknown")
            {
                extendedDateTimeInterval.Start = ExtendedDateTime.Unknown;
            }
            else if (startString == "open")
            {
                extendedDateTimeInterval.Start = ExtendedDateTime.Open;
            }
            else if (startString[0] == '[')
            {
                extendedDateTimeInterval.Start = ExtendedDateTimePossibilityCollectionParser.Parse(startString);
            }
            else if (startString.ContainsBefore('u', '^'))
            {
                extendedDateTimeInterval.Start = UnspecifiedExtendedDateTimeParser.Parse(startString);
            }
            else
            {
                extendedDateTimeInterval.Start = ExtendedDateTimeParser.Parse(startString);
            }

            if (endString[0] == '{')
            {
                throw new ParseException("An interval cannot contain a collection.", startString);
            }

            if (endString == "unknown")
            {
                extendedDateTimeInterval.End = ExtendedDateTime.Unknown;
            }
            else if (endString == "open")
            {
                extendedDateTimeInterval.End = ExtendedDateTime.Open;
            }
            else if (endString[0] == '[')
            {
                extendedDateTimeInterval.End = ExtendedDateTimePossibilityCollectionParser.Parse(endString);
            }
            else if (endString.ContainsBefore('u', '^'))
            {
                extendedDateTimeInterval.End = UnspecifiedExtendedDateTimeParser.Parse(endString);
            }
            else
            {
                extendedDateTimeInterval.End = ExtendedDateTimeParser.Parse(endString);
            }

            return(extendedDateTimeInterval);
        }