class MediaBrowser(Gramplet): """ Displays an object tree and a media preview for a person. """ def init(self): self.gui.WIDGET = self.build_gui() self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add_with_viewport(self.gui.WIDGET) self.gui.WIDGET.show() def build_gui(self): """ Build the GUI interface. """ top = Gtk.HBox() self.photo = Photo() self.photo.show() view = Gtk.TreeView() titles = [(_('Object'), 1, 250)] self.model = ListModel(view, titles, list_mode="tree", select_func=self.row_selected) top.pack_start(view, True, True, 0) top.pack_start(self.photo, True, False, 5) top.show_all() return top def db_changed(self): self.dbstate.db.connect('person-update', self.update) self.update() def active_changed(self, handle): self.update() def update_has_data(self): active_handle = self.get_active('Person') active = self.dbstate.db.get_person_from_handle(active_handle) self.set_has_data(self.get_has_data(active)) def main(self): active_handle = self.get_active('Person') active = self.dbstate.db.get_person_from_handle(active_handle) self.model.clear() self.photo.set_image(None) if active: self.display_data(active) else: self.set_has_data(False) def display_data(self, person): """ Display the object tree for the active person. """ self.add_media(person) self.add_events(person) self.add_sources(person) self.set_has_data(self.model.count > 0) def add_events(self, obj, parent_node=None): """ Add event nodes to the model. """ for event_ref in obj.get_event_ref_list(): handle = event_ref.ref name, event = navigation_label(self.dbstate.db, 'Event', handle) node = self.model.add([name], node=parent_node) self.add_sources(event, node) self.add_media(event, node) def add_sources(self, obj, parent_node=None): """ Add source nodes to the model. """ for citation_handle in obj.get_citation_list(): citation = self.dbstate.db.get_citation_from_handle(citation_handle) handle = citation.get_reference_handle() name, src = navigation_label(self.dbstate.db, 'Source', handle) node = self.model.add([name], node=parent_node) self.add_media(src, node) def add_media(self, obj, parent_node=None): """ Add media object nodes to the model. """ for media_ref in obj.get_media_list(): handle = media_ref.ref name, media = navigation_label(self.dbstate.db, 'Media', handle) full_path = media_path_full(self.dbstate.db, media.get_path()) rect = media_ref.get_rectangle() self.model.add([name], info=media_ref, node=parent_node) def row_selected(self, selection): """ Change the image when a row is selected. """ selected = self.model.get_selected_objects() if selected: if selected[0]: self.load_image(selected[0]) else: self.photo.set_image(None) else: self.photo.set_image(None) def load_image(self, media_ref): """ Display an image from the given media reference. """ media = self.dbstate.db.get_object_from_handle(media_ref.ref) full_path = media_path_full(self.dbstate.db, media.get_path()) mime_type = media.get_mime_type() rectangle = media_ref.get_rectangle() self.photo.set_image(full_path, mime_type, rectangle) def get_has_data(self, person): """ Return True if the gramplet has data, else return False. """ if person is None: return False elif person.get_event_ref_list(): return True elif person.get_citation_list(): return True elif person.get_media_list(): return True return False
class PersonDetails(Gramplet): """ Displays details for a person. """ def init(self): self.gui.WIDGET = self.build_gui() self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add(self.gui.WIDGET) self.uistate.connect('nameformat-changed', self.update) self.uistate.connect('placeformat-changed', self.update) def build_gui(self): """ Build the GUI interface. """ self.top = Gtk.Box() vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.photo = Photo(self.uistate.screen_height() < 1000) self.photo.show() self.name = Gtk.Label(halign=Gtk.Align.START) self.name.override_font(Pango.FontDescription('sans bold 12')) vbox.pack_start(self.name, fill=True, expand=False, padding=7) self.grid = Gtk.Grid(orientation=Gtk.Orientation.VERTICAL) self.grid.set_column_spacing(10) vbox.pack_start(self.grid, fill=True, expand=False, padding=5) vbox.show_all() self.top.pack_start(self.photo, fill=True, expand=False, padding=5) self.top.pack_start(vbox, fill=True, expand=True, padding=10) return self.top def add_row(self, title, value): """ Add a row to the table. """ label = Gtk.Label(label=title + COLON, halign=Gtk.Align.END, valign=Gtk.Align.START) label.show() value = Gtk.Label(label=value, halign=Gtk.Align.START) value.show() self.grid.add(label) self.grid.attach_next_to(value, label, Gtk.PositionType.RIGHT, 1, 1) def clear_grid(self): """ Remove all the rows from the grid. """ list(map(self.grid.remove, self.grid.get_children())) def db_changed(self): self.connect(self.dbstate.db, 'person-update', self.update) def active_changed(self, handle): self.update() def update_has_data(self): """ Determine if a person has_data by checking: 1. has a birth, baptism, death, or burial event; OR 2. has a father; OR 3. has a mother """ active_handle = self.get_active('Person') has_data = False if active_handle: active_person = self.dbstate.db.get_person_from_handle( active_handle) if active_person: for event_type in [ EventType(EventType.BIRTH), EventType(EventType.BAPTISM), EventType(EventType.DEATH), EventType(EventType.BURIAL) ]: event = self.get_event(active_person, event_type) if event: has_data = True break if not has_data: family_handle = active_person.get_main_parents_family_handle( ) if family_handle: family = self.dbstate.db.get_family_from_handle( family_handle) handle = family.get_father_handle() if handle: if self.dbstate.db.get_person_from_handle(handle): has_data = True else: handle = family.get_mother_handle() if handle: if self.dbstate.db.get_person_from_handle( handle): has_data = True self.set_has_data(has_data) def main(self): # return false finishes self.display_empty() active_handle = self.get_active('Person') if active_handle: active_person = self.dbstate.db.get_person_from_handle( active_handle) self.top.hide() if active_person: self.display_person(active_person) self.top.show() self.update_has_data() def display_person(self, active_person): """ Display details of the active person. """ self.load_person_image(active_person) self.name.set_text(name_displayer.display(active_person)) self.clear_grid() self.display_alternate_names(active_person) self.display_parents(active_person) self.display_separator() self.display_type(active_person, EventType(EventType.BIRTH)) self.display_type(active_person, EventType(EventType.BAPTISM)) self.display_type(active_person, EventType(EventType.DEATH)) self.display_type(active_person, EventType(EventType.BURIAL)) self.display_separator() self.display_attribute(active_person, _('Occupation')) self.display_attribute(active_person, _('Title')) self.display_attribute(active_person, _('Religion')) def display_empty(self): """ Display empty details when no person is selected. """ self.photo.set_image(None) self.photo.set_uistate(None, None) self.name.set_text(_('No active person')) self.clear_grid() def display_separator(self): """ Display an empty row to separate groupd of entries. """ label = Gtk.Label(label='') label.override_font(Pango.FontDescription('sans 4')) label.show() self.grid.add(label) def display_alternate_names(self, active_person): """ Display other names of the person """ try: nlist = active_person.get_alternate_names() if len(nlist) > 0: for altname in nlist: name_type = str(altname.get_type()) text = name_displayer.display_name(altname) self.add_row(name_type, text) self.display_separator() except: pass def display_parents(self, active_person): """ Display the parents of the active person. """ family_handle = active_person.get_main_parents_family_handle() if family_handle: family = self.dbstate.db.get_family_from_handle(family_handle) handle = family.get_father_handle() if handle: father = self.dbstate.db.get_person_from_handle(handle) father_name = name_displayer.display(father) else: father_name = _('Unknown') handle = family.get_mother_handle() if handle: mother = self.dbstate.db.get_person_from_handle(handle) mother_name = name_displayer.display(mother) else: mother_name = _('Unknown') else: father_name = _('Unknown') mother_name = _('Unknown') self.add_row(_('Father'), father_name) self.add_row(_('Mother'), mother_name) def display_attribute(self, active_person, attr_key): """ Display an attribute row. """ values = [] for attr in active_person.get_attribute_list(): if attr.get_type() == attr_key: values.append(attr.get_value()) if values: # translators: needed for Arabic, ignore otherwise self.add_row(attr_key, _(', ').join(values)) def display_type(self, active_person, event_type): """ Display an event type row. """ event = self.get_event(active_person, event_type) if event: self.add_row(str(event_type), self.format_event(event)) def get_event(self, person, event_type): """ Return an event of the given type. """ for event_ref in person.get_event_ref_list(): if int(event_ref.get_role()) == EventRoleType.PRIMARY: event = self.dbstate.db.get_event_from_handle(event_ref.ref) if event.get_type() == event_type: return event return None def format_event(self, event): """ Format the event for display. """ date = get_date(event) handle = event.get_place_handle() if handle: place = place_displayer.display_event(self.dbstate.db, event) retval = _('%(date)s - %(place)s.') % { 'date': date, 'place': place } else: retval = _('%(date)s.') % dict(date=date) return retval def load_person_image(self, person): """ Load the primary image if it exists. """ media_list = person.get_media_list() if media_list: media_ref = media_list[0] object_handle = media_ref.get_reference_handle() obj = self.dbstate.db.get_media_from_handle(object_handle) full_path = media_path_full(self.dbstate.db, obj.get_path()) mime_type = obj.get_mime_type() if mime_type and mime_type.startswith("image"): self.photo.set_image(full_path, mime_type, media_ref.get_rectangle()) self.photo.set_uistate(self.uistate, object_handle) else: self.photo.set_image(None) self.photo.set_uistate(None, None) else: self.photo.set_image(None) self.photo.set_uistate(None, None)
class PersonDetails(Gramplet): """ Displays details for a person. """ def init(self): self.gui.WIDGET = self.build_gui() self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add(self.gui.WIDGET) self.uistate.connect('nameformat-changed', self.update) self.uistate.connect('placeformat-changed', self.update) def build_gui(self): """ Build the GUI interface. """ self.top = Gtk.Box() vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.photo = Photo(self.uistate.screen_height() < 1000) self.photo.show() self.name = Gtk.Label(halign=Gtk.Align.START) self.name.override_font(Pango.FontDescription('sans bold 12')) self.name.set_selectable(True) vbox.pack_start(self.name, fill=True, expand=False, padding=7) self.grid = Gtk.Grid(orientation=Gtk.Orientation.VERTICAL) self.grid.set_column_spacing(10) vbox.pack_start(self.grid, fill=True, expand=False, padding=5) vbox.show_all() self.top.pack_start(self.photo, fill=True, expand=False, padding=5) self.top.pack_start(vbox, fill=True, expand=True, padding=10) return self.top def add_row(self, title, value): """ Add a row to the table. """ label = Gtk.Label(label=title + COLON, halign=Gtk.Align.END, valign=Gtk.Align.START) label.set_selectable(True) label.show() value = Gtk.Label(label=value, halign=Gtk.Align.START) value.set_selectable(True) value.show() self.grid.add(label) self.grid.attach_next_to(value, label, Gtk.PositionType.RIGHT, 1, 1) def clear_grid(self): """ Remove all the rows from the grid. """ list(map(self.grid.remove, self.grid.get_children())) def db_changed(self): self.connect(self.dbstate.db, 'person-update', self.update) def active_changed(self, handle): self.update() def update_has_data(self): """ Determine if a person has_data by checking: 1. has a birth, baptism, death, or burial event; OR 2. has a father; OR 3. has a mother """ active_handle = self.get_active('Person') has_data = False if active_handle: active_person = self.dbstate.db.get_person_from_handle(active_handle) if active_person: for event_type in [EventType(EventType.BIRTH), EventType(EventType.BAPTISM), EventType(EventType.DEATH), EventType(EventType.BURIAL)]: event = self.get_event(active_person, event_type) if event: has_data = True break if not has_data: family_handle = active_person.get_main_parents_family_handle() if family_handle: family = self.dbstate.db.get_family_from_handle(family_handle) handle = family.get_father_handle() if handle: if self.dbstate.db.get_person_from_handle(handle): has_data = True else: handle = family.get_mother_handle() if handle: if self.dbstate.db.get_person_from_handle(handle): has_data = True self.set_has_data(has_data) def main(self): # return false finishes self.display_empty() active_handle = self.get_active('Person') if active_handle: active_person = self.dbstate.db.get_person_from_handle(active_handle) self.top.hide() if active_person: self.display_person(active_person) self.top.show() self.update_has_data() def display_person(self, active_person): """ Display details of the active person. """ self.load_person_image(active_person) self.name.set_text(name_displayer.display(active_person)) self.clear_grid() self.display_alternate_names(active_person) self.display_parents(active_person) self.display_separator() self.display_type(active_person, EventType(EventType.BIRTH)) self.display_type(active_person, EventType(EventType.BAPTISM)) self.display_type(active_person, EventType(EventType.DEATH)) self.display_type(active_person, EventType(EventType.BURIAL)) self.display_separator() self.display_attribute(active_person, _('Occupation')) self.display_attribute(active_person, _('Title')) self.display_attribute(active_person, _('Religion')) def display_empty(self): """ Display empty details when no person is selected. """ self.photo.set_image(None) self.photo.set_uistate(None, None) self.name.set_text(_('No active person')) self.clear_grid() def display_separator(self): """ Display an empty row to separate groupd of entries. """ label = Gtk.Label(label='') label.override_font(Pango.FontDescription('sans 4')) label.set_selectable(True) label.show() self.grid.add(label) def display_alternate_names(self, active_person): """ Display other names of the person """ try: nlist = active_person.get_alternate_names() if len(nlist) > 0: for altname in nlist: name_type = str(altname.get_type()) text = name_displayer.display_name(altname) self.add_row(name_type, text) self.display_separator() except: pass def display_parents(self, active_person): """ Display the parents of the active person. """ family_handle = active_person.get_main_parents_family_handle() if family_handle: family = self.dbstate.db.get_family_from_handle(family_handle) handle = family.get_father_handle() if handle: father = self.dbstate.db.get_person_from_handle(handle) father_name = name_displayer.display(father) else: father_name = _('Unknown') handle = family.get_mother_handle() if handle: mother = self.dbstate.db.get_person_from_handle(handle) mother_name = name_displayer.display(mother) else: mother_name = _('Unknown') else: father_name = _('Unknown') mother_name = _('Unknown') self.add_row(_('Father'), father_name) self.add_row(_('Mother'), mother_name) def display_attribute(self, active_person, attr_key): """ Display an attribute row. """ values = [] for attr in active_person.get_attribute_list(): if attr.get_type() == attr_key: values.append(attr.get_value()) if values: # translators: needed for Arabic, ignore otherwise self.add_row(attr_key, _(', ').join(values)) def display_type(self, active_person, event_type): """ Display an event type row. """ event = self.get_event(active_person, event_type) if event: self.add_row(str(event_type), self.format_event(event)) def get_event(self, person, event_type): """ Return an event of the given type. """ for event_ref in person.get_event_ref_list(): if int(event_ref.get_role()) == EventRoleType.PRIMARY: event = self.dbstate.db.get_event_from_handle(event_ref.ref) if event.get_type() == event_type: return event return None def format_event(self, event): """ Format the event for display. """ date = get_date(event) handle = event.get_place_handle() if handle: place = place_displayer.display_event(self.dbstate.db, event) retval = _('%(date)s - %(place)s.') % {'date' : date, 'place' : place} else: retval = _('%(date)s.') % dict(date=date) return retval def load_person_image(self, person): """ Load the primary image if it exists. """ media_list = person.get_media_list() if media_list: media_ref = media_list[0] object_handle = media_ref.get_reference_handle() obj = self.dbstate.db.get_media_from_handle(object_handle) full_path = media_path_full(self.dbstate.db, obj.get_path()) mime_type = obj.get_mime_type() if mime_type and mime_type.startswith("image"): self.photo.set_image(full_path, mime_type, media_ref.get_rectangle()) self.photo.set_uistate(self.uistate, object_handle) else: self.photo.set_image(None) self.photo.set_uistate(None, None) else: self.photo.set_image(None) self.photo.set_uistate(None, None)
class MediaBrowser(Gramplet): """ Displays an object tree and a media preview for a person. """ def init(self): self.gui.WIDGET = self.build_gui() self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add_with_viewport(self.gui.WIDGET) self.gui.WIDGET.show() def build_gui(self): """ Build the GUI interface. """ top = Gtk.HBox() self.photo = Photo() self.photo.show() view = Gtk.TreeView() titles = [(_("Object"), 1, 250)] self.model = ListModel(view, titles, list_mode="tree", select_func=self.row_selected) top.pack_start(view, True, True, 0) top.pack_start(self.photo, True, False, 5) top.show_all() return top def db_changed(self): self.dbstate.db.connect("person-update", self.update) self.update() def active_changed(self, handle): self.update() def update_has_data(self): active_handle = self.get_active("Person") active = self.dbstate.db.get_person_from_handle(active_handle) self.set_has_data(self.get_has_data(active)) def main(self): active_handle = self.get_active("Person") active = self.dbstate.db.get_person_from_handle(active_handle) self.model.clear() self.photo.set_image(None) if active: self.display_data(active) else: self.set_has_data(False) def display_data(self, person): """ Display the object tree for the active person. """ self.add_media(person) self.add_events(person) self.add_sources(person) self.set_has_data(self.model.count > 0) def add_events(self, obj, parent_node=None): """ Add event nodes to the model. """ for event_ref in obj.get_event_ref_list(): handle = event_ref.ref name, event = navigation_label(self.dbstate.db, "Event", handle) node = self.model.add([name], node=parent_node) self.add_sources(event, node) self.add_media(event, node) def add_sources(self, obj, parent_node=None): """ Add source nodes to the model. """ for citation_handle in obj.get_citation_list(): citation = self.dbstate.db.get_citation_from_handle(citation_handle) handle = citation.get_reference_handle() name, src = navigation_label(self.dbstate.db, "Source", handle) node = self.model.add([name], node=parent_node) self.add_media(src, node) def add_media(self, obj, parent_node=None): """ Add media object nodes to the model. """ for media_ref in obj.get_media_list(): handle = media_ref.ref name, media = navigation_label(self.dbstate.db, "Media", handle) full_path = media_path_full(self.dbstate.db, media.get_path()) rect = media_ref.get_rectangle() self.model.add([name], info=media_ref, node=parent_node) def row_selected(self, selection): """ Change the image when a row is selected. """ selected = self.model.get_selected_objects() if selected: if selected[0]: self.load_image(selected[0]) else: self.photo.set_image(None) else: self.photo.set_image(None) def load_image(self, media_ref): """ Display an image from the given media reference. """ media = self.dbstate.db.get_object_from_handle(media_ref.ref) full_path = media_path_full(self.dbstate.db, media.get_path()) mime_type = media.get_mime_type() rectangle = media_ref.get_rectangle() self.photo.set_image(full_path, mime_type, rectangle) def get_has_data(self, person): """ Return True if the gramplet has data, else return False. """ if person is None: return False elif person.get_event_ref_list(): return True elif person.get_citation_list(): return True elif person.get_media_list(): return True return False
class PersonDetails(Gramplet): """ Displays details for a person. """ def init(self): self.gui.WIDGET = self.build_gui() self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add_with_viewport(self.gui.WIDGET) self.uistate.connect('nameformat-changed', self.update) def build_gui(self): """ Build the GUI interface. """ self.top = Gtk.HBox() vbox = Gtk.VBox() self.photo = Photo(self.uistate.screen_height() < 1000) self.photo.show() self.name = Gtk.Label() self.name.set_alignment(0, 0) self.name.modify_font(Pango.FontDescription('sans bold 12')) vbox.pack_start(self.name, fill=True, expand=False, padding=7) self.table = Gtk.Table(n_rows=1, n_columns=2) vbox.pack_start(self.table, fill=True, expand=False, padding=5) vbox.show_all() self.top.pack_start(self.photo, fill=True, expand=False, padding=5) self.top.pack_start(vbox, fill=True, expand=True, padding=10) return self.top def add_row(self, title, value): """ Add a row to the table. """ label = Gtk.Label(label=title + ':') label.set_alignment(1, 0) label.show() value = Gtk.Label(label=value) value.set_alignment(0, 0) value.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL, xpadding=10) self.table.attach(value, 1, 2, rows, rows + 1) def clear_table(self): """ Remove all the rows from the table. """ list(map(self.table.remove, self.table.get_children())) self.table.resize(1, 2) def db_changed(self): self.dbstate.db.connect('person-update', self.update) def active_changed(self, handle): self.update() def update_has_data(self): active_handle = self.get_active('Person') if active_handle: active_person = self.dbstate.db.get_person_from_handle( active_handle) self.set_has_data(active_person is not None) else: self.set_has_data(False) def main(self): # return false finishes self.display_empty() active_handle = self.get_active('Person') if active_handle: active_person = self.dbstate.db.get_person_from_handle( active_handle) self.top.hide() if active_person: self.display_person(active_person) self.set_has_data(True) else: self.set_has_data(False) self.top.show() else: self.set_has_data(False) def display_person(self, active_person): """ Display details of the active person. """ self.load_person_image(active_person) self.name.set_text(name_displayer.display(active_person)) self.clear_table() self.display_alternate_names(active_person) self.display_parents(active_person) self.display_separator() self.display_type(active_person, EventType(EventType.BIRTH)) self.display_type(active_person, EventType(EventType.BAPTISM)) self.display_type(active_person, EventType(EventType.DEATH)) self.display_type(active_person, EventType(EventType.BURIAL)) self.display_separator() self.display_attribute(active_person, _('Occupation')) self.display_attribute(active_person, _('Title')) self.display_attribute(active_person, _('Religion')) def display_empty(self): """ Display empty details when no person is selected. """ self.photo.set_image(None) self.photo.set_uistate(None, None) self.name.set_text(_('No active person')) self.clear_table() def display_separator(self): """ Display an empty row to separate groupd of entries. """ label = Gtk.Label(label='') label.modify_font(Pango.FontDescription('sans 4')) label.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL) def display_alternate_names(self, active_person): """ Display other names of the person """ try: nlist = active_person.get_alternate_names() if len(nlist) > 0: for altname in nlist: name_type = str(altname.get_type()) text = name_displayer.display_name(altname) self.add_row(name_type, text) self.display_separator() except: pass def display_parents(self, active_person): """ Display the parents of the active person. """ family_handle = active_person.get_main_parents_family_handle() if family_handle: family = self.dbstate.db.get_family_from_handle(family_handle) handle = family.get_father_handle() if handle: father = self.dbstate.db.get_person_from_handle(handle) father_name = name_displayer.display(father) else: father_name = _('Unknown') handle = family.get_mother_handle() if handle: mother = self.dbstate.db.get_person_from_handle(handle) mother_name = name_displayer.display(mother) else: mother_name = _('Unknown') else: father_name = _('Unknown') mother_name = _('Unknown') self.add_row(_('Father'), father_name) self.add_row(_('Mother'), mother_name) def display_attribute(self, active_person, attr_key): """ Display an attribute row. """ values = [] for attr in active_person.get_attribute_list(): if attr.get_type() == attr_key: values.append(attr.get_value()) if values: self.add_row(attr_key, _(', ').join(values)) def display_type(self, active_person, event_type): """ Display an event type row. """ event = self.get_event(active_person, event_type) if event: self.add_row(str(event_type), self.format_event(event)) def get_event(self, person, event_type): """ Return an event of the given type. """ for event_ref in person.get_event_ref_list(): if int(event_ref.get_role()) == EventRoleType.PRIMARY: event = self.dbstate.db.get_event_from_handle(event_ref.ref) if event.get_type() == event_type: return event return None def format_event(self, event): """ Format the event for display. """ date = get_date(event) handle = event.get_place_handle() if handle: place = place_displayer.display_event(self.dbstate.db, event) retval = _('%(date)s - %(place)s.') % { 'date': date, 'place': place } else: retval = _('%(date)s.') % dict(date=date) return retval def load_person_image(self, person): """ Load the primary image if it exists. """ media_list = person.get_media_list() if media_list: media_ref = media_list[0] object_handle = media_ref.get_reference_handle() obj = self.dbstate.db.get_object_from_handle(object_handle) full_path = media_path_full(self.dbstate.db, obj.get_path()) mime_type = obj.get_mime_type() if mime_type and mime_type.startswith("image"): self.photo.set_image(full_path, mime_type, media_ref.get_rectangle()) self.photo.set_uistate(self.uistate, object_handle) else: self.photo.set_image(None) self.photo.set_uistate(None, None) else: self.photo.set_image(None) self.photo.set_uistate(None, None)