Exemplo n.º 1
0
 def __init__(self, stem_controller: stem_controller.STEMController, savepath=None):
     self.spectrum_parameters = MultiEELSParameters(
                                [{'index': 0, 'offset_x': 0, 'exposure_ms': 1, 'frames': 1},
                                 {'index': 1, 'offset_x': 160, 'exposure_ms': 8, 'frames': 1},
                                 {'index': 2, 'offset_x': 320, 'exposure_ms': 16, 'frames': 1}])
     self.settings = MultiEELSSettings(
                     {'x_shifter': 'LossMagnetic', 'blanker': 'C_Blank', 'x_shift_delay': 0.05,
                      'focus': '', 'focus_delay': 0, 'auto_dark_subtract': False, 'bin_spectra': True,
                      'blanker_delay': 0.05, 'sum_frames': True, 'camera_hardware_source_id': '',
                      'use_multi_eels_calibration': False})
     self.stem_controller = stem_controller
     self.camera: camera_base.CameraHardwareSource = None
     self.scan_controller: scan_base.ScanHardwareSource = None
     self.zeros = {'x': 0, 'focus': 0}
     self.scan_calibrations = [{'offset': 0, 'scale': 1, 'units': ''}, {'offset': 0, 'scale': 1, 'units': ''}]
     self.__progress_counter = 0
     self.acquisition_state_changed_event = Event.Event()
     self.new_scan_data_ready_event = Event.Event()
     self.progress_updated_event = Event.Event()
     self.__active_settings = self.settings
     self.__active_spectrum_parameters = self.spectrum_parameters
     self.abort_event = threading.Event()
     self.__savepath = savepath # or os.path.join(os.path.expanduser('~'), 'MultiAcquire')
     self.load_settings()
     self.load_parameters()
     self.__settings_changed_event_listener = self.settings.settings_changed_event.listen(self.save_settings)
     self.__spectrum_parameters_changed_event_listener = self.spectrum_parameters.parameters_changed_event.listen(self.save_parameters)
Exemplo n.º 2
0
 def __init__(self,
              *,
              container=None,
              master_items_key: str = None,
              items_key: str = None,
              map_fn: typing.Callable = None,
              unmap_fn: typing.Callable = None,
              selection: Selection.IndexedSelection = None):
     super().__init__()
     self.__container = None
     self.__master_items_key = master_items_key
     self.__items_key = items_key
     self.__map_fn = map_fn or (lambda x: x)
     self.__unmap_fn = unmap_fn or (lambda x: x)
     self.__items: typing.List = list()  # a list of transformed items
     self._update_mutex = threading.RLock()
     self.__change_level = 0
     self.begin_changes_event = Event.Event()
     self.end_changes_event = Event.Event()
     self.__item_inserted_event_listener = None
     self.__item_removed_event_listener = None
     self.__begin_changes_event_listener = None
     self.__end_changes_event_listener = None
     self.__selections = list()
     if selection:
         self.__selections.append(selection)
     self.container = container
Exemplo n.º 3
0
 def __init__(
         self,
         *,
         container: typing.Optional[Observable.Observable] = None,
         master_items_key: typing.Optional[str] = None,
         items_key: typing.Optional[str] = None,
         map_fn: typing.Optional[MappedListModel._MapFunctionType] = None,
         unmap_fn: typing.Optional[MappedListModel._MapFunctionType] = None,
         selection: typing.Optional[Selection.IndexedSelection] = None
 ) -> None:
     super().__init__()
     self.__container = None
     self.__master_items_key = master_items_key or "items"
     self.__items_key = items_key or self.__master_items_key
     self.__map_fn = map_fn or (lambda x: x)
     self.__unmap_fn = unmap_fn or (lambda x: x)
     self.__items: typing.List[
         typing.Any] = list()  # a list of transformed items
     self._update_mutex = threading.RLock()
     self.__change_level = 0
     self.begin_changes_event = Event.Event()
     self.end_changes_event = Event.Event()
     self.__item_inserted_event_listener = None
     self.__item_removed_event_listener = None
     self.__begin_changes_event_listener = None
     self.__end_changes_event_listener = None
     self.__selections = list()
     if selection:
         self.__selections.append(selection)
     self.container = container
