예제 #1
0
        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("");
            }
        }
예제 #2
0
 private void SetLaneBusy(int lane, TimelineDateTime tld)
 {
     if (laneBusyUntil[lane] == null)
     {
         laneBusyUntil[lane] = new TimelineDateTime(DateTime.UtcNow);
     }
     tld.CopyTo(ref laneBusyUntil[lane]);
 }
예제 #3
0
 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);
 }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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();
            }
        }
예제 #6
0
        private int GetFreeLane(TimelineDateTime tld)
        {
            for (int i = 0; i < 8; i++)
            {
                if ((laneBusyUntil[i] == null) || (laneBusyUntil[i] < tld))
                {
                    return(i);
                }
            }

            return(-1);
        }
예제 #7
0
        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);
                }
            }
        }
예제 #8
0
        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);
        }
예제 #9
0
        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;
        }