class InclusionWidget(_GeometryWidget): def __init__(self, parent=None): _GeometryWidget.__init__(self, parent=parent) self.setAccessibleName("Inclusion") def _initUI(self): # Widgets self._lbl_substrate = QLabel('Substrate') self._lbl_substrate.setStyleSheet('color: blue') self._lst_substrate = MaterialListWidget(_SubstrateBody.material) self._lbl_inclusion = QLabel('Inclusion') self._lbl_inclusion.setStyleSheet('color: blue') self._lst_inclusion = MaterialListWidget(_InclusionBody.material) self._lbl_diameter = QLabel('Inclusion diameter') self._lbl_diameter.setStyleSheet('color: blue') self._txt_diameter = DiameterWidget(_InclusionBody.diameter_m) # Layouts layout = _GeometryWidget._initUI(self) layout.insertRow(0, self._lbl_substrate) layout.insertRow(1, self._lst_substrate) layout.insertRow(2, self._lbl_inclusion) layout.insertRow(3, self._lst_inclusion) layout.insertRow(4, self._lbl_diameter, self._txt_diameter) return layout def value(self): return Inclusion(substrate_material=self._lst_substrate.values(), inclusion_material=self._lst_inclusion.values(), inclusion_diameter_m=self._txt_diameter.values(), tilt_rad=self._txt_tilt.values(), rotation_rad=self._txt_rotation.values()) def setValue(self, geometry): _GeometryWidget.setValue(self, geometry) if hasattr(geometry, 'substrate') and \ hasattr(geometry.substrate, 'material'): self._lst_substrate.setValues(geometry.substrate.material) if hasattr(geometry, 'inclusion') and \ hasattr(geometry.inclusion, 'material'): self._lst_inclusion.setValues(geometry.inclusion.material) if hasattr(geometry, 'inclusion') and \ hasattr(geometry.inclusion, 'diameter_m'): self._txt_diameter.setValues(geometry.inclusion.diameter_m) def setReadOnly(self, state): _GeometryWidget.setReadOnly(self, state) style = 'color: none' if state else 'color: blue' self._lbl_substrate.setStyleSheet(style) self._lbl_inclusion.setStyleSheet(style) self._lbl_diameter.setStyleSheet(style) def setMaterialClass(self, clasz): self._lst_substrate.setMaterialClass(clasz) self._lst_inclusion.setMaterialClass(clasz)
class HorizontalLayersWidget(_GeometryWidget): def __init__(self, parent=None): _GeometryWidget.__init__(self, parent=parent) self.setAccessibleName("Horizontal layers") def _initUI(self): # Widgets self._lbl_layer = QLabel('Layer') self._lbl_layer.setStyleSheet('color: blue') self._lst_layer = LayerListWidget(HorizontalLayers.layers) self._lbl_substrate = QLabel("Substrate (optional)") self._lbl_substrate.setStyleSheet('color: blue') self._lst_substrate = MaterialListWidget(_HorizontalSubstrateBody.material) self._lst_substrate.setRequired(False) # Layouts layout = _GeometryWidget._initUI(self) layout.insertRow(0, self._lbl_layer) layout.insertRow(1, self._lst_layer) layout.insertRow(2, self._lbl_substrate) layout.insertRow(3, self._lst_substrate) return layout def value(self): geometry = \ HorizontalLayers(substrate_material=self._lst_substrate.values(), tilt_rad=self._txt_tilt.values(), rotation_rad=self._txt_rotation.values()) for layer in self._lst_layer.values(): geometry.add_layer(layer.material, layer.thickness_m) return geometry def setValue(self, geometry): _GeometryWidget.setValue(self, geometry) if hasattr(geometry, 'substrate') and \ hasattr(geometry.substrate, 'material'): self._lst_substrate.setValues(geometry.substrate.material) if hasattr(geometry, 'layers'): self._lst_layer.setValues(geometry.layers) def setReadOnly(self, state): _GeometryWidget.setReadOnly(self, state) style = 'color: none' if state else 'color: blue' self._lbl_layer.setStyleSheet(style) self._lbl_substrate.setStyleSheet(style) def setMaterialClass(self, clasz): self._lst_layer.setMaterialClass(clasz) self._lst_substrate.setMaterialClass(clasz)
class SphereWidget(_GeometryWidget): def __init__(self, parent=None): _GeometryWidget.__init__(self, parent=parent) self.setAccessibleName("Sphere") def _initUI(self): # Widgets self._lbl_material = QLabel('Material') self._lbl_material.setStyleSheet('color: blue') self._lst_material = MaterialListWidget(_SphereBody.material) self._lbl_diameter = QLabel('Diameter') self._lbl_diameter.setStyleSheet('color: blue') self._txt_diameter = DiameterWidget(_SphereBody.diameter_m) # Layouts layout = _GeometryWidget._initUI(self) layout.insertRow(0, self._lbl_material) layout.insertRow(1, self._lst_material) layout.insertRow(2, self._lbl_diameter, self._txt_diameter) return layout def value(self): return Sphere(material=self._lst_material.values(), diameter_m=self._txt_diameter.values(), tilt_rad=self._txt_tilt.values(), rotation_rad=self._txt_rotation.values()) def setValue(self, geometry): _GeometryWidget.setValue(self, geometry) if hasattr(geometry, 'body') and hasattr(geometry.body, 'material'): self._lst_material.setValues(geometry.body.material) if hasattr(geometry, 'body') and hasattr(geometry.body, 'diameter_m'): self._txt_diameter.setValues(geometry.body.diameter_m) def setReadOnly(self, state): _GeometryWidget.setReadOnly(self, state) style = 'color: none' if state else 'color: blue' self._lbl_material.setStyleSheet(style) self._lbl_diameter.setStyleSheet(style) def setMaterialClass(self, clasz): self._lst_material.setMaterialClass(clasz)
class VerticalLayersWidget(_GeometryWidget): def __init__(self, parent=None): _GeometryWidget.__init__(self, parent=parent) self.setAccessibleName("Vertical layers") def _initUI(self): # Widgets self._lbl_left = QLabel('Left substrate') self._lbl_left.setStyleSheet('color: blue') self._lst_left = MaterialListWidget(_VerticalLeftSubstrateBody.material) self._lbl_layer = QLabel('Layer') self._lbl_layer.setStyleSheet('color: blue') self._lst_layer = LayerListWidget(VerticalLayers.layers) self._lst_layer.setRequired(False) self._lbl_right = QLabel('Right substrate') self._lbl_right.setStyleSheet('color: blue') self._lst_right = MaterialListWidget(_VerticalRightSubstrateBody.material) self._lbl_depth = QLabel('Depth') self._lbl_depth.setStyleSheet('color: blue') self._txt_depth = UnitParameterWidget(VerticalLayers.depth_m) self._txt_depth.setValues(['inf']) # Layouts layout = _GeometryWidget._initUI(self) sublayout = QHBoxLayout() subsublayout = QVBoxLayout() subsublayout.addWidget(self._lbl_left) subsublayout.addWidget(self._lst_left) sublayout.addLayout(subsublayout) subsublayout = QVBoxLayout() subsublayout.addWidget(self._lbl_layer) subsublayout.addWidget(self._lst_layer) sublayout.addLayout(subsublayout) subsublayout = QVBoxLayout() subsublayout.addWidget(self._lbl_right) subsublayout.addWidget(self._lst_right) sublayout.addLayout(subsublayout) layout.insertRow(0, sublayout) layout.insertRow(1, self._lbl_depth, self._txt_depth) return layout def value(self): geometry = VerticalLayers(left_material=self._lst_left.values(), right_material=self._lst_right.values(), depth_m=self._txt_depth.values(), tilt_rad=self._txt_tilt.values(), rotation_rad=self._txt_rotation.values()) for layer in self._lst_layer.values(): geometry.add_layer(layer.material, layer.thickness_m) return geometry def setValue(self, geometry): _GeometryWidget.setValue(self, geometry) if hasattr(geometry, 'left_substrate') and \ hasattr(geometry.left_substrate, 'material'): self._lst_left.setValues(geometry.left_substrate.material) if hasattr(geometry, 'layers'): self._lst_layer.setValues(geometry.layers) if hasattr(geometry, 'right_substrate') and \ hasattr(geometry.right_substrate, 'material'): self._lst_right.setValues(geometry.right_substrate.material) if hasattr(geometry, 'depth_m'): self._txt_depth.setValues(geometry.depth_m) def setReadOnly(self, state): _GeometryWidget.setReadOnly(self, state) style = 'color: none' if state else 'color: blue' self._lbl_left.setStyleSheet(style) self._lbl_layer.setStyleSheet(style) self._lbl_right.setStyleSheet(style) self._lbl_depth.setStyleSheet(style) def setMaterialClass(self, clasz): self._lst_left.setMaterialClass(clasz) self._lst_layer.setMaterialClass(clasz) self._lst_right.setMaterialClass(clasz)