public ClockSelectionViewModel(AudioViewCountDownViewModel parent, ClockItem clockItem)
 {
     this.parent = parent;
     this.clockItem = clockItem;
 }
        public MeasurementViewModel(Guid id, MeasurementSettings settings, IMeterReader reader)
        {
            MinorReadings = new ConcurrentQueue<Tuple<DateTime, ReadingData>>();
            MajorReadings = new ConcurrentQueue<Tuple<DateTime, ReadingData>>();
            BarMajorValues = new ObservableCollection<Tuple<DateTime, double>>();
            BarMinorValues = new ObservableCollection<Tuple<DateTime, double>>();
            LineValues = new ObservableCollection<Tuple<DateTime, double>>();
            OctaveValues = new ObservableCollection<double>();
            MinorSpan = TimeSpan.FromTicks(settings.MinorInterval.Ticks * 15);
            MajorSpan = TimeSpan.FromTicks(settings.MajorInterval.Ticks * 15);


            started = DateTime.Now;
            popOutWindows = new LinkedList<MetroWindow>();
            this.engine = new AudioViewEngine(settings.MinorInterval, settings.MajorInterval, reader);
            this.settings = settings;

            this.engine.ConnectionStatusEvent += connected =>
            {
                if(ConnectionStatus == connected)
                    return; // No need

                Task.Run(() =>
                {
                    ConnectionStatus = connected;
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        OnPropertyChanged(nameof(IsDisconnected));
                    });
                });
            };
            
            if (settings.IsLocal)
            {
                // Registering the TCP Server for remote connections
                tcpServer = new TCPServerListener(settings);
                this.engine.RegisterListener(tcpServer);

                // Register the data storange unit
                dataStorage = new DataStorageMeterListener(id, DateTime.Now, settings);
                this.engine.RegisterListener(dataStorage);
            }

            this.engine.RegisterListener(this);
            this.engine.EngineStartDelayedEvent += (waitTime) =>
            {
                MinorClock = new AudioViewCountDownViewModel(false,
                        settings.MinorInterval,
                        settings.MinorDBLimit,
                        settings.MinorClockMainItemId,
                        settings.MinorClockSecondaryItemId);
                MajorClock = new AudioViewCountDownViewModel(true,
                        settings.MajorInterval,
                        settings.MajorDBLimit,
                        settings.MajorClockMainItemId,
                        settings.MajorClockSecondaryItemId);
                MinorClock.NextMinor(DateTime.Now + waitTime);
                MinorClock.NextMajor(DateTime.Now + waitTime);
                MajorClock.NextMinor(DateTime.Now + waitTime);
                MajorClock.NextMajor(DateTime.Now + waitTime);
            };
            this.engine.EngineStartedEvent += () =>
            {
                this.engine.RegisterListener(MinorClock);
                this.engine.RegisterListener(MajorClock);
            };
            this.engine.Start();

            Title = settings.ProjectName;
        }
 public ClockSelectionViewModel(AudioViewCountDownViewModel parent, ClockItem clockItem)
 {
     this.parent    = parent;
     this.clockItem = clockItem;
 }