Fix stringsource parsing to that apostrophes don't count as quotes.
[schedulator.git] / fixfor.cs
blob56807e155f3c8cd247df4b1fbda4d6087ae59c16
1 using System;
2 using System.Collections;
3 using Wv;
4 using Wv.Obsolete;
6 namespace Wv.Schedulator
8 public class FixFor : IComparable
10 public Project project;
11 public string name;
12 SortedHash release_dates = new SortedHash();
13 public DateSlider default_habits;
15 public FixFor(Project project, string name)
17 if (project != null)
18 this.project = project;
19 this.name = name;
22 public static string date_string(DateTime date)
24 return String.Format("{0:d4}-{1:d2}-{2:d2}",
25 date.Year, date.Month, date.Day);
28 public void add_release(DateTime release_date)
30 release_date = release_date.Date; // round to nearest day
31 if (!release_dates.Contains(date_string(release_date)))
33 release_dates.Add(date_string(release_date), release_date);
34 release_dates.Sort(); // fast enough...
38 public DateTime release_after(DateTime now)
40 foreach (DateTime d in release_dates)
42 if (d >= now)
43 return d;
45 return DateTime.MaxValue;
48 public DateTime final_release
50 get
52 if (release_dates.Count > 0)
53 return (DateTime)release_dates[release_dates.Count-1];
54 else
55 return DateTime.MinValue; // undefined: rise to the top
59 public IList releases
61 get
63 return (ArrayList)release_dates;
67 public int CompareTo(object _y)
69 FixFor y = (FixFor)_y;
70 if (y == null)
71 return 1; // null fixfors come first in the list
72 else if (final_release != y.final_release)
73 return DateTime.Compare(final_release, y.final_release);
74 else if (project != y.project)
75 return project.CompareTo(y.project);
76 else if (name != y.name)
77 return name.CompareTo(y.name);
78 else
79 return 0; // I give up! They're the same!
84 public class FixForList : SortedHash
86 protected string make_key(Project project, string name)
88 return project.name + "\0" + name;
91 public FixFor Add(Project project, string name)
93 FixFor f = Find(project, name);
94 if (f == null)
96 f = new FixFor(project, name);
97 base.Add(make_key(project, name), f);
99 return f;
102 public FixFor Add(Project project, string name, DateTime date)
104 FixFor f = Add(project, name);
105 f.add_release(date);
106 return f;
109 #pragma warning disable 0109 // appease mono 1.1.13.6
110 public new virtual FixFor this[int index]
112 get { return (FixFor)base[index]; }
114 #pragma warning restore 0109
116 public FixFor Find(Project project, string name)
118 return (FixFor)base.Find(make_key(project, name));