Exemple #1
0
    def __init__(self,
                 ui,
                 label: str,
                 object,
                 xy_property,
                 unit="nm",
                 multiplier=1E9):
        super().__init__(ui.create_row_widget())

        stage_x_field = ui.create_line_edit_widget()
        stage_x_field.bind_text(
            Control2DBinding(
                object, xy_property, "x",
                Converter.PhysicalValueToStringConverter(unit, multiplier)))

        stage_y_field = ui.create_line_edit_widget()
        stage_y_field.bind_text(
            Control2DBinding(
                object, xy_property, "y",
                Converter.PhysicalValueToStringConverter(unit, multiplier)))

        row = self.content_widget

        row.add_spacing(8)
        row.add(ui.create_label_widget(label))
        row.add_spacing(8)
        row.add(ui.create_label_widget(_("X")))
        row.add_spacing(8)
        row.add(stage_x_field)
        row.add_spacing(8)
        row.add(ui.create_label_widget(_("Y")))
        row.add_spacing(8)
        row.add(stage_y_field)
        row.add_spacing(8)
Exemple #2
0
 def __init__(self,
              source=None,
              source_property=None,
              target=None,
              target_property=None,
              *,
              parent=None):
     super().__init__("property-connection", parent=parent)
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("source_property")
     self.define_property("target_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("target_property")
     # these are only set in persistent object context changed
     self.__source = None
     self.__target = None
     self.__binding = None
     self.__target_property_changed_listener = None
     self.__registration_listener = None
     # suppress messages while we're setting source or target
     self.__suppress = False
     # but setup if we were passed objects
     if source is not None:
         self.source_uuid = source.uuid
     if source_property:
         self.source_property = source_property
     if target is not None:
         self.target_uuid = target.uuid
     if target_property:
         self.target_property = target_property
Exemple #3
0
    def __init__(self,
                 storage_system=None,
                 storage_cache=None,
                 *,
                 auto_project: bool = True):
        super().__init__()

        self.define_root_context()
        self.define_type("profile")
        self.define_relationship("workspaces", WorkspaceLayout.factory)
        self.define_relationship("data_groups", DataGroup.data_group_factory)
        self.define_relationship("project_references",
                                 project_reference_factory,
                                 insert=self.__insert_project_reference,
                                 remove=self.__remove_project_reference)
        self.define_property("workspace_uuid",
                             converter=Converter.UuidToStringConverter())
        self.define_property(
            "data_item_references", dict(), hidden=True
        )  # map string key to data item, used for data acquisition channels
        self.define_property(
            "data_item_variables", dict(), hidden=True
        )  # map string key to data item, used for reference in scripts
        self.define_property("target_project_reference_uuid",
                             converter=Converter.UuidToStringConverter(),
                             changed=self.__property_changed)
        self.define_property("work_project_reference_uuid",
                             converter=Converter.UuidToStringConverter(),
                             changed=self.__property_changed)
        self.define_property("closed_items", list())

        self.storage_system = storage_system or FileStorageSystem.MemoryPersistentStorageSystem(
        )
        self.storage_system.load_properties()

        self.__work_project_reference: typing.Optional[ProjectReference] = None
        self.__target_project_reference: typing.Optional[
            ProjectReference] = None

        self.storage_cache = storage_cache or Cache.DictStorageCache(
        )  # need to deallocate
        self.set_storage_system(self.storage_system)

        self.__document_model = None
        self.profile_context = None

        # helper object to produce the projects sequence
        oo = Observer.ObserverBuilder()
        oo.source(self).ordered_sequence_from_array("project_references").map(
            oo.x.prop("project")).filter(lambda x: x is not None).trampoline(
                self, "projects")
        self.__projects_observer = oo.make_observable()

        self.__is_read = False

        if auto_project:
            self.profile_context = MemoryProfileContext()
            project_reference = self.add_project_memory()
            self.work_project_reference_uuid = project_reference.uuid
            self.target_project_reference_uuid = project_reference.uuid
    def __init__(self,
                 ui: UserInterface.UserInterface,
                 label: str,
                 instrument: InstrumentDevice.Instrument,
                 xy_property: str,
                 unit: str = "nm",
                 multiplier: float = 1E9) -> None:
        row_widget = ui.create_row_widget()
        super().__init__(row_widget)

        stage_x_field = ui.create_line_edit_widget()
        stage_x_field.bind_text(
            Control2DBinding(
                instrument, xy_property, "x",
                Converter.PhysicalValueToStringConverter(unit, multiplier)))

        stage_y_field = ui.create_line_edit_widget()
        stage_y_field.bind_text(
            Control2DBinding(
                instrument, xy_property, "y",
                Converter.PhysicalValueToStringConverter(unit, multiplier)))

        row_widget.add_spacing(8)
        row_widget.add(ui.create_label_widget(label))
        row_widget.add_spacing(8)
        row_widget.add(ui.create_label_widget(_("X")))
        row_widget.add_spacing(8)
        row_widget.add(stage_x_field)
        row_widget.add_spacing(8)
        row_widget.add(ui.create_label_widget(_("Y")))
        row_widget.add_spacing(8)
        row_widget.add(stage_y_field)
        row_widget.add_spacing(8)
Exemple #5
0
    def __init__(
            self,
            storage_system: typing.Optional[
                FileStorageSystem.PersistentStorageSystem] = None,
            storage_cache: typing.Optional[Cache.CacheLike] = None,
            *,
            profile_context: typing.Optional[ProfileContext] = None) -> None:
        super().__init__()
        self.__class__.count += 1

        self.define_root_context()
        self.define_type("profile")
        self.define_property("last_project_reference",
                             converter=Converter.UuidToStringConverter(),
                             hidden=True)
        self.define_property("work_project_reference_uuid",
                             converter=Converter.UuidToStringConverter(),
                             hidden=True)
        self.define_property("closed_items", list(), hidden=True)
        self.define_property("script_items_updated",
                             False,
                             changed=self.__property_changed,
                             hidden=True)
        self.define_relationship("project_references",
                                 project_reference_factory,
                                 insert=self.__insert_project_reference,
                                 remove=self.__remove_project_reference,
                                 hidden=True)
        self.define_relationship(
            "script_items",
            typing.cast(
                typing.Callable[[typing.Callable[[str], str]],
                                typing.Optional[Persistence.PersistentObject]],
                script_item_factory),
            hidden=True)

        self.storage_system = storage_system or FileStorageSystem.MemoryPersistentStorageSystem(
        )
        self.storage_system.load_properties()

        self.storage_cache: typing.Any = storage_cache or Cache.DictStorageCache(
        )  # need to deallocate
        self.set_storage_system(self.storage_system)

        self.profile_context = None

        # helper object to produce the projects sequence
        oo = Observer.ObserverBuilder()
        oo.source(typing.cast(
            Observer.ItemValue,
            self)).ordered_sequence_from_array("project_references").map(
                oo.x.prop("project")).filter(
                    lambda x: x is not None).trampoline(self, "projects")
        self.__projects_observer = oo.make_observable()

        if profile_context:
            self.profile_context = profile_context
            self.add_project_memory()
Exemple #6
0
 def __init__(self, type: str):
     super().__init__()
     self.define_type(type)
     self.define_property("project_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("last_used",
                          None,
                          converter=Converter.DatetimeToStringConverter())
     self.__has_project_info_been_read = False
     self.__project_version = None
     self.__project_state = "invalid"
     self.__document_model: typing.Optional[
         DocumentModel.DocumentModel] = None
     self.__document_model_about_to_close_listener = None
     self.storage_cache = None
Exemple #7
0
 def __init__(self, type: str) -> None:
     super().__init__()
     self.define_type(type)
     self.define_property("project_uuid",
                          converter=Converter.UuidToStringConverter(),
                          hidden=True)
     self.define_property("last_used",
                          None,
                          converter=Converter.DatetimeToStringConverter(),
                          hidden=True)
     self.__has_project_info_been_read = False
     self.__project_version: typing.Optional[int] = None
     self.__project_state = "invalid"
     self.__document_model: typing.Optional[
         DocumentModel.DocumentModel] = None
     self.storage_cache: typing.Optional[Cache.CacheLike] = None
Exemple #8
0
 def scan_width_changed(text: str) -> None:
     scan_width = Converter.IntegerToStringConverter().convert_back(text) if text else 1
     scan_width = max(scan_width, 1)
     if scan_width != self.__scan_width:
         self.__scan_width = scan_width
         update_context()
     self.__scan_width_widget.request_refocus()
Exemple #9
0
 def get_float(self,
               prompt: str,
               default_value: float = 0,
               format_str: str = None) -> float:
     converter = Converter.FloatToStringConverter(format_str)
     result = self.get_string(prompt, converter.convert(default_value))
     return converter.convert_back(result)
Exemple #10
0
 def __init__(self, expression: str = None):
     super().__init__()
     self.__container_weak_ref = None
     self.about_to_be_removed_event = Event.Event()
     self.about_to_cascade_delete_event = Event.Event()
     self._about_to_be_removed = False
     self._closed = False
     self.define_type("computation")
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("original_expression", expression)
     self.define_property("error_text",
                          hidden=True,
                          changed=self.__error_changed)
     self.define_property("label", changed=self.__label_changed)
     self.define_property("processing_id")  # see note above
     self.define_relationship("variables", variable_factory)
     self.define_relationship("results", result_factory)
     self.__source = None
     self.__variable_changed_event_listeners = dict()
     self.__variable_needs_rebind_event_listeners = dict()
     self.__result_needs_rebind_event_listeners = dict()
     self.last_evaluate_data_time = 0
     self.needs_update = expression is not None
     self.computation_mutated_event = Event.Event()
     self.computation_output_changed_event = Event.Event()
     self.variable_inserted_event = Event.Event()
     self.variable_removed_event = Event.Event()
     self.is_initial_computation_complete = threading.Event(
     )  # helpful for waiting for initial computation
     self._evaluation_count_for_test = 0
     self.target_output = None
     self._inputs = set(
     )  # used by document model for tracking dependencies
     self._outputs = set()
Exemple #11
0
 def __init__(self, container: typing.Any, mode: Mode) -> None:
     super().__init__()
     self.__model = container
     self.mode = mode
     self.title_label_widget: typing.Optional[UserInterface.LabelWidget] = None
     self.count_label_widget: typing.Optional[UserInterface.LabelWidget] = None
     self.balance_converter = Converter.IntegerToStringConverter()
Exemple #12
0
    def connect_scan_hardware_source(self, scan_hardware_source):

        self.__scan_width_model = Model.PropertyModel()
        self.__scan_height_model = Model.PropertyModel()

        scan_width_binding = Binding.PropertyBinding(
            self.__scan_width_model,
            "value",
            converter=Converter.IntegerToStringConverter())
        scan_height_binding = Binding.PropertyBinding(
            self.__scan_height_model,
            "value",
            converter=Converter.IntegerToStringConverter())

        def scan_profile_parameters_changed(profile_index, frame_parameters):
            if profile_index == 2:
                self.__scan_width_model.value = frame_parameters.size[1]
                self.__scan_height_model.value = frame_parameters.size[0]

        self.__scan_frame_parameters_changed_event_listener = scan_hardware_source.frame_parameters_changed_event.listen(
            scan_profile_parameters_changed)

        scan_profile_parameters_changed(
            2, scan_hardware_source.get_frame_parameters(2))

        def update_scan_width(scan_width):
            if scan_width > 0:
                frame_parameters = scan_hardware_source.get_frame_parameters(2)
                frame_parameters.size = frame_parameters.size[0], scan_width
                scan_hardware_source.set_frame_parameters(2, frame_parameters)
            self.__update_estimate()

        def update_scan_height(scan_height):
            if scan_height > 0:
                frame_parameters = scan_hardware_source.get_frame_parameters(2)
                frame_parameters.size = scan_height, frame_parameters.size[1]
                scan_hardware_source.set_frame_parameters(2, frame_parameters)
            self.__update_estimate()

        # only connect model to update hardware source after it has been initialized.
        self.__scan_width_model.on_value_changed = update_scan_width
        self.__scan_height_model.on_value_changed = update_scan_height

        self.__scan_width_widget._widget.bind_text(
            scan_width_binding)  # the widget will close the binding
        self.__scan_height_widget._widget.bind_text(
            scan_height_binding)  # the widget will close the binding
Exemple #13
0
 def __init__(self, display_item=None, line_profile=None, *, parent=None):
     super().__init__("interval-list-connection", parent=parent)
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("target_uuid",
                          converter=Converter.UuidToStringConverter())
     # these are only set in persistent object context changed
     self.__source = display_item
     self.__target = line_profile
     self.__item_inserted_event_listener = None
     self.__item_removed_event_listener = None
     self.__interval_mutated_listeners = list()
     # but setup if we were passed objects
     if display_item is not None:
         self.source_uuid = display_item.uuid
     if line_profile is not None:
         self.target_uuid = line_profile.uuid
Exemple #14
0
 def test_float_to_scaled_integer_with_negative_min(self) -> None:
     converter = Converter.FloatToScaledIntegerConverter(1000, -100, 100)
     self.assertAlmostEqual(converter.convert(0) or 0, 500)
     self.assertAlmostEqual(converter.convert(-100) or 0, 0)
     self.assertAlmostEqual(converter.convert(100) or 0, 1000)
     self.assertAlmostEqual(converter.convert_back(converter.convert(0)) or 0.0, 0)
     self.assertAlmostEqual(converter.convert_back(converter.convert(-100)) or 0.0, -100)
     self.assertAlmostEqual(converter.convert_back(converter.convert(100)) or 0.0, 100)
 def scan_count_changed(text: str) -> None:
     scan_count = Converter.IntegerToStringConverter().convert_back(
         text) or 1
     scan_count = max(scan_count, 1)
     if scan_count != self.__scan_count:
         self.__scan_count = scan_count
         update_context()
     self.__scan_count_widget.request_refocus()
Exemple #16
0
    def __init__(self, ui, app=None):
        super().__init__(ui, app)

        # a text model to hold the label widget text
        text_model = Model.PropertyModel(0)

        # make bitmap_data (random static) for icon push button
        bitmap = numpy.zeros((32, 32, 4), numpy.uint8)
        bitmap[..., 0] = (numpy.random.randn(32, 32) * 255).astype(
            numpy.uint8)  # blue
        bitmap[..., 1] = (numpy.random.randn(32, 32) * 255).astype(
            numpy.uint8)  # green
        bitmap[..., 2] = (numpy.random.randn(32, 32) * 255).astype(
            numpy.uint8)  # red
        bitmap[..., 3] = 255
        bitmap_data = bitmap.view(numpy.uint32).reshape(bitmap.shape[:-1])

        # create the widgets for the window
        label_widget = self.ui.create_label_widget()
        push_button_widget = self.ui.create_push_button_widget("Push Me")
        icon_button_widget = self.ui.create_push_button_widget()
        icon_button_widget.icon = bitmap_data

        # create a row for the buttons
        button_row = self.ui.create_row_widget()
        button_row.add_spacing(13)
        button_row.add(push_button_widget)
        button_row.add_spacing(13)
        button_row.add(icon_button_widget)
        button_row.add_stretch()

        # create a row for the label
        label_row = self.ui.create_row_widget()
        label_row.add_spacing(13)
        label_row.add(label_widget)
        label_row.add_stretch()

        # create a column to hold the two rows and attach it to the window
        content = self.ui.create_column_widget()
        content.add(button_row)
        content.add(label_row)
        self.attach_widget(content)

        # when either button is clicked, this will be called
        def button_clicked():
            text_model.value = text_model.value + 1

        # connect the buttons to the button_clicked function
        push_button_widget.on_clicked = button_clicked
        icon_button_widget.on_clicked = button_clicked

        # and bind the label txt to the 'value' property of the text_model, but attach an integer-to-string converter to it.
        label_widget.bind_text(
            Binding.PropertyBinding(
                text_model,
                "value",
                converter=Converter.IntegerToStringConverter(
                    format="You have clicked {:d} times.")))
Exemple #17
0
def build_value(type: str, value: typing.Any) -> typing.Any:
    if value is None:
        return None
    if type in (SET, ):
        return set(value)
    if type in (BOOLEAN, ):
        return bool(value)
    if type in (INT, ):
        return int(value)
    if type in (FLOAT, ):
        return float(value)
    if type in (TIMESTAMP, ):
        return Converter.DatetimeToStringConverter().convert_back(value)
    if type in (UUID, ):
        return Converter.UuidToStringConverter().convert_back(value)
    if type in (PATH, ):
        return Converter.PathToStringConverter().convert_back(value)
    return value
Exemple #18
0
 def __init__(self, type: str):
     super().__init__()
     self.define_type(type)
     self.define_property("project_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("is_active",
                          False,
                          changed=self.__property_changed)
     self.__project: typing.Optional[Project.Project] = None
Exemple #19
0
def dict_value(type: str, value):
    if value is None:
        return None
    if type in (SET, ):
        return list(value)
    if type in (BOOLEAN, ):
        return bool(value)
    if type in (INT, ):
        return int(value)
    if type in (FLOAT, ):
        return float(value)
    if type in (TIMESTAMP):
        return Converter.DatetimeToStringConverter().convert(value)
    if type in (UUID):
        return Converter.UuidToStringConverter().convert(value)
    if type in (PATH):
        return Converter.PathToStringConverter().convert(value)
    return value
Exemple #20
0
def dict_value(type: str, value: typing.Any) -> DictValue:
    if value is None:
        return None
    if type in (SET, ):
        return list(value)
    if type in (BOOLEAN, ):
        return bool(value)
    if type in (INT, ):
        return int(value)
    if type in (FLOAT, ):
        return float(value)
    if type in (TIMESTAMP, ):
        return Converter.DatetimeToStringConverter().convert(value)
    if type in (UUID, ):
        return Converter.UuidToStringConverter().convert(value)
    if type in (PATH, ):
        return Converter.PathToStringConverter().convert(value)
    return typing.cast(DictValue, value)
Exemple #21
0
 def secondary_specifier_uuid_str(self, value):
     converter = Converter.UuidToStringConverter()
     value = converter.convert(converter.convert_back(value))
     if self.secondary_specifier_uuid_str != value and self.secondary_specifier:
         secondary_specifier = self.secondary_specifier
         if value:
             secondary_specifier["uuid"] = value
         else:
             secondary_specifier.pop("uuid", None)
         self.secondary_specifier = secondary_specifier
Exemple #22
0
    def __init__(self, storage_system: FileStorageSystem.ProjectStorageSystem):
        super().__init__()

        self.define_type("project")
        self.define_property("title", str())
        self.define_relationship("data_items",
                                 data_item_factory,
                                 insert=self.__data_item_inserted,
                                 remove=self.__data_item_removed)
        self.define_relationship("display_items",
                                 display_item_factory,
                                 insert=self.__display_item_inserted,
                                 remove=self.__display_item_removed)
        self.define_relationship("computations",
                                 computation_factory,
                                 insert=self.__computation_inserted,
                                 remove=self.__computation_removed)
        self.define_relationship("data_structures",
                                 data_structure_factory,
                                 insert=self.__data_structure_inserted,
                                 remove=self.__data_structure_removed)
        self.define_relationship("connections",
                                 Connection.connection_factory,
                                 insert=self.__connection_inserted,
                                 remove=self.__connection_removed)
        self.define_relationship("data_groups",
                                 DataGroup.data_group_factory,
                                 insert=self.__data_group_inserted,
                                 remove=self.__data_group_removed)
        self.define_relationship("workspaces", WorkspaceLayout.factory)
        self.define_property("workspace_uuid",
                             converter=Converter.UuidToStringConverter())
        self.define_property(
            "data_item_references",
            dict(),
            hidden=True,
            changed=self.__property_changed
        )  # map string key to data item, used for data acquisition channels
        self.define_property(
            "mapped_items", list(), changed=self.__property_changed
        )  # list of item references, used for shortcut variables in scripts

        self.handle_start_read = None
        self.handle_insert_model_item = None
        self.handle_remove_model_item = None
        self.handle_finish_read = None

        self.__has_been_read = False

        self._raw_properties = None  # debugging

        self.__storage_system = storage_system

        self.set_storage_system(self.__storage_system)
 def scan_width_changed(text):
     displayed_width = Converter.IntegerToStringConverter(
     ).convert_back(text) if text else 1
     spacing = self.__graphic_width / displayed_width if self.__graphic_width and self.__graphic_width > 0 else 0
     if spacing > 0 and self.__calibration:
         if self.__scan_spacing_px != spacing:
             self.__scan_spacing_px = spacing
             update_context()
         self.__scan_width_widget.select_all()
     else:
         self.__scan_spacing_px = None
Exemple #24
0
 def resolve_variable(
         self,
         object_specifier: dict) -> typing.Optional[ComputationVariable]:
     if object_specifier:
         uuid_str = object_specifier.get("uuid")
         uuid_ = Converter.UuidToStringConverter().convert_back(
             uuid_str) if uuid_str else None
         if uuid_:
             for variable in self.variables:
                 if variable.uuid == uuid_:
                     return variable
     return None
Exemple #25
0
 def __init__(self, data_item: API_1_0.DataItem, src_data_item: API_1_0.DataItem, offset_graphic: API_1_0.Graphic, second_graphic: API_1_0.Graphic, units='eV'):
     self.ev_converter = Converter.PhysicalValueToStringConverter(units)
     self.property_changed_event = Event.Event()
     self.__data_item = data_item
     self.__src_data_item = src_data_item
     self.__offset_graphic = offset_graphic
     self.__second_graphic = second_graphic
     self.__offset_energy = 0
     self.__graphic_updating = False
     self.__second_point = data_item.display_xdata.dimensional_calibrations[0].convert_to_calibrated_value(second_graphic.position * len(data_item.display_xdata.data))
     self.__offset_changed_listener = offset_graphic._graphic.property_changed_event.listen(self.__offset_graphic_changed)
     self.__second_changed_listener = second_graphic._graphic.property_changed_event.listen(self.__second_graphic_changed)
Exemple #26
0
    def __init__(self,
                 storage_system=None,
                 storage_cache=None,
                 *,
                 profile_context: typing.Optional[ProfileContext] = None):
        super().__init__()
        self.__class__.count += 1

        self.define_root_context()
        self.define_type("profile")
        self.define_relationship("project_references",
                                 project_reference_factory,
                                 insert=self.__insert_project_reference,
                                 remove=self.__remove_project_reference)
        self.define_property("last_project_reference",
                             converter=Converter.UuidToStringConverter())
        self.define_property("work_project_reference_uuid",
                             converter=Converter.UuidToStringConverter())
        self.define_property("closed_items", list())

        self.storage_system = storage_system or FileStorageSystem.MemoryPersistentStorageSystem(
        )
        self.storage_system.load_properties()

        self.storage_cache = storage_cache or Cache.DictStorageCache(
        )  # need to deallocate
        self.set_storage_system(self.storage_system)

        self.profile_context = None

        # helper object to produce the projects sequence
        oo = Observer.ObserverBuilder()
        oo.source(self).ordered_sequence_from_array("project_references").map(
            oo.x.prop("project")).filter(lambda x: x is not None).trampoline(
                self, "projects")
        self.__projects_observer = oo.make_observable()

        if profile_context:
            self.profile_context = profile_context
            self.add_project_memory()
Exemple #27
0
 def __init__(self, type, *, parent=None):
     super().__init__()
     self.__container_weak_ref = None
     self.about_to_be_removed_event = Event.Event()
     self.about_to_cascade_delete_event = Event.Event()
     self._about_to_be_removed = False
     self._closed = False
     self.__registration_listener = None
     self.define_type(type)
     self.define_property("parent_uuid",
                          converter=Converter.UuidToStringConverter())
     self.__parent = parent
     if parent is not None:
         self.parent_uuid = parent.uuid
    def connect_camera_hardware_source(
            self,
            camera_hardware_source: HardwareSource.HardwareSource) -> None:
        assert isinstance(camera_hardware_source,
                          camera_base.CameraHardwareSource)

        self.__exposure_time_ms_value_model = Model.PropertyModel[float]()

        def update_exposure_time_ms(
                exposure_time_ms: typing.Optional[float]) -> None:
            if exposure_time_ms is not None and exposure_time_ms > 0 and isinstance(
                    camera_hardware_source, camera_base.CameraHardwareSource):
                frame_parameters = camera_hardware_source.get_frame_parameters(
                    0)
                frame_parameters.exposure_ms = exposure_time_ms
                camera_hardware_source.set_frame_parameters(
                    0, frame_parameters)
            self.__update_estimate()

        self.__exposure_time_ms_value_model.on_value_changed = update_exposure_time_ms

        exposure_time_ms_value_binding = Binding.PropertyBinding(
            self.__exposure_time_ms_value_model,
            "value",
            converter=Converter.FloatToStringConverter("{0:.1f}"))

        def eels_profile_parameters_changed(
                profile_index: int,
                frame_parameters: camera_base.CameraFrameParameters) -> None:
            if profile_index == 0 and isinstance(
                    camera_hardware_source, camera_base.CameraHardwareSource):
                expected_dimensions = camera_hardware_source.get_expected_dimensions(
                    frame_parameters.binning)
                self.__camera_width = expected_dimensions[1]
                self.__camera_height = expected_dimensions[0]
                if self.__exposure_time_ms_value_model:
                    self.__exposure_time_ms_value_model.value = frame_parameters.exposure_ms
                self.__update_estimate()

        self.__eels_frame_parameters_changed_event_listener = camera_hardware_source.frame_parameters_changed_event.listen(
            eels_profile_parameters_changed)

        eels_profile_parameters_changed(
            0, camera_hardware_source.get_frame_parameters(0))

        typing.cast(UserInterfaceModule.LineEditWidget,
                    self.__exposure_time_widget._widget).bind_text(
                        exposure_time_ms_value_binding
                    )  # the widget will close the binding
Exemple #29
0
 def __init__(self, *, structure_type: str = None, source=None):
     super().__init__()
     self.__container_weak_ref = None
     self.about_to_be_removed_event = Event.Event()
     self.about_to_cascade_delete_event = Event.Event()
     self._about_to_be_removed = False
     self._closed = False
     self.__properties = dict()
     self.__referenced_objects = dict()
     self.define_type("data_structure")
     self.define_property("structure_type", structure_type)
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     # properties is handled explicitly
     self.data_structure_changed_event = Event.Event()
     self.referenced_objects_changed_event = Event.Event()
     self.__source = source
     if source is not None:
         self.source_uuid = source.uuid
    def connect_camera_hardware_source(self, camera_hardware_source):

        self.__exposure_time_ms_value_model = Model.PropertyModel()

        def update_exposure_time_ms(exposure_time_ms):
            if exposure_time_ms > 0:
                frame_parameters = camera_hardware_source.get_frame_parameters(
                    0)
                frame_parameters.exposure_ms = exposure_time_ms
                camera_hardware_source.set_frame_parameters(
                    0, frame_parameters)
            self.__update_estimate()

        self.__exposure_time_ms_value_model.on_value_changed = update_exposure_time_ms

        exposure_time_ms_value_binding = Binding.PropertyBinding(
            self.__exposure_time_ms_value_model,
            "value",
            converter=Converter.FloatToStringConverter("{0:.1f}"))

        def eels_profile_parameters_changed(profile_index, frame_parameters):
            if profile_index == 0:
                expected_dimensions = camera_hardware_source.get_expected_dimensions(
                    frame_parameters.binning)
                self.__camera_width = expected_dimensions[1]
                self.__camera_height = expected_dimensions[0]
                self.__exposure_time_ms_value_model.value = frame_parameters.exposure_ms
                self.__update_estimate()

        self.__eels_frame_parameters_changed_event_listener = camera_hardware_source.frame_parameters_changed_event.listen(
            eels_profile_parameters_changed)

        eels_profile_parameters_changed(
            0, camera_hardware_source.get_frame_parameters(0))

        self.__exposure_time_widget._widget.bind_text(
            exposure_time_ms_value_binding
        )  # the widget will close the binding