Exemplo n.º 4
0
 def __init__(self,
              *,
              container=None,
              master_items_key=None,
              items_key=None,
              selection=None):
     super().__init__()
     self.__container = None
     self.__master_items_key = master_items_key or items_key
     self.__items_key = items_key
     self.__master_items = list()  # a list of source items (to be filtered)
     self.__items = list()  # a list of filtered items
     self.__items_sorted = False
     self._update_mutex = threading.RLock()
     self.__filter = Filter(True)
     self.__sort_key = None
     self.__sort_reverse = False
     self.__change_level = 0
     self.reset_list_event = Event.Event()
     self.begin_changes_event = Event.Event()
     self.end_changes_event = Event.Event()
     self.__item_changed_event_listeners = dict()
     self.__item_inserted_event_listener = None
     self.__item_removed_event_listener = None
     self.__reset_list_event_listener = None
     self.__begin_changes_event_listener = None
     self.__end_changes_event_listener = None
     self.__selections = list()
     if selection:
         self.__selections.append(selection)
     self.container = container
Exemplo n.º 5
0
 def setUp(self):
     #self.app = Application.Application(TestUI.UserInterface(), set_global=False)
     HardwareSource.HardwareSourceManager().hardware_sources = []
     HardwareSource.HardwareSourceManager(
     ).hardware_source_added_event = Event.Event()
     HardwareSource.HardwareSourceManager(
     ).hardware_source_removed_event = Event.Event()
Exemplo n.º 6
0
 def setUp(self):
     self.app = Application.Application(TestUI.UserInterface(), set_global=False)
     self.source_image = numpy.random.randn(1024, 1024).astype(numpy.float32)
     self.exposure = 1.0
     HardwareSource.HardwareSourceManager().hardware_sources = []
     HardwareSource.HardwareSourceManager().hardware_source_added_event = Event.Event()
     HardwareSource.HardwareSourceManager().hardware_source_removed_event = Event.Event()
 def __init__(self, **kwargs):
     self.spectrum_parameters = MultiEELSParameters(
                                [{'index': 0, 'offset_x': 0, 'offset_y': 0, 'exposure_ms': 1, 'frames': 1},
                                 {'index': 1, 'offset_x': 160, 'offset_y': 0, 'exposure_ms': 8, 'frames': 1},
                                 {'index': 2, 'offset_x': 320, 'offset_y': 0, 'exposure_ms': 16, 'frames': 1}])
     self.settings = MultiEELSSettings(
                     {'x_shifter': 'LossMagnetic', 'y_shifter': '', 'x_units_per_ev': 1,
                      'y_units_per_px': 0.00081, 'blanker': 'C_Blank', 'x_shift_delay': 0.05, 'y_shift_delay': 0.05,
                      'focus': '', 'focus_delay': 0, 'saturation_value': 12000, 'y_align': True,
                      'stitch_spectra': False, 'auto_dark_subtract': False, 'bin_spectra': True,
                      'blanker_delay': 0.05, 'sum_frames': True, 'camera_hardware_source_id': ''})
     self.stem_controller = None
     self.camera = None
     self.superscan = None
     self.zeros = {'x': 0, 'y': 0, 'focus': 0}
     self.scan_calibrations = [{'offset': 0, 'scale': 1, 'units': ''}, {'offset': 0, 'scale': 1, 'units': ''}]
     self.__progress_counter = 0
     self.__flyback_pixels = 0
     self.acquisition_state_changed_event = Event.Event()
     self.new_data_ready_event = Event.Event()
     self.progress_updated_event = Event.Event()
     self.__stop_processing_event = threading.Event()
     self.__queue = queue.Queue()
     self.__acquisition_finished_event = threading.Event()
     self.__process_and_send_data_thread = None
     self.__active_settings = self.settings
     self.__active_spectrum_parameters = self.spectrum_parameters
     self.abort_event = threading.Event()
     self.__savepath = os.path.join(os.path.expanduser('~'), 'MultiAcquire')
     self.load_settings()
     self.load_parameters()
     self.__settings_changed_event_listener = self.settings.settings_changed_event.listen(self.save_settings)
     self.__spectrum_parameters_changed_event_listener = self.spectrum_parameters.parameters_changed_event.listen(self.save_parameters)
