예제 #1
0
        private void ResetButton_Click(object sender, RoutedEventArgs e)
        {
            BMDatabase db = GetSelectedDB();

            if (db != null)
            {
                db.Records.Clear();
                UpdateDeviceList();
                UpdateChart();
            }
        }
예제 #2
0
        private void UpdateChart(BluetoothDevice device = null)
        {
            BMDatabase selected = GetSelectedDB();

            if (selected != null)
            {
                if (device == null || selected.Device.Address == device.Address)
                {
                    UpdateChartFromSelectedDB(selected);
                }
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        private void _listDevices_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            BMDatabase db = GetSelectedDB();

            if (db != null)
            {
                UpdateChartFromSelectedDB(db);
            }
            else //no selection
            {
                ClearChart();
            }
        }
예제 #5
0
        private void SaveDillutedButton_Click(object sender, RoutedEventArgs e)
        {
            BMDatabase db = GetSelectedDB();

            if (db == null)
            {
                return;
            }

            double bucketIntervalInSec = 60 * double.Parse(((ComboBoxItem)_cmbInterval.SelectedItem).Tag.ToString());

            SaveDatabaseAs(db, bucketIntervalInSec);
        }
예제 #6
0
        private void SaveDatabaseAs(BMDatabase db, double bucketIntervalInSec)
        {
            SaveFileDialog _saveFileDialog = new SaveFileDialog()
            {
                RestoreDirectory = true,
                Filter           = "All supported files|*.xml|All files (*.*)|*.*",
                FileName         = db.GenerateFileName()
                                   //InitialDirectory = _openDirectory
            };

            if (_saveFileDialog.ShowDialog(this).Value)
            {
                this.Cursor = Cursors.Wait;
                db.SaveAs(_saveFileDialog.FileName, bucketIntervalInSec);
                this.Cursor = Cursors.Arrow;
            }
        }
예제 #7
0
        private void OpenButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog _openFileDialog = new OpenFileDialog()
            {
                Multiselect      = true,
                RestoreDirectory = true,
                Filter           = "All supported files|*.xml|All files (*.*)|*.*",
                //InitialDirectory = _openDirectory
            };

            if (_openFileDialog.ShowDialog(this).Value)
            {
                this.Cursor = Cursors.Wait;

                //_openDirectory = Path.GetDirectoryName(_openFileDialog.FileName);

                List <string> fileNamesList = new List <string>(_openFileDialog.FileNames);
                fileNamesList.Sort();

                BMDatabase dbAll = null;
                for (int i = 0; i < fileNamesList.Count; i++)
                {
                    BMDatabase db = BMDatabase.Open(fileNamesList[i]);
                    if (db != null)
                    {
                        dbAll = BMDatabaseMap.INSTANCE.Merge(db);
                    }
                    else
                    {
                        MessageBox.Show("Error open file: \n" + fileNamesList[i]);
                    }
                }

                UpdateDeviceList();
                UpdateChart();

                this.Cursor = Cursors.Arrow;
            }
        }
예제 #8
0
        public void Update(BMDatabase db)
        {
            Database = db;

            //alternate background
            //Background = (index%2==0)? Brushes.AliceBlue : Brushes.AntiqueWhite;
            //IsSelected = isSelected;

            BMRecordCurrent r = new BMRecordCurrent();

            if (db.Records.Count > 0)
            {
                r = db.Records.Last();
            }

            TimeSpan age = DateTime.Now - r.Date;

            IsActive = age.TotalSeconds < 60;

            Name = string.IsNullOrWhiteSpace(db.Device.DisplayName)?db.Device.Name : db.Device.DisplayName;
            System.Diagnostics.Debug.WriteLine("Display Name: " + Name);
            Address   = "(" + db.Device.GetAddressString() + ")";
            Interval  = "Int: " + r.LoggingInterval.ToString();
            Signal    = "Sig: " + r.RSSI;
            LogsCount = "Logs: " + db.Records.Count;
            Battery   = "Bat: " + r.BatteryLevel + "%";

            Temperature.Value = (r.GetTemperature(db.Units)).ToString("0.0");
            Temperature.Units = db.Units.TemperatureUnits.Desc;

            AirHumidity.Value = (r.GetAirHumidity()).ToString("0.0");
            AirHumidity.Units = db.Units.RelativeHumidityUnits.Desc;

            AirPressure.Value = (r.GetAirPressure(db.Units)).ToString("0.0");
            AirPressure.Units = db.Units.AirPressureUnits.Desc;

            AirDewPoint.Value = (r.GetAirDewPoint(db.Units)).ToString("0.0");
            AirDewPoint.Units = db.Units.TemperatureUnits.Desc;
        }
예제 #9
0
        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;
        }
예제 #10
0
 public BMDeviceRecordVM(BMDatabase db)
 {
     Update(db);
 }