def _init_ui(self): # Widgets self._txt_title = TextAttributeLineEdit(attribute=self.CLASS.title) self._txt_author = TextAttributeLineEdit(attribute=self.CLASS.author) self._txt_owner = TextAttributeLineEdit(attribute=self.CLASS.owner) self._txt_date = QDateEdit() self._txt_date.setDisplayFormat('yyyy-MM-dd') self._txt_time = QTimeEdit() self._txt_time.setDisplayFormat('hh:mm:ss') self._txt_timezone = TextAttributeLineEdit(attribute=self.CLASS.timezone) self._txt_checksum = TextAttributeLineEdit(attribute=self.CLASS.checksum) self._txt_checksum.setReadOnly(True) # Layouts layout = ParameterWidget._init_ui(self) layout.addRow('Title', self._txt_title) layout.addRow('Author', self._txt_author) layout.addRow('Owner', self._txt_owner) layout.addRow('Date', self._txt_date) layout.addRow('Time', self._txt_time) layout.addRow('Timezone', self._txt_timezone) layout.addRow('Checksum', self._txt_checksum) # Signals self._txt_title.textEdited.connect(self.edited) self._txt_author.textEdited.connect(self.edited) self._txt_owner.textEdited.connect(self.edited) self._txt_date.dateChanged.connect(self.edited) self._txt_time.timeChanged.connect(self.edited) self._txt_timezone.textEdited.connect(self.edited) self._txt_checksum.textEdited.connect(self.edited) return layout
def _init_ui(self): # Widgets self._cb_signal_type = QComboBox() self._cb_signal_type.addItems([None] + list(_SIGNAL_TYPES)) self._txt_manufacturer = TextAttributeLineEdit(self.CLASS.manufacturer) self._txt_model = TextAttributeLineEdit(self.CLASS.model) self._txt_serial_number = TextAttributeLineEdit(self.CLASS.serial_number) self._txt_measurement_unit = UnitAttributeLineEdit(self.CLASS.measurement_unit) self._txt_elevation = NumericalAttributeLineEdit(self.CLASS.elevation) self._txt_azimuth = NumericalAttributeLineEdit(self.CLASS.azimuth) self._txt_distance = NumericalAttributeLineEdit(self.CLASS.distance) self._txt_area = NumericalAttributeLineEdit(self.CLASS.area) self._txt_solid_angle = NumericalAttributeLineEdit(self.CLASS.solid_angle) self._txt_semi_angle = NumericalAttributeLineEdit(self.CLASS.semi_angle) self._txt_temperature = NumericalAttributeLineEdit(self.CLASS.temperature) # Layout layout = _ConditionWidget._init_ui(self) layout.addRow('Type of signal', self._cb_signal_type) layout.addRow('Manufacturer', self._txt_manufacturer) layout.addRow('Model', self._txt_model) layout.addRow('Serial number', self._txt_serial_number) layout.addRow('Measurement unit', self._txt_measurement_unit) layout.addRow('Elevation', self._txt_elevation) layout.addRow('Azimuth', self._txt_azimuth) layout.addRow('Distance', self._txt_distance) layout.addRow('Area', self._txt_area) layout.addRow('Solid angle', self._txt_solid_angle) layout.addRow('Semi angle', self._txt_semi_angle) layout.addRow('Temperature', self._txt_temperature) # Signals self._cb_signal_type.currentIndexChanged.connect(self.edited) self._txt_manufacturer.textEdited.connect(self.edited) self._txt_model.textEdited.connect(self.edited) self._txt_serial_number.textEdited.connect(self.edited) self._txt_measurement_unit.textEdited.connect(self.edited) self._txt_elevation.textEdited.connect(self.edited) self._txt_azimuth.textEdited.connect(self.edited) self._txt_distance.textEdited.connect(self.edited) self._txt_area.textEdited.connect(self.edited) self._txt_solid_angle.textEdited.connect(self.edited) self._txt_semi_angle.textEdited.connect(self.edited) self._txt_temperature.textEdited.connect(self.edited) return layout
def _init_ui(self): # Controls self._txt_manufacturer = TextAttributeLineEdit(self.CLASS.manufacturer) self._txt_model = TextAttributeLineEdit(self.CLASS.model) self._txt_serial_number = TextAttributeLineEdit(self.CLASS.serial_number) # Layouts layout = _ConditionWidget._init_ui(self) layout.addRow("<i>Manufacturer</i>", self._txt_manufacturer) layout.addRow("<i>Model</i>", self._txt_model) layout.addRow("Serial number", self._txt_serial_number) # Signals self._txt_manufacturer.textEdited.connect(self.edited) self._txt_model.textEdited.connect(self.edited) self._txt_serial_number.textEdited.connect(self.edited) return layout
def _init_ui(self): # Widgets self._txt_quantity = TextAttributeLineEdit(self.CLASS.quantity) self._txt_unit = UnitAttributeLineEdit(self.CLASS.unit) # Layouts layout = _ConditionWidget._init_ui(self) layout.addRow('<i>Quantity</i>', self._txt_quantity) layout.addRow('<i>Unit</i>', self._txt_unit) # Signals self._txt_quantity.textEdited.connect(self.edited) self._txt_unit.textEdited.connect(self.edited) return layout
def _init_ui(self): # Widgets self._txt_line = TextAttributeLineEdit(self.CLASS.line) self._txt_energy = NumericalAttributeLineEdit(self.CLASS.energy) # Layouts layout = ElementalIDWidget._init_ui(self) layout.addRow('<i>Line</i>', self._txt_line) layout.addRow('Energy', self._txt_energy) # Signals self._txt_line.textEdited.connect(self.edited) self._txt_energy.textEdited.connect(self.edited) return layout
class ElementalIDXrayWidget(ElementalIDWidget): def __init__(self, parent=None): _ConditionWidget.__init__(self, ElementalIDXray, parent) def _init_ui(self): # Widgets self._txt_line = TextAttributeLineEdit(self.CLASS.line) self._txt_energy = NumericalAttributeLineEdit(self.CLASS.energy) # Layouts layout = ElementalIDWidget._init_ui(self) layout.addRow('<i>Line</i>', self._txt_line) layout.addRow('Energy', self._txt_energy) # Signals self._txt_line.textEdited.connect(self.edited) self._txt_energy.textEdited.connect(self.edited) return layout def _create_parameter(self): return self.CLASS(1, 'Ka') def parameter(self, parameter=None): parameter = ElementalIDWidget.parameter(self, parameter) parameter.line = self._txt_line.text() parameter.energy = self._txt_energy.text() return parameter def setParameter(self, condition): ElementalIDWidget.setParameter(self, condition) self._txt_line.setText(condition.line) self._txt_energy.setText(condition.energy) def setReadOnly(self, state): ElementalIDWidget.setReadOnly(self, state) self._txt_line.setReadOnly(state) self._txt_energy.setReadOnly(state) def isReadOnly(self): return ElementalIDWidget.isReadOnly(self) and \ self._txt_line.isReadOnly() and \ self._txt_energy.isReadOnly() def hasAcceptableInput(self): return ElementalIDWidget.hasAcceptableInput(self) and \ self._txt_line.hasAcceptableInput() and \ self._txt_energy.hasAcceptableInput()
class _CalibrationWidget(_ConditionWidget): def _init_ui(self): # Widgets self._txt_quantity = TextAttributeLineEdit(self.CLASS.quantity) self._txt_unit = UnitAttributeLineEdit(self.CLASS.unit) # Layouts layout = _ConditionWidget._init_ui(self) layout.addRow('<i>Quantity</i>', self._txt_quantity) layout.addRow('<i>Unit</i>', self._txt_unit) # Signals self._txt_quantity.textEdited.connect(self.edited) self._txt_unit.textEdited.connect(self.edited) return layout def parameter(self, parameter=None): parameter = _ConditionWidget.parameter(self, parameter) parameter.quantity = self._txt_quantity.text() parameter.unit = self._txt_unit.text() return parameter def setParameter(self, calibration): self._txt_quantity.setText(calibration.quantity) self._txt_unit.setText(calibration.unit) def setReadOnly(self, state): _ConditionWidget.setReadOnly(self, state) self._txt_quantity.setReadOnly(state) self._txt_unit.setReadOnly(state) def isReadOnly(self): return _ConditionWidget.isReadOnly(self) and \ self._txt_quantity.isReadOnly() and \ self._txt_unit.isReadOnly() def hasAcceptableInput(self): return _ConditionWidget.hasAcceptableInput(self) and \ self._txt_quantity.hasAcceptableInput() and \ self._txt_unit.hasAcceptableInput() def calibration(self): return self.parameter() def setCalibration(self, calibration): self.setParameter(calibration)
def _init_ui(self): # Widgets self._txt_dispersion_element = TextAttributeLineEdit(self.CLASS.dispersion_element) self._txt_crystal_2d = NumericalAttributeLineEdit(self.CLASS.crystal_2d) self._txt_rowland_circle_diameter = NumericalAttributeLineEdit(self.CLASS.rowland_circle_diameter) self._wdg_pulse_height_analyser = PulseHeightAnalyserWidget() self._wdg_window = WindowWidget() # Layouts layout = DetectorSpectrometerWidget._init_ui(self) layout.addRow('Dispersion element', self._txt_dispersion_element) layout.addRow('Crystal 2d-spacing', self._txt_crystal_2d) layout.addRow('Rowland circle diameter', self._txt_rowland_circle_diameter) layout.addRow('Pulse height analyser', self._wdg_pulse_height_analyser) layout.addRow('Window', self._wdg_window) # Signals self._txt_dispersion_element.textEdited.connect(self.edited) self._txt_crystal_2d.textEdited.connect(self.edited) self._txt_rowland_circle_diameter.textEdited.connect(self.edited) self._wdg_pulse_height_analyser.edited.connect(self.edited) self._wdg_window.edited.connect(self.edited) return layout
class HeaderWidget(ParameterWidget): def __init__(self, parent=None): ParameterWidget.__init__(self, Header, parent) def _init_ui(self): # Widgets self._txt_title = TextAttributeLineEdit(attribute=self.CLASS.title) self._txt_author = TextAttributeLineEdit(attribute=self.CLASS.author) self._txt_owner = TextAttributeLineEdit(attribute=self.CLASS.owner) self._txt_date = QDateEdit() self._txt_date.setDisplayFormat('yyyy-MM-dd') self._txt_time = QTimeEdit() self._txt_time.setDisplayFormat('hh:mm:ss') self._txt_timezone = TextAttributeLineEdit(attribute=self.CLASS.timezone) self._txt_checksum = TextAttributeLineEdit(attribute=self.CLASS.checksum) self._txt_checksum.setReadOnly(True) # Layouts layout = ParameterWidget._init_ui(self) layout.addRow('Title', self._txt_title) layout.addRow('Author', self._txt_author) layout.addRow('Owner', self._txt_owner) layout.addRow('Date', self._txt_date) layout.addRow('Time', self._txt_time) layout.addRow('Timezone', self._txt_timezone) layout.addRow('Checksum', self._txt_checksum) # Signals self._txt_title.textEdited.connect(self.edited) self._txt_author.textEdited.connect(self.edited) self._txt_owner.textEdited.connect(self.edited) self._txt_date.dateChanged.connect(self.edited) self._txt_time.timeChanged.connect(self.edited) self._txt_timezone.textEdited.connect(self.edited) self._txt_checksum.textEdited.connect(self.edited) return layout def parameter(self, parameter=None): parameter = ParameterWidget.parameter(self, parameter) parameter.title = self._txt_title.text() parameter.author = self._txt_author.text() parameter.owner = self._txt_owner.text() parameter.date = self._txt_date.date().toString('yyyy-MM-dd') parameter.time = self._txt_time.time().toString('hh:mm:ss') parameter.timezone = self._txt_timezone.text() return parameter def setParameter(self, header): ParameterWidget.setParameter(self, header) self._txt_title.setText(header.title) self._txt_author.setText(header.author) self._txt_owner.setText(header.owner) date = header.date if date is not None: self._txt_date.setDate(QDate(date.year, date.month, date.day)) time = header.time if time is not None: self._txt_time.setTime(QTime(time.hour, time.minute, time.second)) self._txt_timezone.setText(header.timezone) checksum = header.checksum if checksum is not None: self._txt_checksum.setText(checksum.value) def header(self, header=None): return self.parameter(header) def setHeader(self, header): self.setParameter(header) def setReadOnly(self, state): ParameterWidget.setReadOnly(self, state) self._txt_title.setReadOnly(state) self._txt_author.setReadOnly(state) self._txt_owner.setReadOnly(state) self._txt_date.setReadOnly(state) self._txt_time.setReadOnly(state) self._txt_timezone.setReadOnly(state) self._txt_checksum.setReadOnly(state) def isReadOnly(self): return ParameterWidget.isReadOnly(self) and \ self._txt_title.isReadOnly() and \ self._txt_author.isReadOnly() and \ self._txt_owner.isReadOnly() and \ self._txt_date.isReadOnly() and \ self._txt_time.isReadOnly() and \ self._txt_timezone.isReadOnly() and \ self._txt_checksum.isReadOnly() def hasAcceptableInput(self): return ParameterWidget.hasAcceptableInput(self) and \ self._txt_title.hasAcceptableInput() and \ self._txt_author.hasAcceptableInput() and \ self._txt_owner.hasAcceptableInput() and \ self._txt_date.hasAcceptableInput() and \ self._txt_time.hasAcceptableInput() and \ self._txt_timezone.hasAcceptableInput() and \ self._txt_checksum.hasAcceptableInput()
class DetectorSpectrometerWDSWidget(DetectorSpectrometerWidget): def __init__(self, parent=None): _DetectorWidget.__init__(self, DetectorSpectrometerWDS, parent) def _init_ui(self): # Widgets self._txt_dispersion_element = TextAttributeLineEdit(self.CLASS.dispersion_element) self._txt_crystal_2d = NumericalAttributeLineEdit(self.CLASS.crystal_2d) self._txt_rowland_circle_diameter = NumericalAttributeLineEdit(self.CLASS.rowland_circle_diameter) self._wdg_pulse_height_analyser = PulseHeightAnalyserWidget() self._wdg_window = WindowWidget() # Layouts layout = DetectorSpectrometerWidget._init_ui(self) layout.addRow('Dispersion element', self._txt_dispersion_element) layout.addRow('Crystal 2d-spacing', self._txt_crystal_2d) layout.addRow('Rowland circle diameter', self._txt_rowland_circle_diameter) layout.addRow('Pulse height analyser', self._wdg_pulse_height_analyser) layout.addRow('Window', self._wdg_window) # Signals self._txt_dispersion_element.textEdited.connect(self.edited) self._txt_crystal_2d.textEdited.connect(self.edited) self._txt_rowland_circle_diameter.textEdited.connect(self.edited) self._wdg_pulse_height_analyser.edited.connect(self.edited) self._wdg_window.edited.connect(self.edited) return layout def _create_parameter(self): return self.CLASS(1, CalibrationConstant('Quantity', 'm', 0.0)) def parameter(self, parameter=None): parameter = DetectorSpectrometerWidget.parameter(self, parameter) parameter.dispersion_element = self._txt_dispersion_element.text() parameter.crystal_2d = self._txt_crystal_2d.text() parameter.rowland_circle_diameter = self._txt_rowland_circle_diameter.text() parameter.pulse_height_analyser = self._wdg_pulse_height_analyser.pha() parameter.window = self._wdg_window.window() return parameter def setParameter(self, condition): DetectorSpectrometerWidget.setParameter(self, condition) self._txt_dispersion_element.setText(condition.dispersion_element) self._txt_crystal_2d.setText(condition.crystal_2d) self._txt_rowland_circle_diameter.setText(condition.rowland_circle_diameter) self._wdg_pulse_height_analyser.setPha(condition.pulse_height_analyser) self._wdg_window.setWindow(condition.window) def setReadOnly(self, state): DetectorSpectrometerWidget.setReadOnly(self, state) self._txt_dispersion_element.setReadOnly(state) self._txt_crystal_2d.setReadOnly(state) self._txt_rowland_circle_diameter.setReadOnly(state) self._wdg_pulse_height_analyser.setReadOnly(state) self._wdg_window.setReadOnly(state) def isReadOnly(self): return DetectorSpectrometerWidget.isReadOnly(self) and \ self._txt_dispersion_element.isReadOnly() and \ self._txt_crystal_2d.isReadOnly() and \ self._txt_rowland_circle_diameter.isReadOnly() and \ self._wdg_pulse_height_analyser.isReadOnly() and \ self._wdg_window.isReadOnly() def hasAcceptableInput(self): return DetectorSpectrometerWidget.hasAcceptableInput(self) and \ self._txt_dispersion_element.hasAcceptableInput() and \ self._txt_crystal_2d.hasAcceptableInput() and \ self._txt_rowland_circle_diameter.hasAcceptableInput() and \ self._wdg_pulse_height_analyser.hasAcceptableInput() and \ self._wdg_window.hasAcceptableInput()
class _DetectorWidget(_ConditionWidget): def _init_ui(self): # Widgets self._cb_signal_type = QComboBox() self._cb_signal_type.addItems([None] + list(_SIGNAL_TYPES)) self._txt_manufacturer = TextAttributeLineEdit(self.CLASS.manufacturer) self._txt_model = TextAttributeLineEdit(self.CLASS.model) self._txt_serial_number = TextAttributeLineEdit(self.CLASS.serial_number) self._txt_measurement_unit = UnitAttributeLineEdit(self.CLASS.measurement_unit) self._txt_elevation = NumericalAttributeLineEdit(self.CLASS.elevation) self._txt_azimuth = NumericalAttributeLineEdit(self.CLASS.azimuth) self._txt_distance = NumericalAttributeLineEdit(self.CLASS.distance) self._txt_area = NumericalAttributeLineEdit(self.CLASS.area) self._txt_solid_angle = NumericalAttributeLineEdit(self.CLASS.solid_angle) self._txt_semi_angle = NumericalAttributeLineEdit(self.CLASS.semi_angle) self._txt_temperature = NumericalAttributeLineEdit(self.CLASS.temperature) # Layout layout = _ConditionWidget._init_ui(self) layout.addRow('Type of signal', self._cb_signal_type) layout.addRow('Manufacturer', self._txt_manufacturer) layout.addRow('Model', self._txt_model) layout.addRow('Serial number', self._txt_serial_number) layout.addRow('Measurement unit', self._txt_measurement_unit) layout.addRow('Elevation', self._txt_elevation) layout.addRow('Azimuth', self._txt_azimuth) layout.addRow('Distance', self._txt_distance) layout.addRow('Area', self._txt_area) layout.addRow('Solid angle', self._txt_solid_angle) layout.addRow('Semi angle', self._txt_semi_angle) layout.addRow('Temperature', self._txt_temperature) # Signals self._cb_signal_type.currentIndexChanged.connect(self.edited) self._txt_manufacturer.textEdited.connect(self.edited) self._txt_model.textEdited.connect(self.edited) self._txt_serial_number.textEdited.connect(self.edited) self._txt_measurement_unit.textEdited.connect(self.edited) self._txt_elevation.textEdited.connect(self.edited) self._txt_azimuth.textEdited.connect(self.edited) self._txt_distance.textEdited.connect(self.edited) self._txt_area.textEdited.connect(self.edited) self._txt_solid_angle.textEdited.connect(self.edited) self._txt_semi_angle.textEdited.connect(self.edited) self._txt_temperature.textEdited.connect(self.edited) return layout def parameter(self, parameter=None): parameter = _ConditionWidget.parameter(self, parameter) parameter.signal_type = self._cb_signal_type.currentText() parameter.manufacturer = self._txt_manufacturer.text() parameter.model = self._txt_model.text() parameter.serial_number = self._txt_serial_number.text() parameter.measurement_unit = self._txt_measurement_unit.text() parameter.elevation = self._txt_elevation.text() parameter.azimuth = self._txt_azimuth.text() parameter.distance = self._txt_distance.text() parameter.area = self._txt_area.text() parameter.solid_angle = self._txt_solid_angle.text() parameter.semi_angle = self._txt_semi_angle.text() parameter.temperature = self._txt_temperature.text() return parameter def setParameter(self, condition): _ConditionWidget.setParameter(self, condition) self._cb_signal_type.setCurrentIndex(self._cb_signal_type.findText(condition.signal_type)) self._txt_manufacturer.setText(condition.manufacturer) self._txt_model.setText(condition.model) self._txt_serial_number.setText(condition.serial_number) self._txt_measurement_unit.setText(condition.measurement_unit) self._txt_elevation.setText(condition.elevation) self._txt_azimuth.setText(condition.azimuth) self._txt_distance.setText(condition.distance) self._txt_area.setText(condition.area) self._txt_solid_angle.setText(condition.solid_angle) self._txt_semi_angle.setText(condition.semi_angle) self._txt_temperature.setText(condition.temperature) def setReadOnly(self, state): _ConditionWidget.setReadOnly(self, state) self._cb_signal_type.setEnabled(not state) self._txt_manufacturer.setReadOnly(state) self._txt_model.setReadOnly(state) self._txt_serial_number.setReadOnly(state) self._txt_measurement_unit.setReadOnly(state) self._txt_elevation.setReadOnly(state) self._txt_azimuth.setReadOnly(state) self._txt_distance.setReadOnly(state) self._txt_area.setReadOnly(state) self._txt_solid_angle.setReadOnly(state) self._txt_semi_angle.setReadOnly(state) self._txt_temperature.setReadOnly(state) def isReadOnly(self): return _ConditionWidget.isReadOnly(self) and \ not self._cb_signal_type.isEnabled() and \ self._txt_manufacturer.isReadOnly() and \ self._txt_model.isReadOnly() and \ self._txt_serial_number.isReadOnly() and \ self._txt_measurement_unit.isReadOnly() and \ self._txt_elevation.isReadOnly() and \ self._txt_azimuth.isReadOnly() and \ self._txt_distance.isReadOnly() and \ self._txt_area.isReadOnly() and \ self._txt_solid_angle.isReadOnly() and \ self._txt_semi_angle.isReadOnly() and \ self._txt_temperature.isReadOnly() def hasAcceptableInput(self): return _ConditionWidget.hasAcceptableInput(self) and \ self._txt_manufacturer.hasAcceptableInput() and \ self._txt_model.hasAcceptableInput() and \ self._txt_serial_number.hasAcceptableInput() and \ self._txt_measurement_unit.hasAcceptableInput() and \ self._txt_elevation.hasAcceptableInput() and \ self._txt_azimuth.hasAcceptableInput() and \ self._txt_distance.hasAcceptableInput() and \ self._txt_area.hasAcceptableInput() and \ self._txt_solid_angle.hasAcceptableInput() and \ self._txt_semi_angle.hasAcceptableInput() and \ self._txt_temperature.hasAcceptableInput()
class InstrumentWidget(_ConditionWidget): def __init__(self, parent=None): _ConditionWidget.__init__(self, Instrument, parent) def _init_ui(self): # Controls self._txt_manufacturer = TextAttributeLineEdit(self.CLASS.manufacturer) self._txt_model = TextAttributeLineEdit(self.CLASS.model) self._txt_serial_number = TextAttributeLineEdit(self.CLASS.serial_number) # Layouts layout = _ConditionWidget._init_ui(self) layout.addRow("<i>Manufacturer</i>", self._txt_manufacturer) layout.addRow("<i>Model</i>", self._txt_model) layout.addRow("Serial number", self._txt_serial_number) # Signals self._txt_manufacturer.textEdited.connect(self.edited) self._txt_model.textEdited.connect(self.edited) self._txt_serial_number.textEdited.connect(self.edited) return layout def _create_parameter(self): return self.CLASS('manufacturer', 'model') def parameter(self, parameter=None): parameter = _ConditionWidget.parameter(self, parameter) parameter.manufacturer = self._txt_manufacturer.text() parameter.model = self._txt_model.text() parameter.serial_number = self._txt_serial_number.text() return parameter def setParameter(self, condition): _ConditionWidget.setParameter(self, condition) self._txt_manufacturer.setText(condition.manufacturer) self._txt_model.setText(condition.model) self._txt_serial_number.setText(condition.serial_number) def setReadOnly(self, state): _ConditionWidget.setReadOnly(self, state) self._txt_manufacturer.setReadOnly(state) self._txt_model.setReadOnly(state) self._txt_serial_number.setReadOnly(state) def isReadOnly(self): return _ConditionWidget.isReadOnly(self) and \ self._txt_manufacturer.isReadOnly() and \ self._txt_model.isReadOnly() and \ self._txt_serial_number.isReadOnly() def hasAcceptableInput(self): return _ConditionWidget.hasAcceptableInput(self) and \ self._txt_manufacturer.hasAcceptableInput() and \ self._txt_model.hasAcceptableInput() and \ self._txt_serial_number.hasAcceptableInput()