using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.Core.Commands; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Logging.Views; using Tango.SharedUI; namespace Tango.MachineStudio.Logging.ViewModels { public class TimelineViewVM : ViewModel { private ObservableCollection _timelineEventGroups; public ObservableCollection TimelineEventGroups { get { return _timelineEventGroups; } set { _timelineEventGroups = value; RaisePropertyChangedAuto(); } } private TimeSpan _timelineMaxTime; public TimeSpan TimelineMaxTime { get { return _timelineMaxTime; } set { _timelineMaxTime = value; RaisePropertyChangedAuto(); } } private double _timelineScaleFactor; public double TimelineScaleFactor { get { return _timelineScaleFactor; } set { if (value < 0.1) value = 0.1; _timelineScaleFactor = value; RaisePropertyChangedAuto(); } } private TimeSpan _currentPosition; public TimeSpan CurrentPosition { get { return _currentPosition; } set { _currentPosition = value; RaisePropertyChangedAuto(); } } private bool _enableTimeMarker; public bool EnableTimeMarker { get { return _enableTimeMarker; } set { _enableTimeMarker = value; RaisePropertyChangedAuto(); } } public RelayCommand EventSelectedCommand { get; set; } public TimelineViewVM(INotificationProvider notification) { TimelineScaleFactor = 10; TimelineEventGroups = new ObservableCollection(); EventSelectedCommand = new RelayCommand((ev) => { notification.ShowModalDialog(new EventDetailsViewVM(ev), (x) => { }, () => { }); }); } public void Initialize(List events) { TimelineEventGroups = new ObservableCollection(); if (events != null && events.Count > 0) { foreach (var group in events.GroupBy(x => x.Group)) { TimelineEventGroup evGroup = new TimelineEventGroup(group.Key.ToString().ToWords()); foreach (var e in group) { evGroup.Events.Add(e); } TimelineEventGroups.Add(evGroup); } TimelineMaxTime = events.Max(x => x.DateTime) - events.Min(x => x.DateTime); } } } }