예제 #1
0
        public async void TestR22()
        {
            var f = await fm.GetFluidAsync("R22");

            var pt = PTChart.New(ion, Fluid.EState.Bubble, f);

            TestAllPressure(pt, Units.Pressure.PSIG, new double[] {
                // Pressure, Temperature
                0, -41,
                5, -30,
                10, -20,
                25, 1,
                50, 53,
                100, 59,
                150, 83,
                200, 101,
                250, 117,
                305, 132,
                400, 154,
            });

            TestAllTemperature(pt, Units.Temperature.FAHRENHEIT, new double[] {
                -41, 0,
                -30, 5,
                -20, 10,
                1, 25,
                53, 50,
                59, 100,
                83, 150,
                101, 200,
                117, 250,
                132, 305,
                154, 400,
            });
        }
예제 #2
0
 private void TestAllTemperature(PTChart pt, Unit inUnit, double[] pressAndExpected)
 {
     for (int i = 0; i < pressAndExpected.Length; i += 2)
     {
         var temp = pt.GetTemperature(inUnit.OfScalar(pressAndExpected[i]));
         Assert.AreEqual(pressAndExpected[i + 1], temp.amount, 0.25);
     }
 }
예제 #3
0
 /// <summary>
 /// Called when a fluid is selected for the view controller.
 /// </summary>
 /// <param name="fluid">Fluid.</param>
 private void OnFluidSelected(Fluid fluid)
 {
     ptChart = new PTChart(ptChart.state, fluid, this.ptChart.elevation);
 }
예제 #4
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            buttonPressureUnit.SetBackgroundImage(UIImage.FromBundle("ButtonGold").AsNinePatch(), UIControlState.Normal);
            buttonPressureUnit.TouchUpInside += (object sender, EventArgs e) => {
                if (pressureSensor.isEditable)
                {
                    var dialog = CommonDialogs.CreateUnitPicker(Strings.Measure.PICK_UNIT, pressureSensor.GetSupportedUnits(), (obj, unit) => {
                        pressureUnit = unit;
                    });
                    PresentViewController(dialog, true, null);
                }
            };

            buttonMeasTempUnit.SetBackgroundImage(UIImage.FromBundle("ButtonGold").AsNinePatch(), UIControlState.Normal);
            buttonMeasTempUnit.TouchUpInside += (object sender, EventArgs e) => {
                if (temperatureSensor.isEditable)
                {
                    var dialog = CommonDialogs.CreateUnitPicker(Strings.Measure.PICK_UNIT, temperatureSensor.GetSupportedUnits(), (obj, unit) => {
                        temperatureUnit = unit;
                    });
                    PresentViewController(dialog, true, null);
                }
            };

            switchDewBubble.ValueChanged += (object sender, EventArgs e) => {
                switch ((int)switchDewBubble.SelectedSegment)
                {
                case SECTION_DEW:
                    ptChart = new PTChart(Fluid.State.Dew, ptChart.fluid, ptChart.elevation);
                    labelFluidState.BackgroundColor = new UIColor(Colors.BLUE);
                    break;

                case SECTION_BUBBLE:
                    ptChart = new PTChart(Fluid.State.Bubble, ptChart.fluid, ptChart.elevation);
                    labelFluidState.BackgroundColor = new UIColor(Colors.RED);
                    break;
                }
            };
            switchDewBubble.SelectedSegment = SECTION_DEW;

            ion = AppState.context;

            ptChart           = new PTChart(Fluid.State.Dew, ion.fluidManager.lastUsedFluid);
            pressureSensor    = new Sensor(ESensorType.Pressure, Units.Pressure.PSIG.OfScalar(0), true);
            temperatureSensor = new Sensor(ESensorType.Temperature, Units.Temperature.FAHRENHEIT.OfScalar(0), false);

            NavigationItem.Title = Strings.Fluid.PT_CALCULATOR;
            NavigationItem.RightBarButtonItem = new UIBarButtonItem(Strings.HELP, UIBarButtonItemStyle.Plain, delegate {
                var dialog = new UIAlertView(Strings.HELP, Strings.Fluid.STATE_HELP, null, Strings.OK);
                dialog.Show();
            });

            View.AddGestureRecognizer(new UITapGestureRecognizer(() => {
                editPressure.ResignFirstResponder();
                editMeasTemp.ResignFirstResponder();
            }));

            viewFluidPicker.AddGestureRecognizer(new UITapGestureRecognizer(() => {
                var sb = InflateViewController <FluidManagerViewController>("fluidManagerViewController");
                sb.onFluidSelectedDelegate = OnFluidSelected;
                NavigationController.PushViewController(sb, true);
            }));

            viewPressureSensorPicker.AddGestureRecognizer(new UITapGestureRecognizer(() => {
                var dm                    = InflateViewController <DeviceManagerViewController>("deviceManagerViewController");
                dm.displayFilter          = new SensorTypeFilter(ESensorType.Pressure);
                dm.onSensorReturnDelegate = (GaugeDeviceSensor sensor) => {
                    pressureSensor = sensor;
                };
                NavigationController.PushViewController(dm, true);
            }));

            viewPressureSensorPicker.AddGestureRecognizer(new UILongPressGestureRecognizer(() => {
                pressureSensor = null;
                ClearPressureInput();
            }));

            editPressure.AddTarget((object obj, EventArgs args) => {
                try {
                    if (pressureSensor.isEditable)
                    {
                        var measurement            = pressureUnit.OfScalar(double.Parse(editPressure.Text));
                        pressureSensor.measurement = measurement;
                    }
                } catch (Exception e) {
                    Log.E(this, "Failed to UpdatePressure: invalid string " + editPressure.Text, e);
                    ClearPressureInput();
                }
            }, UIControlEvent.EditingChanged);

            viewMeasTempSensorPicker.AddGestureRecognizer(new UITapGestureRecognizer(() => {
                var dm                    = InflateViewController <DeviceManagerViewController>("deviceManagerViewController");
                dm.displayFilter          = new SensorTypeFilter(ESensorType.Temperature);
                dm.onSensorReturnDelegate = (GaugeDeviceSensor sensor) => {
                    temperatureSensor = sensor;
                };
                NavigationController.PushViewController(dm, true);
            }));

            viewMeasTempSensorPicker.AddGestureRecognizer(new UILongPressGestureRecognizer(() => {
                temperatureSensor = null;
                ClearTemperatureInput();
            }));

            editMeasTemp.AddTarget((object obj, EventArgs args) => {
                try {
                    if (temperatureSensor.isEditable)
                    {
                        var measurement = temperatureUnit.OfScalar(double.Parse(editMeasTemp.Text));
                        temperatureSensor.measurement = measurement;
                    }
                } catch (Exception e) {
                    Log.E(this, "Failed to UpdateTemperature: invalid string " + editMeasTemp.Text + ".", e);
                    ClearTemperatureInput();
                }
            }, UIControlEvent.EditingChanged);
        }
