class ShowersLimitWidget(_LimitWidget):

    def __init__(self, parent=None):
        _LimitWidget.__init__(self, parent)
        self.setAccessibleName('Showers')

    def _initUI(self):
        # Widgets
        self._lbl_showers = QLabel('Number of electron showers')
        self._lbl_showers.setStyleSheet("color: blue")
        self._txt_showers = NumericalParameterWidget(ShowersLimit.showers)

        # Layouts
        layout = _LimitWidget._initUI(self)
        layout.addRow(self._lbl_showers, self._txt_showers)

        return layout

    def value(self):
        return ShowersLimit(showers=self._txt_showers.values())

    def setValue(self, value):
        if hasattr(value, 'showers'):
            self._txt_showers.setValues(value.showers)

    def setReadOnly(self, state):
        _LimitWidget.setReadOnly(self, state)
        style = 'color: none' if state else 'color: blue'
        self._lbl_showers.setStyleSheet(style)
class PhotonEmissionMapDetectorWidget(_PhotonDelimitedDetectorWidget):

    def __init__(self, parent=None):
        _PhotonDelimitedDetectorWidget.__init__(self, parent)
        self.setAccessibleName("Photon emission map")

    def _initUI(self):
        # Widgets
        self._lbl_xbins = QLabel('X bins')
        self._lbl_xbins.setStyleSheet("color: blue")
        self._txt_xbins = NumericalParameterWidget(PhotonEmissionMapDetector.xbins)

        self._lbl_ybins = QLabel('Y bins')
        self._lbl_ybins.setStyleSheet("color: blue")
        self._txt_ybins = NumericalParameterWidget(PhotonEmissionMapDetector.ybins)

        self._lbl_zbins = QLabel('Z bins')
        self._lbl_zbins.setStyleSheet("color: blue")
        self._txt_zbins = NumericalParameterWidget(PhotonEmissionMapDetector.zbins)

        # Layouts
        layout = _PhotonDelimitedDetectorWidget._initUI(self)
        layout.addRow(self._lbl_xbins, self._txt_xbins)
        layout.addRow(self._lbl_ybins, self._txt_ybins)
        layout.addRow(self._lbl_zbins, self._txt_zbins)

        return layout

    def value(self):
        elevation_rad = self._getElevationValues()
        azimuth_rad = self._getAzimuthValues()
        xbins = self._txt_xbins.values()
        ybins = self._txt_ybins.values()
        zbins = self._txt_zbins.values()
        return PhotonEmissionMapDetector(elevation_rad, azimuth_rad,
                                         xbins, ybins, zbins)

    def setValue(self, value):
        _PhotonDelimitedDetectorWidget.setValue(self, value)
        self._txt_xbins.setValues(value.xbins)
        self._txt_ybins.setValues(value.ybins)
        self._txt_zbins.setValues(value.zbins)

    def setReadOnly(self, state):
        _PhotonDelimitedDetectorWidget.setReadOnly(self, state)
        style = 'color: none' if state else 'color: blue'
        self._lbl_xbins.setStyleSheet(style)
        self._lbl_ybins.setStyleSheet(style)
        self._lbl_zbins.setStyleSheet(style)
    def _initUI(self):
        # Widgets
        self._lbl_showers = QLabel('Number of electron showers')
        self._lbl_showers.setStyleSheet("color: blue")
        self._txt_showers = NumericalParameterWidget(ShowersLimit.showers)

        # Layouts
        layout = _LimitWidget._initUI(self)
        layout.addRow(self._lbl_showers, self._txt_showers)

        return layout
    def _initUI(self):
        # Widgets
        self._lbl_channels = QLabel('Channels')
        self._lbl_channels.setStyleSheet("color: blue")
        self._txt_channels = NumericalParameterWidget(_ChannelsDetector.channels)

        # Layouts
        layout = _ParameterizedClassWidget._initUI(self)
        layout.addRow(self._lbl_channels, self._txt_channels)

        return layout
    def _initUI(self):
        # Widgets
        self._lbl_xbins = QLabel('X bins')
        self._lbl_xbins.setStyleSheet("color: blue")
        self._txt_xbins = NumericalParameterWidget(PhotonEmissionMapDetector.xbins)

        self._lbl_ybins = QLabel('Y bins')
        self._lbl_ybins.setStyleSheet("color: blue")
        self._txt_ybins = NumericalParameterWidget(PhotonEmissionMapDetector.ybins)

        self._lbl_zbins = QLabel('Z bins')
        self._lbl_zbins.setStyleSheet("color: blue")
        self._txt_zbins = NumericalParameterWidget(PhotonEmissionMapDetector.zbins)

        # Layouts
        layout = _PhotonDelimitedDetectorWidget._initUI(self)
        layout.addRow(self._lbl_xbins, self._txt_xbins)
        layout.addRow(self._lbl_ybins, self._txt_ybins)
        layout.addRow(self._lbl_zbins, self._txt_zbins)

        return layout