Exemplo n.º 8
0
 def __init__(
         self,
         *,
         structure_type: typing.Optional[str] = None,
         source: typing.Optional[Persistence.PersistentObject] = None
 ) -> None:
     super().__init__()
     self.__properties: typing.Dict[str, typing.Any] = dict()
     self.__referenced_object_proxies: typing.Dict[
         str, Persistence.PersistentObjectProxy[Persistence.
                                                PersistentObject]] = dict()
     self.define_type("data_structure")
     self.define_property("structure_type",
                          structure_type,
                          changed=self.__structure_type_changed,
                          hidden=True)
     self.define_property("source_specifier",
                          changed=self.__source_specifier_changed,
                          key="source_uuid",
                          hidden=True)
     # properties is handled explicitly
     self.data_structure_changed_event = Event.Event()
     self.data_structure_objects_changed_event = Event.Event()
     self.__source_reference = self.create_item_reference(item=source)
     self.source_specifier = Persistence.write_persistent_specifier(
         source.uuid) if source else None
     self.__entity: typing.Optional[Schema.Entity] = None
     self.__entity_property_changed_event_listener: typing.Optional[
         Event.EventListener] = None
     self.__create_entity()
Exemplo n.º 9
0
 def __init__(self):
     self.sections = list()
     self.item_inserted_event = Event.Event()
     self.item_removed_event = Event.Event()
     self.sections.append(Section("Apples"))
     self.sections.append(Section("Oranges"))
     self.title_model = Model.PropertyModel()
Exemplo n.º 10
0
 def __init__(
         self,
         schema: MDescription,
         values: typing.Optional[typing.List[typing.Any]] = None) -> None:
     if values is not None:
         items: typing.Optional[typing.List[typing.Any]] = list()
         assert isinstance(schema, dict)
         assert isinstance(items, list)
         item_schema = schema["items"]
         for value in values:
             items.append(build_value(item_schema, value=value))
     else:
         items = None
     super().__init__(items=items)
     self.schema = schema
     self.field_value_changed_event = Event.Event()
     self.array_item_inserted_event = Event.Event()
     self.array_item_removed_event = Event.Event()
     self.model_changed_event = Event.Event()
     self.__model_changed_listeners = list()
     for item in self.items:
         trampoline = None
         if isinstance(item, (RecordModel, ArrayModel)):
             trampoline = item.model_changed_event.listen(
                 self.model_changed_event.fire)
         self.__model_changed_listeners.append(trampoline)
