/// <summary> /// Porovná dvě instance <see cref="TimeGraphGroup"/> podle <see cref="ITimeGraphItem.Order"/> ASC, <see cref="ITimeGraphItem.Time"/> ASC /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static int CompareOrderTimeAsc(TimeGraphGroup a, TimeGraphGroup b) { int cmp = a._FirstItem.Order.CompareTo(b._FirstItem.Order); if (cmp == 0) { cmp = TimeRange.CompareByBeginAsc(a.Time, b.Time); } return(cmp); }
/// <summary> /// Konstruktor s předáním skupiny položek, s výpočtem jejich sumárního časového intervalu a výšky /// </summary> /// <param name="parent"></param> /// <param name="acceptZeroTime">Požadavek true = jako platný prvek lze akceptovat i prvek, jehož čas End == čas Begin; false = čas End musí být větší než Begin.</param> /// <param name="items"></param> public TimeGraphGroup(TimeGraph parent, bool acceptZeroTime, IEnumerable <ITimeGraphItem> items) : this(parent) { // Vstupní prvky (items) mohou být (ze vstupních dat) nesetříděné podle jejich času, // ale pro korektní fungování grupy musí být prvky v jedné grupě setříděny. List <ITimeGraphItem> itemList = items.ToList(); if (itemList.Count > 1) { itemList.Sort((a, b) => TimeRange.CompareByBeginAsc(a.Time, b.Time)); } this._Items = itemList.ToArray(); DateTime?begin = null; DateTime?end = null; float? height = null; bool canResize = false; foreach (ITimeGraphItem item in this.Items) { this._PrepareGControlItem(item); // Připravím GUI prvek pro jednotlivý prvek grafu za item, jeho parentem bude grafický prvek této grupy (=this.ControlBuffered) if (this._FirstItem == null) { this._FirstItem = item; } if (item.Height.HasValue && (!height.HasValue || item.Height.Value > height.Value)) { height = item.Height; } if (item.Time.Begin.HasValue && (!begin.HasValue || item.Time.Begin.Value < begin.Value)) { begin = item.Time.Begin; } if (item.Time.End.HasValue && (!end.HasValue || item.Time.End.Value > end.Value)) { end = item.Time.End; } if (!canResize && item.BehaviorMode.HasFlag(GraphItemBehaviorMode.ResizeTime)) { canResize = true; } if (!acceptZeroTime && (item.ImageBegin != null || item.ImageEnd != null)) { acceptZeroTime = true; } item.OwnerGraph = parent; } this._Store(begin, end, acceptZeroTime, height, canResize); }