class _ChannelsDetectorWidget(_ParameterizedClassWidget):

    def _initUI(self):
        # Widgets
        self._lbl_channels = QLabel('Channels')
        self._lbl_channels.setStyleSheet("color: blue")
        self._txt_channels = NumericalParameterWidget(_ChannelsDetector.channels)

        # Layouts
        layout = _ParameterizedClassWidget._initUI(self)
        layout.addRow(self._lbl_channels, self._txt_channels)

        return layout

    def setValue(self, value):
        self._txt_channels.setValues(value.channels)

    def setReadOnly(self, state):
        _ParameterizedClassWidget.setReadOnly(self, state)
        style = 'color: none' if state else 'color: blue'
        self._lbl_channels.setStyleSheet(style)
    def _initUI(self):
        # Widgets
        self._lbl_xlimits = QLabel('X limits')
        self._lbl_xlimits.setStyleSheet("color: blue")
        self._txt_xlimits = _UnitRangeWidget(_SpatialDetector.xlimits_m)

        self._lbl_xbins = QLabel('X bins')
        self._lbl_xbins.setStyleSheet("color: blue")
        self._txt_xbins = NumericalParameterWidget(_SpatialDetector.xbins)

        self._lbl_ylimits = QLabel('Y limits')
        self._lbl_ylimits.setStyleSheet("color: blue")
        self._txt_ylimits = _UnitRangeWidget(_SpatialDetector.ylimits_m)

        self._lbl_ybins = QLabel('Y bins')
        self._lbl_ybins.setStyleSheet("color: blue")
        self._txt_ybins = NumericalParameterWidget(_SpatialDetector.ybins)

        self._lbl_zlimits = QLabel('Z limits')
        self._lbl_zlimits.setStyleSheet("color: blue")
        self._txt_zlimits = _UnitRangeWidget(_SpatialDetector.zlimits_m)

        self._lbl_zbins = QLabel('Z bins')
        self._lbl_zbins.setStyleSheet("color: blue")
        self._txt_zbins = NumericalParameterWidget(_SpatialDetector.zbins)

        # Layouts
        layout = _ParameterizedClassWidget._initUI(self)
        layout.addRow(self._lbl_xlimits, self._txt_xlimits)
        layout.addRow(self._lbl_xbins, self._txt_xbins)
        layout.addRow(self._lbl_ylimits, self._txt_ylimits)
        layout.addRow(self._lbl_ybins, self._txt_ybins)
        layout.addRow(self._lbl_zlimits, self._txt_zlimits)
        layout.addRow(self._lbl_zbins, self._txt_zbins)

        return layout
class _SpatialDetectorWidget(_ParameterizedClassWidget):

    def _initUI(self):
        # Widgets
        self._lbl_xlimits = QLabel('X limits')
        self._lbl_xlimits.setStyleSheet("color: blue")
        self._txt_xlimits = _UnitRangeWidget(_SpatialDetector.xlimits_m)

        self._lbl_xbins = QLabel('X bins')
        self._lbl_xbins.setStyleSheet("color: blue")
        self._txt_xbins = NumericalParameterWidget(_SpatialDetector.xbins)

        self._lbl_ylimits = QLabel('Y limits')
        self._lbl_ylimits.setStyleSheet("color: blue")
        self._txt_ylimits = _UnitRangeWidget(_SpatialDetector.ylimits_m)

        self._lbl_ybins = QLabel('Y bins')
        self._lbl_ybins.setStyleSheet("color: blue")
        self._txt_ybins = NumericalParameterWidget(_SpatialDetector.ybins)

        self._lbl_zlimits = QLabel('Z limits')
        self._lbl_zlimits.setStyleSheet("color: blue")
        self._txt_zlimits = _UnitRangeWidget(_SpatialDetector.zlimits_m)

        self._lbl_zbins = QLabel('Z bins')
        self._lbl_zbins.setStyleSheet("color: blue")
        self._txt_zbins = NumericalParameterWidget(_SpatialDetector.zbins)

        # Layouts
        layout = _ParameterizedClassWidget._initUI(self)
        layout.addRow(self._lbl_xlimits, self._txt_xlimits)
        layout.addRow(self._lbl_xbins, self._txt_xbins)
        layout.addRow(self._lbl_ylimits, self._txt_ylimits)
        layout.addRow(self._lbl_ybins, self._txt_ybins)
        layout.addRow(self._lbl_zlimits, self._txt_zlimits)
        layout.addRow(self._lbl_zbins, self._txt_zbins)

        return layout

    def setValue(self, value):
        self._txt_xlimits.setValues(value.xlimits_m)
        self._txt_xbins.setValues(value.xbins)
        self._txt_ylimits.setValues(value.ylimits_m)
        self._txt_ybins.setValues(value.ybins)
        self._txt_zlimits.setValues(value.zlimits_m)
        self._txt_zbins.setValues(value.zbins)

    def setReadOnly(self, state):
        _ParameterizedClassWidget.setReadOnly(self, state)
        style = 'color: none' if state else 'color: blue'
        self._lbl_xlimits.setStyleSheet(style)
        self._lbl_xbins.setStyleSheet(style)
        self._lbl_ylimits.setStyleSheet(style)
        self._lbl_ybins.setStyleSheet(style)
        self._lbl_zlimits.setStyleSheet(style)
        self._lbl_zbins.setStyleSheet(style)