Exemplo n.º 11
0
 def __init__(self):
     self.__probe_position_value = Model.PropertyModel()
     self.__probe_position_value.on_value_changed = self.set_probe_position
     self.__probe_state_stack = list()  # parked, or scanning
     self.__probe_state_stack.append("parked")
     self.probe_state_changed_event = Event.Event()
     self.__subscan_state_value = Model.PropertyModel(SubscanState.INVALID)
     self.__subscan_region_value = Model.PropertyModel(None)
     self.scan_data_items_changed_event = Event.Event()
    def __init__(self, stem_controller, device, hardware_source_id: str,
                 display_name: str):
        super().__init__(hardware_source_id, display_name)

        self.features["is_scanning"] = True

        # define events
        self.profile_changed_event = Event.Event()
        self.frame_parameters_changed_event = Event.Event()
        self.probe_state_changed_event = Event.Event()
        self.channel_state_changed_event = Event.Event()

        self.__stem_controller = stem_controller

        self.__probe_state_changed_event_listener = self.__stem_controller.probe_state_changed_event.listen(
            self.__probe_state_changed)
        self.__subscan_state_changed_event_listener = self.__stem_controller._subscan_state_value.property_changed_event.listen(
            self.__subscan_state_changed)
        self.__subscan_region_changed_event_listener = self.__stem_controller._subscan_region_value.property_changed_event.listen(
            self.__subscan_region_changed)

        ChannelInfo = collections.namedtuple("ChannelInfo",
                                             ["channel_id", "name"])
        self.__device = device
        self.__device.on_device_state_changed = self.__device_state_changed

        # add data channel for each device channel
        channel_info_list = [
            ChannelInfo(self.__make_channel_id(channel_index),
                        self.__device.get_channel_name(channel_index))
            for channel_index in range(self.__device.channel_count)
        ]
        for channel_info in channel_info_list:
            self.add_data_channel(channel_info.channel_id, channel_info.name)
        # add an associated sub-scan channel for each device channel
        for channel_index, channel_info in enumerate(channel_info_list):
            subscan_channel_index, subscan_channel_id, subscan_channel_name = self.get_subscan_channel_info(
                channel_index, channel_info.channel_id, channel_info.name)
            self.add_data_channel(subscan_channel_id, subscan_channel_name)

        self.__last_idle_position = None  # used for testing

        # configure the initial profiles from the device
        self.__profiles = list()
        self.__profiles.extend(self.__get_initial_profiles())
        self.__current_profile_index = self.__get_initial_profile_index()
        self.__frame_parameters = self.__profiles[0]
        self.__record_parameters = self.__profiles[2]

        self.__acquisition_task = None
        # the task queue is a list of tasks that must be executed on the UI thread. items are added to the queue
        # and executed at a later time in the __handle_executing_task_queue method.
        self.__task_queue = queue.Queue()
        self.__latest_values_lock = threading.RLock()
        self.__latest_values = dict()
        self.record_index = 1  # use to give unique name to recorded images
Exemplo n.º 13
0
 def __init__(self):
     super().__init__()
     self.define_type("data_group")
     self.define_property("title", _("Untitled"), validate=self.__validate_title, changed=self.__property_changed)
     self.define_property("display_item_references", list(), validate=self.__validate_display_item_references, converter=UuidsToStringsConverter(), changed=self.__property_changed)
     self.define_relationship("data_groups", data_group_factory, insert=self.__insert_data_group, remove=self.__remove_data_group)
     self.__get_display_item_by_uuid = None
     self.__display_items = list()
     self.__counted_display_items = collections.Counter()
     self.display_item_inserted_event = Event.Event()
     self.display_item_removed_event = Event.Event()
Exemplo n.º 14
0
            def __init__(self, variable):
                self.__variable = variable
                self.changed_event = Event.Event()
                self.needs_rebind_event = Event.Event()

                def property_changed(key):
                    if key == "value":
                        self.changed_event.fire()

                self.__variable_property_changed_listener = variable.property_changed_event.listen(
                    property_changed)
Exemplo n.º 15
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
Exemplo n.º 16
0
 def __init__(self, *, structure_type: str=None, source=None):
     super().__init__()
     self.__properties = dict()
     self.__referenced_object_proxies = dict()
     self.define_type("data_structure")
     self.define_property("structure_type", structure_type, changed=self.__structure_type_changed)
     self.define_property("source_specifier", changed=self.__source_specifier_changed, key="source_uuid")
     # properties is handled explicitly
     self.data_structure_changed_event = Event.Event()
     self.referenced_objects_changed_event = Event.Event()
     self.__source_proxy = self.create_item_proxy(item=source)
     self.source_specifier = source.project.create_specifier(source).write() if source else None
     self.__entity: typing.Optional[Schema.Entity] = None
     self.__create_entity()
