def METHOD_NAME(self, camera_functionality):
    # Disconnect signals from previous camera_functionality, if any.
    if self.cam_fn is not None:
        self.cam_fn.emccdGain.disconnect(self.handleEMCCDGain)
        self.cam_fn.temperature.disconnect(self.handleTemperature)
    # If this is a feed we want it's source camera functionality.
    if camera_functionality.isCamera():
        self.cam_fn = camera_functionality
    else:
        self.cam_fn = camera_functionality.getCameraFunctionality()
    # Connect new signals.
    self.cam_fn.emccdGain.connect(self.handleEMCCDGain)
    self.cam_fn.temperature.connect(self.handleTemperature)
    # Set the group box title.
    self.setTitle(self.cam_fn.getCameraName().title())
    # Show hide UI elements.
    if self.cam_fn.hasEMCCD():
        if not self.cam_fn.hasParameter("emccd_gain"):
            raise ParamsViewerException("EMCCD cameras must have the 'emccd_gain' parameter.")
        self.ui.EMCCDLabel.show()
        self.ui.EMCCDSlider.show()
    else:
        self.ui.EMCCDLabel.hide()
        self.ui.EMCCDSlider.hide()
    if self.cam_fn.hasPreamp():
        if not self.cam_fn.hasParameter("preampgain"):
            msg = "Cameras with adjustable preamp gain must have the 'preampgain' parameter."
            raise ParamsViewerException(msg)
        self.ui.preampGainLabel.show()
        self.ui.preampGainText.show()
    else:
        self.ui.preampGainLabel.hide()
        self.ui.preampGainText.hide()
    if self.cam_fn.hasTemperature():
        if not self.cam_fn.hasParameter("temperature"):
            msg = "Cameras with temperature control must have the 'temperature' parameter."
            raise ParamsViewerException(msg)
        self.ui.temperatureLabel.show()
        self.ui.temperatureText.show()
    else:
        self.ui.temperatureLabel.hide()
        self.ui.temperatureText.hide()
    # Update UI elements.
    if self.cam_fn.hasParameter("emccd_gain"):
        gainp = self.cam_fn.getParameterObject("emccd_gain")
        self.ui.EMCCDSlider.valueChanged.disconnect()
        self.ui.EMCCDSlider.setMinimum(gainp.getMinimum())
        self.ui.EMCCDSlider.setMaximum(gainp.getMaximum())
        self.ui.EMCCDSlider.setValue(gainp.getv())
        self.ui.EMCCDLabel.setText("EMCCD Gain: {0:d}".format(gainp.getv()))
        self.ui.EMCCDSlider.valueChanged.connect(self.handleGainChange)
    if self.cam_fn.isMaster():
        self.ui.FPSText.setText("{0:.4f}".format(self.cam_fn.getParameter("fps")))
    else:
        self.ui.FPSText.setText("External")
    self.ui.exposureTimeText.setText("{0:.4f}".format(self.cam_fn.getParameter("exposure_time")))
    if self.cam_fn.hasParameter("preampgain"):
        self.ui.preampGainText.setText("{0:.1f}".format(self.cam_fn.getParameter("preampgain")))
    if self.cam_fn.hasParameter("temperature"):
        self.temperature = self.cam_fn.getParameter("temperature")
    self.ui.pictureSizeText.setText(str(self.cam_fn.getParameter("x_pixels")) + " x " +
                                    str(self.cam_fn.getParameter("y_pixels")) + " (" +
                                    str(self.cam_fn.getParameter("x_bin")) + "," +
                                    str(self.cam_fn.getParameter("y_bin")) + ")")
    # FIXME? Need to adjust for binning?
    self.ui.pictureStartText.setText(str(self.cam_fn.getParameter("x_start")) + ", " +
                                     str(self.cam_fn.getParameter("y_start")))