def modify_statusbar(self, dbstate, active=None): view = self.viewmanager.active_page if not isinstance(view, NavigationView) or dbstate is None: return nav_type = view.navigation_type() active_handle = self.get_active(nav_type, view.navigation_group()) self.status.pop(self.status_id) if active_handle and dbstate.is_open(): name, obj = navigation_label(dbstate.db, nav_type, active_handle) # Append relationship to default person if funtionality is enabled. if nav_type == 'Person' and config.get('interface.statusbar') > 1: if active_handle != dbstate.db.get_default_handle(): msg = self.display_relationship(dbstate, active_handle) if msg: name = '%s (%s)' % (name, msg.strip()) else: name = _('No active object') if not name: name = self.NAV2MES[nav_type] self.status.push(self.status_id, name) process_pending_events()
def update_mru_menu(self, items, update_menu=True): """ Builds the UI and action group for the MRU list. """ menuitem = ''' <item> <attribute name="action">win.%s%02d</attribute> <attribute name="label" translatable="yes">%s</attribute> </item> ''' menus = '' self.mru_disable() nav_type = self.navigation_type() hobj = self.get_history() menu_len = min(len(items) - 1, MRU_SIZE) for index in range(0, menu_len): name, obj = navigation_label(self.dbstate.db, nav_type, items[index]) menus += menuitem % (nav_type, index, html.escape(name)) self.mru_ui = [MRU_TOP + menus + MRU_BTM] mitems = items[-MRU_SIZE - 1:-1] # Ignore current handle mitems.reverse() data = [] for index, handle in enumerate(mitems): data.append(('%s%02d'%(nav_type, index), make_callback(hobj.push, handle), "%s%d" % (mod_key(), index))) self.mru_action = ActionGroup(name=self.title + '/MRU') self.mru_action.add_actions(data) self.mru_enable(update_menu)
def update_mru_menu(self, items, update_menu=True): """ Builds the UI and action group for the MRU list. """ menuitem = ''' <item> <attribute name="action">win.%s%02d</attribute> <attribute name="label" translatable="yes">%s</attribute> </item> ''' menus = '' self.mru_disable() nav_type = self.navigation_type() hobj = self.get_history() menu_len = min(len(items) - 1, MRU_SIZE) for index in range(0, menu_len): name, obj = navigation_label(self.dbstate.db, nav_type, items[index]) menus += menuitem % (nav_type, index, html.escape(name)) self.mru_ui = [MRU_TOP + menus + MRU_BTM] mitems = items[-MRU_SIZE - 1:-1] # Ignore current handle mitems.reverse() data = [] for index, handle in enumerate(mitems): data.append(('%s%02d' % (nav_type, index), make_callback(hobj.push, handle), "%s%d" % (mod_key(), index))) self.mru_action = ActionGroup(name=self.title + '/MRU') self.mru_action.add_actions(data) self.mru_enable(update_menu)
def update_mru_menu(self, items): """ Builds the UI and action group for the MRU list. """ self.mru_disable() nav_type = self.navigation_type() hobj = self.get_history() menu_len = min(len(items) - 1, MRU_SIZE) entry = '<menuitem action="%s%02d"/>' data = [entry % (nav_type, index) for index in range(0, menu_len)] self.mru_ui = "".join(MRU_TOP) + "".join(data) + "".join(MRU_BTM) mitems = items[-MRU_SIZE - 1:-1] # Ignore current handle mitems.reverse() data = [] for index, handle in enumerate(mitems): name, obj = navigation_label(self.dbstate.db, nav_type, handle) data.append(('%s%02d'%(nav_type, index), None, name, "%s%d" % (mod_key(), index), None, make_callback(hobj.push, handle))) self.mru_action = ActionGroup(name=self.title + '/MRU') self.mru_action.add_actions(data) self.mru_enable()
def modify_statusbar(self, dbstate, active=None): view = self.viewmanager.active_page if not isinstance(view, NavigationView) or dbstate is None: return nav_type = view.navigation_type() active_handle = self.get_active(nav_type, view.navigation_group()) self.status.pop(self.status_id) if active_handle: name, obj = navigation_label(dbstate.db, nav_type, active_handle) else: name = _('No active object') # Append relationship to default person if funtionality is enabled. if nav_type == 'Person' and active_handle \ and config.get('interface.statusbar') > 1: if active_handle != dbstate.db.get_default_handle(): msg = self.display_relationship(dbstate, active_handle) if msg: name = '%s (%s)' % (name, msg.strip()) if not name: name = self.NAV2MES[nav_type] self.status.push(self.status_id, name) process_pending_events()
def update_mru_menu(self, items, update_menu=True): """ Builds the UI and action group for the MRU list. """ menuitem = ''' <item> <attribute name="action">win.%s%02d</attribute> <attribute name="label">%s</attribute> </item> ''' menus = '' self.mru_disable() nav_type = self.navigation_type() hobj = self.get_history() menu_len = min(len(items) - 1, MRU_SIZE) data = [] for index in range(menu_len - 1, -1, -1): name, _obj = navigation_label(self.dbstate.db, items[index][0], items[index][1]) menus += menuitem % (nav_type, index, html.escape(name)) data.append(('%s%02d' % (nav_type, index), make_callback(hobj.push, items[index]), "%s%d" % (mod_key(), menu_len - 1 - index))) self.mru_ui = [MRU_TOP + menus + MRU_BTM] self.mru_action = ActionGroup(name=self.title + '/MRU') self.mru_action.add_actions(data) self.mru_enable(update_menu)
def display_backlinks(self, active_handle): """ Display the back references for an object. """ self.evts = False sdcolumn = None for classname, handle in \ self.dbstate.db.find_backlink_handles(active_handle): name = navigation_label(self.dbstate.db, classname, handle)[0] sdcolumn = self.top.get_column(3) dcolumn = self.top.get_column(2) if classname == "Event": obj = self.dbstate.db.get_event_from_handle(handle) o_date = obj.get_date_object() date = displayer.display(o_date) sdate = "%09d" % o_date.get_sort_value() sdcolumn.set_sort_column_id(3) dcolumn.set_sort_column_id(3) self.evts = True else: sdcolumn.set_sort_column_id(1) date = sdate = "" self.model.add( (_(classname), name, date, sdate, handle, classname)) if self.evts: self.date_column.set_visible(True) sdcolumn.set_visible(False) else: self.date_column.set_visible(False) if sdcolumn: sdcolumn.set_visible(False) self.set_has_data(self.model.count > 0)
def display_backlinks(self, active_handle): """ Display the back references for an object. """ for classname, handle in \ self.dbstate.db.find_backlink_handles(active_handle): name = navigation_label(self.dbstate.db, classname, handle)[0] self.model.add((_(classname), name, handle, classname)) self.set_has_data(self.model.count > 0)
def display_backlinks(self, active_handle): """ Display the back references for an object. """ for classname, handle in \ self.dbstate.db.find_backlink_handles(active_handle): name = navigation_label(self.dbstate.db, classname, handle)[0] self.model.add((_(classname), name, handle, classname)) self.set_has_data(self.model.count > 0)
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 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_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_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_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 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 selection_changed(self, selection): """ Called when selection changed within the treeview """ self.type_name = None model, iter_ = selection.get_selected() if not iter_: return # save row information self.iter_ = iter_ value = model.get_value(iter_, 0) self.name = value self.r_indx = model.get_value(iter_, 2) # set button sensitivity if valid row self.del_btn.set_sensitive(self.r_indx != 99) self.combo.set_sensitive(False) # clear right pane self.model_r.clear() # clear the rename combo self.combo.get_child().set_text('') self.ren_btn.set_sensitive(False) if self.r_indx == 99: # if not a custom type row, done return # get list of refs refs = self.types_dict[self.t_table[self.r_indx][2]][value] for (obj_type, hndl) in refs: # some ref tables (Attributes) have elements from several primary # objects. We only want the ones for the current type. if (self.t_table[self.r_indx][3] and obj_type != self.t_table[self.r_indx][3]): continue # get a display name for ref name = navigation_label(self.db, obj_type, hndl)[0] # fill in row of model, only first two columns are visible self.model_r.append((_(obj_type), name, hndl, obj_type)) if not refs: # if there are no refs, we are done return # allow rename, combo selector is enabled self.combo.set_sensitive(True) # make an GrampsType object to allow selection self.obj = self.t_table[self.r_indx][2](value) # Create combo selector new every time self.cbox.remove(self.combo) self.combo = Gtk.ComboBox.new_with_entry() self.combo.get_child().set_width_chars(40) self.combo.show() self.cbox.add(self.combo) self.type_name = MonitoredDataType(self.combo, self.set_obj, self.get_obj, self.db.readonly, self.get_cust_types())
def display_note(self): """ Display the current note. """ note_handle = self.note_list[self.current] note = self.dbstate.db.get_note_from_handle(note_handle) obj = [x for x in self.dbstate.db.find_backlink_handles(note_handle)] if obj: name, obj = navigation_label(self.dbstate.db, obj[0][0], obj[0][1]) self.title.set_text(name) else: self.title.set_text(_("Unattached")) self.texteditor.set_text(note.get_styledtext()) self.page.set_text(_('%(current)d of %(total)d') % {'current': self.current + 1, 'total': len(self.note_list)})
def display_note(self): """ Display the current note. """ note_handle = self.note_list[self.current] note = self.dbstate.db.get_note_from_handle(note_handle) obj = [x for x in self.dbstate.db.find_backlink_handles(note_handle)] if obj: name, obj = navigation_label(self.dbstate.db, obj[0][0], obj[0][1]) self.title.set_text(name) else: self.title.set_text(_("Unattached")) self.texteditor.set_text(note.get_styledtext()) self.page.set_text(_('%(current)d of %(total)d') % {'current': self.current + 1, 'total': len(self.note_list)})
def display_backlinks(self, active_handle): """ Display the back references for an object. """ for classname, handle in \ self.dbstate.db.find_backlink_handles(active_handle): if classname == 'Event': name = navigation_label(self.dbstate.db, classname, handle)[0] print(classname, name) plevent = self.dbstate.db.get_event_from_handle(handle) #pldate = self.get_date(plevent, active_handle) pldate = get_date(plevent) pldate_sort = '%012d' % plevent.get_date_object( ).get_sort_value() self.model.add((_(classname), name, handle, classname, pldate, pldate_sort)) self.set_has_data(self.model.count > 0)
def modify_statusbar(self, dbstate, active=None): """ Update the status bar with current object info. Since this is called via GLib.timeout_add it can happen at any time Gtk is idle or processing pending events. Even in the midst of a multiple delete, before the GUI has been updated for missing objects. So it is susceptible to HandleErrors for missing data, thus the 'try'. """ try: view = self.viewmanager.active_page if not isinstance(view, NavigationView) or dbstate is None: return nav_type = view.navigation_type() active_handle = self.get_active(nav_type, view.navigation_group()) self.status.pop(self.status_id) if active_handle and dbstate.is_open(): name, _obj = navigation_label(dbstate.db, nav_type, active_handle) # Append relationship to default person if enabled. if (nav_type == 'Person' and config.get('interface.statusbar') > 1): if active_handle != dbstate.db.get_default_handle(): msg = self.display_relationship(dbstate, active_handle) if msg: name = '%s (%s)' % (name, msg.strip()) else: name = _('No active object') if not name: name = self.NAV2MES[nav_type] self.status.push(self.status_id, name) process_pending_events() except HandleError: return
def make_label(self, handle): return navigation_label(self.dbstate.db, 'Note', handle)
def make_label(self, handle): return navigation_label(self.dbstate.db, 'Repository', handle)