Exemplo n.º 17
0
    def __init__(self, schema: MDescription, *, values=None):
        super().__init__()
        self.field_value_changed_event = Event.Event()
        self.array_item_inserted_event = Event.Event()
        self.array_item_removed_event = Event.Event()
        self.model_changed_event = Event.Event()
        self.__field_models = dict()
        self.__field_model_property_changed_listeners = dict()
        self.__field_model_changed_listeners = dict()
        self.__array_item_inserted_listeners = dict()
        self.__array_item_removed_listeners = dict()
        self.schema = schema
        assert isinstance(schema, dict)
        for field_schema in schema["fields"]:
            field_name = field_schema["name"]
            field_type = field_schema["type"]
            field_default = field_schema.get("default")
            field_model = build_model(field_type,
                                      default_value=field_default,
                                      value=(values or dict()).get(field_name))
            self.__field_models[field_name] = field_model

            def handle_property_changed(field_name, name):
                if name == "value":
                    self.property_changed_event.fire(field_name)

            def handle_array_item_inserted(field_name, key, value,
                                           before_index):
                if key == "items":
                    self.item_inserted_event.fire(field_name, value,
                                                  before_index)

            def handle_array_item_removed(field_name, key, value, index):
                if key == "items":
                    self.item_removed_event.fire(field_name, value, index)

            self.__field_model_property_changed_listeners[
                field_name] = field_model.field_value_changed_event.listen(
                    functools.partial(handle_property_changed, field_name))
            self.__field_model_changed_listeners[
                field_name] = field_model.model_changed_event.listen(
                    self.model_changed_event.fire)
            self.__array_item_inserted_listeners[
                field_name] = field_model.array_item_inserted_event.listen(
                    functools.partial(handle_array_item_inserted, field_name))
            self.__array_item_removed_listeners[
                field_name] = field_model.array_item_removed_event.listen(
                    functools.partial(handle_array_item_removed, field_name))
        self.__initialized = True
Exemplo n.º 18
0
    def __init__(self) -> None:
        self.storage_cache = Cache.DictStorageCache()

        self.profile_properties = dict()
        self.__storage_system = FileStorageSystem.MemoryPersistentStorageSystem(
            library_properties=self.profile_properties)
        self.__storage_system.load_properties()

        # these contain the data for each project.
        self.x_project_properties = dict()
        self.x_data_properties_map = dict()
        self.x_data_map = dict()
        self.x_trash_map = dict()

        # these contain the data for the first created project. they also facilitate legacy project testing.
        self.project_uuid = None
        self.project_properties = None
        self.data_properties_map = None
        self.data_map = None
        self.trash_map = None

        self._test_data_read_event = Event.Event()
        self.__profile = None

        self.__items_exit = list()
Exemplo n.º 19
0
    def __init__(self, profile: Profile.Profile) -> None:
        super().__init__()

        # cache
        self.__project_panel_items: typing.Optional[
            typing.List[ProjectPanelItemLike]] = None

        # define the top level list
        self.__root_node = TreeNode()

        # define events to make this a model
        self.property_changed_event = Event.Event()

        # define the closed items
        self.__closed_items = set(profile.closed_items)
        self.on_closed_items_changed: typing.Optional[typing.Callable[
            [typing.Set[str]], None]] = None

        def update_items(item: Observer.ItemValue) -> None:
            if self.__project_panel_items is not None:
                self.property_changed_event.fire("value")

        # build an observer that will call update_items whenever any of the project_references changes.
        oo = Observer.ObserverBuilder()
        oo.source(profile).tuple(
            oo.x.ordered_sequence_from_array(
                "project_references").collect_list()).action_fn(update_items)

        self.__profile_observer = typing.cast(Observer.AbstractItemSource,
                                              oo.make_observable())
    def __init__(self):
        # these events must be defined
        self.current_frame_parameters_changed_event = Event.Event()
        self.record_frame_parameters_changed_event = Event.Event()
        self.profile_changed_event = Event.Event()
        self.frame_parameters_changed_event = Event.Event()

        # optional event and identifier for settings. defining settings_id signals that
        # the settings should be managed as a dict by the container of this class. the container
        # will call apply_settings to initialize settings and then expect settings_changed_event
        # to be fired when settings change.
        self.settings_changed_event = Event.Event()
        self.settings_id = str()

        # the list of possible modes should be defined here
        self.modes = [str()]
