Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
    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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
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)
Ejemplo n.º 9
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)
Ejemplo n.º 10
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)
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
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)
Ejemplo n.º 13
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)
Ejemplo n.º 14
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)
Ejemplo n.º 15
0
 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)
Ejemplo n.º 16
0
    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())
Ejemplo n.º 17
0
 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)})
Ejemplo n.º 18
0
 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)
Ejemplo n.º 20
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
Ejemplo n.º 21
0
 def make_label(self, handle):
     return navigation_label(self.dbstate.db, 'Note', handle)
Ejemplo n.º 22
0
 def make_label(self, handle):
     return navigation_label(self.dbstate.db, 'Repository', handle)