public AnalogSensorSettingsDialog(
            GenericAnalogSensorSettings settings,
            GenericAnalogSensorCollection sensorCollection,
            GenericAnalogInputBase analogInputDriver,
            Window parent)
            : base(settings, sensorCollection, analogInputDriver, parent)
        {
            var t = new SettingsTextBox("LPF Factor");

            t.textBox.text              = sensorName.IsNotEmpty() ? settings.lowPassFilterFactor.ToString() : "5";
            t.textBox.TextChangedEvent += (sender, args) => {
                try {
                    var factor = Convert.ToInt32(args.text);

                    if (factor < 0)
                    {
                        MessageBox.Show("Low passs filter factor can't be negative");
                        args.keepText = false;
                        return;
                    }
                } catch {
                    MessageBox.Show("Improper Low passs filter factor format");
                    args.keepText = false;
                }
            };
            AddSetting(t);

            DrawSettings();
        }
        public AnalogSensorWidget(
            string sensorTypeLabel,
            GenericAnalogSensorCollection sensorCollection,
            GenericAnalogInputBase analogInputDriver,
            Type settingsType
            )
        {
            this.sensorCollection  = sensorCollection;
            this.analogInputDriver = analogInputDriver;
            if (!settingsType.TypeIs(typeof(GenericAnalogSensorSettings)))
            {
                throw new ArgumentException("The settings type must derive GenericAnalogSensorSettings", nameof(settingsType));
            }
            this.settingsType = settingsType;

            SetSizeRequest(370, 188);

            var label = new TouchLabel();

            label.text      = sensorTypeLabel;
            label.textColor = "seca";
            label.textSize  = 12;
            Put(label, 0, 3);
            label.Show();

            var sensorSettingsButton = new TouchButton();

            sensorSettingsButton.text = "\u2699";
            sensorSettingsButton.SetSizeRequest(30, 30);
            sensorSettingsButton.buttonColor         = "pri";
            sensorSettingsButton.ButtonReleaseEvent += OnSensorSettingsButtonReleaseEvent;
            Put(sensorSettingsButton, 340, 0);
            sensorSettingsButton.Show();

            var b = new TouchButton();

            b.text = "Calibrate";
            b.SetSizeRequest(100, 60);
            b.ButtonReleaseEvent += OnCalibrationButtonReleaseEvent;
            Put(b, 0, 118);
            b.Show();

            sensorLabel               = new TouchLabel();
            sensorLabel.text          = sensorTypeLabel;
            sensorLabel.textAlignment = TouchAlignment.Center;
            sensorLabel.textColor     = "grey3";
            sensorLabel.WidthRequest  = 370;
            Put(sensorLabel, 0, 78);
            sensorLabel.Show();

            sensorStateTextbox = new TouchLabel();
            sensorStateTextbox.WidthRequest  = 370;
            sensorStateTextbox.textSize      = 20;
            sensorStateTextbox.textAlignment = TouchAlignment.Center;
            sensorStateTextbox.textRender.unitOfMeasurement = UnitsOfMeasurement.None;
            Put(sensorStateTextbox, 0, 43);
            sensorStateTextbox.Show();

            sensorCombo = new TouchComboBox();
            sensorCombo.WidthRequest = 200;
            var allSensors = sensorCollection.GetAllGadgetNames();

            if (allSensors.Length > 0)
            {
                sensorCombo.comboList.AddRange(allSensors);
                sensorName = allSensors[0];
            }
            else
            {
                sensorName = string.Empty;
            }
            sensorCombo.comboList.Add("New sensor...");
            sensorCombo.activeIndex        = 0;
            sensorCombo.ComboChangedEvent += OnSensorComboChanged;
            Put(sensorCombo, 135, 0);
            sensorCombo.Show();

            GetSensorData();

            Show();
        }