/// <summary>
        /// The constructor method.
        /// </summary>
        /// <param name="fuzzyModel">A instance of the FuzzyModel class</param>
        public FuzzyModelUtilityVC(FuzzyModel fuzzyModel)
        {
            this.View = new FuzzyModelUtilityView(this);
            this.fuzzyModel = fuzzyModel;

            setupOutlets();

            // Setup the combobox
            string[] portNames = SerialPort.GetPortNames();
            View.HRSensorComboBox.Items.AddRange(portNames);
            View.HRSensorComboBox.SelectedIndex = 0;

            subscribe();

            hrValueLabel.Text = View.hrTrackBar.Value.ToString();
            gsrValueLabel.Text = View.gsrTrackBar.Value.ToString();

            // Set the default sensor types
            fuzzyModel.hrSensor.type = HRSensor.Type.ManualInput;
            fuzzyModel.gsrSensor.type = GSRSensor.Type.ManualInput;

            // Makes sure that from the start a value is present (not being 0).
            fuzzyModel.hrSensor.sensorValue = View.hrTrackBar.Value;
            fuzzyModel.gsrSensor.sensorValue = View.gsrTrackBar.Value;

            sensorController = null;

            TimerCallback timerCallback = sensorTimerCallback;
            sensorTimer = new Timer(timerCallback, null, 1000, 1000);

            this.currentState = State.Uncalibrated;
        }
 public SensorView(SensorViewController controller)
 {
     InitializeComponent();
 }
        /// <summary>
        /// Action Method: When the sensorButton is clicked, a SensorView is created and the from is shown
        /// </summary>
        public void sensorButtonClicked()
        {
            if (sensorController == null || sensorController.View.IsDisposed)
            {
                sensorController = new SensorViewController(fuzzyModel.hrSensor, fuzzyModel.gsrSensor);

                sensorController.View.Show();
            }
        }
        /// <summary>
        /// Action method when the calibrate button is clicked.
        /// </summary>
        public void calibrateButtonClicked()
        {
            // When the button is first pressed, show the sensorForm and start calabration.
            if (currentState == State.Calibrated)
            {
                // The method does not proceed as long as this messagebox is open.
                var result = MessageBox.Show("Weet u zeker dat u nog maal wilt kalibreren?", "Kalibratie", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                if (result == DialogResult.Yes)
                {
                    currentState = State.Uncalibrated;
                }
            }
            if (currentState == State.Uncalibrated)
            {
                // Show the form
                if (sensorController == null || sensorController.View.IsDisposed)
                {
                    sensorController = new SensorViewController(fuzzyModel.hrSensor, fuzzyModel.gsrSensor);
                }

                sensorController.View.Show();

                // Setup the countdown calibration timer
                timeSpanCounter = new TimeSpan(0, 10, 0);
                timer = new System.Windows.Forms.Timer();
                timer.Tick += new EventHandler(timer_Tick);
                timer.Interval = 1000; // 1 second
                timer.Start();
                calibrateButton.Text = timeSpanCounter.ToString(@"%h\:mm\:ss");

                // Pass any manual input values for the first time,
                // they are passed on change.
                if (fuzzyModel.hrSensor.type == HRSensor.Type.ManualInput)
                {
                    fuzzyModel.hrSensor.sensorValue = View.hrTrackBar.Value;
                }
                if (fuzzyModel.gsrSensor.type == GSRSensor.Type.ManualInput)
                {
                    fuzzyModel.gsrSensor.sensorValue = View.gsrTrackBar.Value;
                }

                 // Start calibrating
                fuzzyModel.startCalibration();
                currentState = State.Calibrating;
                Console.WriteLine("Calibratie gestart");
            }
            // When the button is pressed for a second time, the calibration is stopped
            else if (currentState == State.Calibrating)
            {
                // Stop the countdown and set the form back to the original state
                timer.Stop();
                calibrateButton.Text = "Opnieuw kalibreren";

                fuzzyModel.stopCalibration();
                currentState = State.Calibrated;
                Console.WriteLine("Calibratie gestopt");
            }
        }