Exemplo n.º 21
0
    def __init__(self, ui: UserInterface.UserInterface,
                 display_item: DisplayItem.DisplayItem) -> None:
        super().__init__()
        self._ui = ui
        self._display_item = display_item

        self.thumbnail_updated_event = Event.Event()
        self.__thumbnail_processor = ThumbnailProcessor(display_item)

        def thumbnail_changed() -> None:
            thumbnail_processor = self.__thumbnail_processor
            if thumbnail_processor:
                thumbnail_processor.mark_data_dirty()
                thumbnail_processor.recompute(ui)

        self.__display_changed_event_listener = display_item.display_changed_event.listen(
            thumbnail_changed)

        def thumbnail_updated() -> None:
            self.thumbnail_updated_event.fire()

        self.__thumbnail_processor.on_thumbnail_updated = thumbnail_updated

        # initial recompute, if required
        if self.__thumbnail_processor._is_cached_value_dirty:
            self.__thumbnail_processor.recompute(ui)

        def display_item_will_close() -> None:
            if self.__thumbnail_processor:
                self.__thumbnail_processor.close()
                self.__thumbnail_processor = typing.cast(typing.Any, None)

        self.__display_will_close_listener = display_item.about_to_be_removed_event.listen(
            display_item_will_close)
Exemplo n.º 22
0
class Handler:

    # method 1: explicitly handle events

    hello1_label = None

    def hello1_updated(self, widget, text):
        self.hello1_label.text = text
        if widget.focused:
            widget.select_all()

    # method 2: dialog handler becomes a model, explicit handling of hello2_text model property

    property_changed_event = Event.Event()

    __hello2_text = "Hello World Two"

    @property
    def hello2_text(self):
        return self.__hello2_text

    @hello2_text.setter
    def hello2_text(self, value):
        self.__hello2_text = value
        self.property_changed_event.fire("hello2_text")

    # method 3: use a property model

    hello3_model = Model.PropertyModel("Hello World Three")
Exemplo n.º 23
0
    def __init__(self, ui, display_item: DisplayItem.DisplayItem):
        super().__init__()
        self._ui = ui
        self._display_item = display_item

        self.thumbnail_updated_event = Event.Event()
        self.__thumbnail_processor = ThumbnailProcessor(display_item)
        self._on_will_delete = None

        def thumbnail_changed():
            thumbnail_processor = self.__thumbnail_processor
            if thumbnail_processor:
                thumbnail_processor.mark_data_dirty()
                thumbnail_processor.recompute_if_necessary(ui)

        self.__display_changed_event_listener = display_item.display_changed_event.listen(
            thumbnail_changed)

        def thumbnail_updated():
            self.thumbnail_updated_event.fire()

        self.__thumbnail_processor.on_thumbnail_updated = thumbnail_updated

        self.__thumbnail_processor.recompute_if_necessary(ui)

        def display_item_will_close():
            if self.__thumbnail_processor:
                self.__thumbnail_processor.close()
                self.__thumbnail_processor = None

        self.__display_will_close_listener = display_item.about_to_be_removed_event.listen(
            display_item_will_close)
