private string GetUnitText(TimelineDateTime tlcdate) { switch (this.ZoomUnit) { case TimelineUnits.Minute: return(""); case TimelineUnits.Hour: return(tlcdate.Hour.ToString() + ":00"); case TimelineUnits.Day: return(tlcdate.Day.ToString() + "." + shortMonthNames[tlcdate.Month - 1]); case TimelineUnits.Month: return(shortMonthNames[tlcdate.Month - 1]); case TimelineUnits.Year: return(tlcdate.Year.ToString()); case TimelineUnits.Decade: return(tlcdate.Decade.ToString() + "0"); case TimelineUnits.Century: return(tlcdate.Century.ToString() + "00"); default: return(""); } }
private void SetLaneBusy(int lane, TimelineDateTime tld) { if (laneBusyUntil[lane] == null) { laneBusyUntil[lane] = new TimelineDateTime(DateTime.UtcNow); } tld.CopyTo(ref laneBusyUntil[lane]); }
public MTimelineEvent(string _title, TimelineDateTime _startdate, int _length = 1) { Title = _title; startDate = _startdate; endDate = new TimelineDateTime(DateTime.UtcNow); startDate.CopyTo(ref endDate); endDate.Add(_length); }
void GestureRecognizer_OnGestureRecognized(object sender, TouchGestureEventArgs args) { switch (args.Type) { case TouchGestureType.Tap: //Console.WriteLine("TAP"); break; case TouchGestureType.LongTap: //Console.WriteLine("LONGTAP"); break; case TouchGestureType.Pan: //Console.WriteLine("PAN"); try { date.AddTicks(-2 * (Int64)args.Data.X * pixeltime); } catch (OverflowException) { if (args.Data.X < 0) { date = TimelineDateTime.MaxValue; } else { date = TimelineDateTime.MinValue; } } DateStr = date.DateStr(ZoomUnit - 1); canvasView.InvalidateSurface(); break; case TouchGestureType.Pinch: //Console.WriteLine("PINCH - " + args.Data.ToString()); Zoom -= Zoom * 0.005 * args.Data.X; if (Zoom < 4) { Zoom = 4; } if (Zoom > 2073600) { Zoom = 2073600; } pixeltime = (Int64)(Zoom * TimeSpan.TicksPerSecond); //Console.WriteLine("Zoom: " + Zoom.ToString() + " pixeltime: " + pixeltime.ToString()); AdjustZoomUnit(); DateStr = date.DateStr(ZoomUnit - 1); canvasView.InvalidateSurface(); break; case TouchGestureType.Swipe: //Console.WriteLine("SWIPE"); break; } }
public VMTimeline(Services.Base.ServiceContainer services) : base(services) { Timeline = new MTimeline(); TimelineDateTime tld = new TimelineDateTime(2018, 1); for (int i = 0; i < 10; i++) { Timeline.Events.Add(new MTimelineEvent("event1", tld, 2)); tld.Add(); } }
private int GetFreeLane(TimelineDateTime tld) { for (int i = 0; i < 8; i++) { if ((laneBusyUntil[i] == null) || (laneBusyUntil[i] < tld)) { return(i); } } return(-1); }
private void DrawTimelineEvents(SKCanvas canvas) { TimelineDateTime minDate = TimelineDateTime.FromTicksCapped(date.Ticks - halfWidth * pixeltime); TimelineDateTime maxDate = TimelineDateTime.FromTicksCapped(date.Ticks + halfWidth * pixeltime); foreach (MTimelineEvent e in this.Timeline1.Events) { if ((e.EndDate.Ticks > minDate.Ticks) && (e.StartDate.Ticks < maxDate.Ticks)) { DrawTimelineEvent(e, canvas, minDate); } } }
private void DrawTimelineEvent(MTimelineEvent e, SKCanvas canvas, TimelineDateTime minDate) { float startX; float endX; float eventWidth; float eventTop; float eventBottom; int lane = GetFreeLane(e.StartDate); SetLaneBusy(lane, e.EndDate); startX = (e.StartDate.Ticks - minDate.Ticks) / pixeltime; endX = (e.EndDate.Ticks - minDate.Ticks) / pixeltime - 1; eventWidth = endX - startX; eventTop = eventsTopY + lane * laneHeight; eventBottom = eventTop + laneHeight - 1; canvas.DrawRect(startX, eventTop, endX - startX, eventBottom - eventTop, eventPaint); canvas.DrawRect(startX, eventTop, endX - startX, eventBottom - eventTop, eventBorderPaint); }
public TimelineControl() { InitializeComponent(); gestureRecognizer = new TouchGestureRecognizer(); gestureRecognizer.OnGestureRecognized += GestureRecognizer_OnGestureRecognized; date = new TimelineDateTime(9900); unitDate = new TimelineDateTime(); subUnitDate = new TimelineDateTime(); DateStr = date.DateStr(ZoomUnit); pixeltime = (Int64)(Zoom * TimeSpan.TicksPerSecond); showSubUnitText = false; initialOrientationCheck = true; timelinePaint = new SKPaint(); unitMarkPaint = new SKPaint(); unitTextPaint = new SKPaint(); subUnitMarkPaint = new SKPaint(); subUnitTextPaint = new SKPaint(); highlightPaint = new SKPaint(); eventPaint = new SKPaint(); eventPaint.StrokeWidth = 2; eventPaint.Color = Color.DarkGray.ToSKColor(); eventPaint.Style = SKPaintStyle.Fill; eventBorderPaint = new SKPaint(); eventBorderPaint.Color = Color.Black.ToSKColor(); eventBorderPaint.StrokeWidth = 4; eventBorderPaint.Style = SKPaintStyle.Stroke; eventTextPaint = new SKPaint(); eventTextPaint.Color = Color.Black.ToSKColor(); eventTextPaint.TextSize = 16; }