def create_combo_box(self, ui: UserInterface.UserInterface) -> UserInterface.ComboBoxWidget: combo_box = ui.create_combo_box_widget(self.hardware_sources_model.value, item_getter=operator.attrgetter("display_name")) combo_box.bind_items(Binding.PropertyBinding(self.hardware_sources_model, "value")) combo_box.bind_current_index(Binding.PropertyBinding(self.hardware_source_index_model, "value")) return combo_box
def __init__(self, ui: UserInterface.UserInterface, instrument: InstrumentDevice.Instrument) -> None: column_widget = ui.create_column_widget(properties={ "margin": 6, "spacing": 2 }) super().__init__(column_widget) sample_combo_box = ui.create_combo_box_widget(instrument.sample_titles) sample_combo_box.current_index = instrument.sample_index sample_combo_box.bind_current_index( Binding.PropertyBinding(instrument, "sample_index")) voltage_field = ui.create_line_edit_widget() voltage_field.bind_text( Binding.PropertyBinding( instrument, "voltage", converter=Converter.PhysicalValueToStringConverter( units="keV", multiplier=1E-3))) beam_current_field = ui.create_line_edit_widget() beam_current_field.bind_text( ControlBinding(instrument, "BeamCurrent", converter=Converter.PhysicalValueToStringConverter( units="pA", multiplier=1E12))) stage_position_widget = PositionWidget(ui, _("Stage"), instrument, "stage_position_m") beam_shift_widget = PositionWidget(ui, _("Beam"), instrument, "beam_shift_m") defocus_field = ui.create_line_edit_widget() defocus_field.bind_text( ControlBinding(instrument, "C10", converter=Converter.PhysicalValueToStringConverter( units="nm", multiplier=1E9))) c12_widget = PositionWidget(ui, _("C12"), instrument, "C12") c21_widget = PositionWidget(ui, _("C21"), instrument, "C21") c23_widget = PositionWidget(ui, _("C23"), instrument, "C23") c3_field = ui.create_line_edit_widget() c3_field.bind_text( ControlBinding(instrument, "C30", converter=Converter.PhysicalValueToStringConverter( units="nm", multiplier=1E9))) c32_widget = PositionWidget(ui, _("C32"), instrument, "C32") c34_widget = PositionWidget(ui, _("C34"), instrument, "C34") blanked_checkbox = ui.create_check_box_widget(_("Beam Blanked")) blanked_checkbox.bind_checked( Binding.PropertyBinding(instrument, "is_blanked")) slit_in_checkbox = ui.create_check_box_widget(_("Slit In")) slit_in_checkbox.bind_checked( Binding.PropertyBinding(instrument, "is_slit_in")) voa_in_checkbox = ui.create_check_box_widget(_("VOA In")) voa_in_checkbox.bind_checked(ControlBinding(instrument, "S_VOA")) convergenve_angle_field = ui.create_line_edit_widget() convergenve_angle_field.bind_text( ControlBinding(instrument, "ConvergenceAngle", converter=Converter.PhysicalValueToStringConverter( units="mrad", multiplier=1E3))) c_aperture_widget = PositionWidget(ui, _("CAperture"), instrument, "CAperture", unit="mrad", multiplier=1E3) aperture_round_widget = PositionWidget(ui, _("ApertureRound"), instrument, "ApertureRound", unit="", multiplier=1) energy_offset_field = ui.create_line_edit_widget() energy_offset_field.bind_text( Binding.PropertyBinding( instrument, "energy_offset_eV", converter=Converter.FloatToStringConverter())) energy_dispersion_field = ui.create_line_edit_widget() energy_dispersion_field.bind_text( Binding.PropertyBinding( instrument, "energy_per_channel_eV", converter=Converter.FloatToStringConverter())) beam_row = ui.create_row_widget() beam_row.add_spacing(8) beam_row.add(blanked_checkbox) beam_row.add_spacing(8) beam_row.add(voa_in_checkbox) beam_row.add_stretch() eels_row = ui.create_row_widget() eels_row.add_spacing(8) eels_row.add(slit_in_checkbox) eels_row.add_spacing(8) eels_row.add(ui.create_label_widget("+eV")) eels_row.add_spacing(4) eels_row.add(energy_offset_field) eels_row.add_spacing(8) eels_row.add(ui.create_label_widget("eV/ch")) eels_row.add_spacing(4) eels_row.add(energy_dispersion_field) eels_row.add_stretch() defocus_row = ui.create_row_widget() defocus_row.add_spacing(8) defocus_row.add_spacing(8) defocus_row.add(ui.create_label_widget("Defocus")) defocus_row.add(defocus_field) defocus_row.add_stretch() c3_row = ui.create_row_widget() c3_row.add_spacing(8) c3_row.add_spacing(8) c3_row.add(ui.create_label_widget("Spherical Aberration")) c3_row.add(c3_field) c3_row.add_stretch() sample_row = ui.create_row_widget() sample_row.add_spacing(8) sample_row.add_spacing(8) sample_row.add(sample_combo_box) sample_row.add_stretch() voltage_row = ui.create_row_widget() voltage_row.add_spacing(8) voltage_row.add_spacing(8) voltage_row.add(ui.create_label_widget("Voltage")) voltage_row.add(voltage_field) voltage_row.add_stretch() beam_current_row = ui.create_row_widget() beam_current_row.add_spacing(8) beam_current_row.add_spacing(8) beam_current_row.add(ui.create_label_widget("Beam Current")) beam_current_row.add(beam_current_field) beam_current_row.add_stretch() convergence_angle_row = ui.create_row_widget() convergence_angle_row.add_spacing(8) convergence_angle_row.add_spacing(8) convergence_angle_row.add(ui.create_label_widget("Convergence Angle")) convergence_angle_row.add(convergenve_angle_field) convergence_angle_row.add_stretch() column_widget.add(sample_row) column_widget.add(voltage_row) column_widget.add(beam_current_row) column_widget.add(stage_position_widget) column_widget.add(beam_shift_widget) column_widget.add(defocus_row) column_widget.add(c12_widget) column_widget.add(c21_widget) column_widget.add(c23_widget) column_widget.add(c3_row) column_widget.add(c32_widget) column_widget.add(c34_widget) column_widget.add(beam_row) column_widget.add(convergence_angle_row) column_widget.add(c_aperture_widget) column_widget.add(aperture_round_widget) column_widget.add(eels_row) column_widget.add_stretch()