private BMDatabase GetSelectedDB()
        {
            BMDeviceRecordVM selected = _listDevices.SelectedItem as BMDeviceRecordVM;

            if (selected != null && selected.Database != null)
            {
                return(selected.Database);
            }
            return(null);
        }
        private void UpdateOrAddBMDeviceRecordVM(BMDatabase db)
        {
            BMDeviceRecordVM dev = _devices.FirstOrDefault(d => d.DeviceAddress == db.Device.Address);

            if (dev == null)
            {
                dev = new BMDeviceRecordVM(db);
                _devices.Add(dev);
            }
            dev.Index = _devices.IndexOf(dev);
            dev.Update(db);
        }
        private void UpdateChartFromSelectedDB(BMDatabase db)
        {
            if (_isInUpdate)
            {
                return;
            }
            _isInUpdate = true;

            DateTime startUpdateTime = DateTime.Now;

            this.Title = "Barometer - " + db.Device;

            this.Cursor = Cursors.AppStarting;

            db.Units.TemperatureUnits.Units = (eTemperatureUnits)_cmbTemperatureUnits.SelectedItem;
            db.Units.AirPressureUnits.Units = (eAirPressureUnits)_cmbAirPressureUnits.SelectedItem;

            double   days     = double.Parse(((ComboBoxItem)_cmbDays.SelectedItem).Tag.ToString());
            TimeSpan daysBack = TimeSpan.FromDays(days);

            List <BMRecordCurrent> recordsIn = db.GetLastRecords(daysBack);

            List <BMRecordCurrent> recordsOut;
            //bool isIntervalZoom = false;
            //if (isIntervalZoom)
            //{
            //    if (_chkAutoZoom.IsChecked.Value)
            //    {
            //        int bucketSize = db.Records.Count / 1000; //1000 records after zoom
            //        _sliderDillute.Value = Math.Ceiling(Math.Pow(bucketSize, 0.5));
            //    }

            //    int zoom = (int)Math.Pow(2, _sliderDillute.Value);
            //    _txtDilluteValue.Text = string.Format("Dillute x{0:0.0}", zoom);

            //    recordsOut = db.DilluteByPointAndConvertUnits(recordsIn, zoom);
            //}
            //else //dillute by time
            {
                double bucketIntervalInSec = 60 * double.Parse(((ComboBoxItem)_cmbInterval.SelectedItem).Tag.ToString());
                if (_chkAutoZoom.IsChecked.Value)
                {
                    bucketIntervalInSec = 15;
                    //_cmbInterval.SelectedIndex = 0; //all
                    if (recordsIn.Count >= BMDatabase.MIN_RECORDS_TO_FILTER)
                    {
                        TimeSpan range = recordsIn.Last().Date - recordsIn.First().Date;
                        bucketIntervalInSec = range.TotalSeconds / 1000; //interval in seconds to get 1000 points
                        bucketIntervalInSec = GetClosestIntervalAndSetSelectInComboBox(bucketIntervalInSec);
                    }
                }

                ////////
                //
                recordsOut = BMDatabase.DilluteByTime(recordsIn, bucketIntervalInSec);
            }

            BMDeviceRecordVM dev = _listDevices.SelectedItem as BMDeviceRecordVM;

            _chart1.UpdateChartTemperature(recordsOut, db.Units, dev.IsActive);
            _chart2.UpdateChartHumidity(recordsOut, db.Units, dev.IsActive);
            _chart3.UpdateChartAirPressure(recordsOut, db.Units, dev.IsActive);

            TimeSpan tsElapsed = DateTime.Now - startUpdateTime;

            _txtDilluteResult.Text = string.Format("Total: {0:###,###} -> {1:###,###} -> {2} ({3:0.0} ms)",
                                                   db.Records.Count, recordsIn.Count, recordsOut.Count, tsElapsed.TotalMilliseconds);

            this.Cursor = Cursors.Arrow;

            _isInUpdate = false;
        }