Exemplo n.º 24
0
 def __init__(self, selection_style: typing.Optional[Style] = None, expanded_changed_event: bool = False) -> None:
     super().__init__()
     self.__changed_event = Event.Event()
     self.expanded_changed_event = expanded_changed_event  # whether to fire when updating indexes
     self.__indexes : typing.MutableSet[int] = set()
     self.__anchor_index : typing.Optional[int] = None
     self.selection_style = selection_style if selection_style else Style.multiple
Exemplo n.º 25
0
 def __init__(self):
     self.property_changed_event = Event.Event()
     self.title_edit = None
     self.caption_edit = None
     self.__is_rejected = False
     self.__title = display_item.title
     self.__caption = display_item.caption
Exemplo n.º 26
0
                    def __init__(self, container, hardware_source):
                        self.container = container
                        self.hardware_source = hardware_source
                        self.settings = video_base.video_configuration.get_settings_model(
                            hardware_source)
                        self.settings_original = copy.deepcopy(self.settings)
                        self.needs_saving_model = Model.PropertyModel(False)
                        self.property_changed_event = Event.Event()
                        self.apply_button = None
                        self.revert_button = None

                        def settings_changed(property_name):
                            self.needs_saving_model.value = True

                        self.__settings_changed_event_listener = self.settings.property_changed_event.listen(
                            settings_changed)

                        def needs_saving_model_changed(property_name):
                            if self.apply_button:
                                self.apply_button.enabled = self.needs_saving_model.value
                            if self.revert_button:
                                self.revert_button.enabled = self.needs_saving_model.value

                        self.__needs_saving_changed_event_listener = self.needs_saving_model.property_changed_event.listen(
                            needs_saving_model_changed)
Exemplo n.º 27
0
    def __init__(
            self, document_controller: DocumentController.DocumentController
    ) -> None:
        self.__weak_document_controller = weakref.ref(document_controller)
        self.__data_item: typing.Optional[DataItem.DataItem] = None

        # thread safe.
        def display_item_changed(
                display_item: typing.Optional[DisplayItem.DisplayItem]
        ) -> None:
            data_item = display_item.data_item if display_item else None

            def update_data_item() -> None:
                self.__set_data_item(data_item)

            document_controller = self.document_controller
            if document_controller:
                document_controller.add_task(
                    "update_data_item" + str(id(self)), update_data_item)

        self.__display_item_changed_event_listener = document_controller.focused_display_item_changed_event.listen(
            display_item_changed)
        self.__set_data_item(None)
        self.__metadata_changed_event_listener: typing.Optional[
            Event.EventListener] = None
        self.__metadata: typing.Optional[DataAndMetadata.MetadataType] = None
        self.metadata_changed_event = Event.Event()