예제 #5
0
        /// <summary>
        /// Updates the state of the calculation measurement.
        /// </summary>
        private void UpdateCalculationMeasurements()
        {
            if (pressureSensor == null || temperatureSensor == null)
            {
                deltaView.Visibility = ViewStates.Gone;
            }

            if (pressureSensor == null)
            {
                saturatedTemperatureTextView.Text = "";
                return;
            }

            var tu = temperatureUnit;

            var satTemp = ptChart.GetTemperature(pressureSensor.measurement, pressureSensor.isRelative);

            satTemp = satTemp.ConvertTo(tu);
            saturatedTemperatureTextView.Text = SensorUtils.ToFormattedString(satTemp);
            saturatedTemperatureUnitView.Text = temperatureUnit.ToString();

            switch (ptChart.state)
            {
            case Fluid.EState.Bubble:
                fluidStateTextView.Text = GetString(Resource.String.fluid_sc);
                fluidStateTextView.SetBackgroundColor(Resource.Color.red.AsResourceColor(this));
                break;

            case Fluid.EState.Dew:
                fluidStateTextView.Text = GetString(Resource.String.fluid_sh);
                fluidStateTextView.SetBackgroundColor(Resource.Color.blue.AsResourceColor(this));
                break;
            }

            if (temperatureSensor == null)
            {
                return;
            }

            deltaView.Visibility = ViewStates.Visible;

            ScalarSpan delta;

            if (pressureSensor.isRelative)
            {
                delta = ptChart.CalculateTemperatureDeltaRelative(pressureSensor.measurement, temperatureSensor.measurement);
            }
            else
            {
                delta = ptChart.CalculateTemperatureDeltaAbsolute(pressureSensor.measurement, temperatureSensor.measurement);
            }
            delta = delta.ConvertTo(temperatureUnit);

            if (ptChart.fluid.mixture && delta.magnitude < 0)
            {
                warning.Visibility = ViewStates.Visible;
            }
            else
            {
                warning.Visibility = ViewStates.Gone;
            }

            if (!ptChart.fluid.mixture)
            {
                if (delta.magnitude < 0)
                {
                    // dew
                    __ptChart = ptChart.fluid.GetPtChart(Fluid.EState.Dew);
                }
                else
                {
                    // bubble
                    __ptChart = ptChart.fluid.GetPtChart(Fluid.EState.Bubble);
                }
                calculationTextView.Text = SensorUtils.ToFormattedString(ESensorType.Temperature, delta.Abs(), true);
            }
            else
            {
                calculationTextView.Text = SensorUtils.ToFormattedString(ESensorType.Temperature, delta, true);
            }
        }