Exemplo n.º 28
0
    def __init__(self, ui: UserInterface.UserInterface, app: typing.Optional[Application.BaseApplication] = None,
                 parent_window: typing.Optional[Window] = None, window_style: typing.Optional[str] = None,
                 persistent_id: typing.Optional[str] = None):
        Window.count += 1
        self.ui = ui
        self.parent_window = parent_window
        self.app: typing.Optional[Application.BaseApplication] = app or (parent_window.app if parent_window else None)
        self.on_close: typing.Optional[typing.Callable[[], None]] = None
        parent_ui_window = parent_window._document_window if parent_window else None
        self.__document_window = self.ui.create_document_window(parent_window=parent_ui_window)
        if window_style:
            self.__document_window.window_style = window_style
        self.__persistent_id = persistent_id
        self.__shown = False
        self.__request_close = False

        # Python 3.9+: should be weakref.ReferenceType[Dialog]
        self.__dialogs: typing.List[typing.Any] = list()

        self._window_close_event = Event.Event()

        self.__document_window.on_periodic = self.periodic
        self.__document_window.on_queue_task = self.queue_task
        self.__document_window.on_clear_queued_tasks = self.clear_queued_tasks
        self.__document_window.on_add_task = self.add_task
        self.__document_window.on_clear_task = self.clear_task
        self.__document_window.on_about_to_show = self.about_to_show
        self.__document_window.on_about_to_close = self.about_to_close
        self.__document_window.on_activation_changed = self.activation_changed
        self.__document_window.on_key_pressed = self.key_pressed
        self.__document_window.on_key_released = self.key_released
        self.__document_window.on_size_changed = self.size_changed
        self.__document_window.on_position_changed = self.position_changed
        self.__document_window.on_refocus_widget = self.refocus_widget
        self.__document_window.on_ui_activity = self._register_ui_activity
        self.__periodic_queue = Process.TaskQueue()
        self.__periodic_set = Process.TaskSet()
        self.__modal_actions: typing.List[Action] = list()

        # define old-style menu actions for backwards compatibility
        self._close_action = None
        self._page_setup_action = None
        self._print_action = None
        self._quit_action = None
        self._undo_action = None
        self._redo_action = None
        self._cut_action = None
        self._copy_action = None
        self._paste_action = None
        self._delete_action = None
        self._select_all_action = None
        self._minimize_action = None
        self._zoom_action = None
        self._bring_to_front_action = None

        # configure the event loop object. for backwards compatibility only.
        self.__event_loop = asyncio.get_event_loop_policy().get_event_loop()

        if app:
            app._window_created(self)
Exemplo n.º 29
0
    def __init__(self, display_item: DisplayItem.DisplayItem, ui: UserInterface.UserInterface):
        self.__display_item: typing.Optional[DisplayItem.DisplayItem] = display_item
        self.ui = ui
        self.needs_update_event = Event.Event()

        def display_item_changed() -> None:
            self.needs_update_event.fire()

        self.__display_changed_event_listener = display_item.item_changed_event.listen(display_item_changed) if display_item else None

        self.__display_item_about_to_be_removed_event_listener = None

        def display_item_removed() -> None:
            if self.__display_changed_event_listener:
                self.__display_changed_event_listener.close()
                self.__display_changed_event_listener = None
            if self.__display_item_about_to_be_removed_event_listener:
                self.__display_item_about_to_be_removed_event_listener.close()
                self.__display_item_about_to_be_removed_event_listener = None
            self.__display_item = None

        self.__display_item_about_to_be_removed_event_listener = display_item.about_to_be_removed_event.listen(display_item_removed) if display_item else None

        self.__thumbnail_updated_event_listener = None
        self.__thumbnail_source : typing.Optional[Thumbnails.ThumbnailSource] = None
                    def __init__(
                        self, container: typing.Any,
                        hardware_source: video_base.VideoHardwareSource
                    ) -> None:
                        self.container = container
                        self.hardware_source = hardware_source
                        self.settings = video_base.video_configuration.get_settings_model(
                            hardware_source)
                        self.settings_original = copy.deepcopy(self.settings)
                        self.needs_saving_model = Model.PropertyModel(False)
                        self.property_changed_event = Event.Event()
                        # these will be assigned by declarative setup
                        self.apply_button: typing.Optional[
                            UserInterface.PushButtonWidget] = None
                        self.revert_button: typing.Optional[
                            UserInterface.PushButtonWidget] = None

                        def settings_changed(property_name: str) -> None:
                            self.needs_saving_model.value = True

                        self.__settings_changed_event_listener = self.settings.property_changed_event.listen(
                            settings_changed) if self.settings else None

                        def needs_saving_model_changed(
                                property_name: str) -> None:
                            if self.apply_button:
                                self.apply_button.enabled = self.needs_saving_model.value or False
                            if self.revert_button:
                                self.revert_button.enabled = self.needs_saving_model.value or False

                        self.__needs_saving_changed_event_listener = self.needs_saving_model.property_changed_event.listen(
                            needs_saving_model_changed)