Beispiel #1
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Right-click on a row to edit the selected event'
             ' or the related place.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     top.set_hover_selection(True)
     titles = [
         (
             '',
             NOSORT,
             50,
         ),
         (_('Type'), 1, 100),
         (_('Description'), 2, 250),
         (_('Date'), 3, 160),
         ('', NOSORT, 50),
         (_('Place'), 4, 300),
         (_('Id'), 5, 80),
         (_('Latitude'), 6, 130),
         (_('Longitude'), 7, 130),
     ]
     self.model = ListModel(top, titles, right_click=self.menu_edit)
     return top
Beispiel #2
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to view a quick report showing '
             'all people with the selected attribute.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [(_('Key'), 1, 100), (_('Value'), 2, 100)]
     self.model = ListModel(top, titles, event_func=self.display_report)
     return top
Beispiel #3
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected event.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [('', NOSORT, 50,),
               (_('Date'), 1, 200),
               (_('Place'), 2, 200)]
     self.model = ListModel(top, titles, event_func=self.edit_event)
     return top
    def __init__(self, dbstate, user, options_class, name, callback=None):
        uistate = user.uistate
        self.label = _("Associations state tool")
        tool.Tool.__init__(self, dbstate, options_class, name)
        if uistate:
            ManagedWindow.__init__(self, uistate, [], self.__class__)

        stats_list = []
        relationship = get_relationship_calculator()
        rel = ""

        plist = dbstate.db.get_person_handles(sort_handles=True)

        for handle in plist:
            person = dbstate.db.get_person_from_handle(handle)
            name1 = name_displayer.display(person)
            refs = person.get_person_ref_list()
            if refs:
                for ref in person.serialize()[-1]:
                    (a, b, c, two, value) = ref
                    person2 = dbstate.db.get_person_from_handle(two)
                    name2 = name_displayer.display(person2)
                    rel = relationship.get_one_relationship(
                        dbstate.db, person2, person)
                    stats_list.append((name1, value, name2, rel))

        if uistate:
            titles = [
                (_('Name'), 0, 200),
                (_('Type of link'), 1, 200),
                (_('Of'), 2, 200),
                (_('Relationship Calculator'), 2, 200),
            ]

            treeview = Gtk.TreeView()
            model = ListModel(treeview, titles)
            for entry in stats_list:
                model.add(entry, entry[0])

            window = Gtk.Window()
            window.set_default_size(1000, 600)
            s = Gtk.ScrolledWindow()
            s.add(treeview)
            window.add(s)
            window.show_all()
            self.set_window(window, None, self.label)
            self.show()

        else:
            print('\t%s' * 4 % ('Name', 'Type of link', 'Of', 'RelCal'))
            print()
            for entry in stats_list:
                print('\t%s' * 4 % entry)
Beispiel #5
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     top = Gtk.TreeView()
     titles = [
         (_('Type'), 1, 100),
         (_('Name'), 2, 100),
         ('', 3, 1),  #hidden column for the handle
         ('', 4, 1)
     ]  #hidden column for non-localized object type
     self.model = ListModel(top, titles, event_func=self.cb_double_click)
     return top
    def __init__(self, dbstate, user, options_class, name, callback=None):
        uistate = user.uistate
        self.label = _("Gender Statistics tool")
        tool.Tool.__init__(self, dbstate, options_class, name)

        stats_list = []
        for name, value in dbstate.db.genderStats.stats.items():
            stats_list.append((name, ) + value + (
                _GENDER[dbstate.db.genderStats.guess_gender(name)], ))

        if uistate:
            ManagedWindow.__init__(self, uistate, [], self.__class__)

            titles = [(_('Name'), 0, 100), (_('Male'), 1, 70, INTEGER),
                      (_('Female'), 2, 70, INTEGER),
                      (_('Unknown'), 3, 90, INTEGER), (_('Guess'), 4, 70)]

            treeview = Gtk.TreeView()
            model = ListModel(treeview, titles)
            for entry in sorted(stats_list):
                model.add(entry, entry[0])

            s = Gtk.ScrolledWindow()
            s.add(treeview)
            dialog = Gtk.Dialog()
            dialog.add_button(_('_Close'), Gtk.ResponseType.CLOSE)
            dialog.connect('response', self._response)
            dialog.vbox.pack_start(s, expand=True, fill=True, padding=0)
            self.set_window(dialog, None, self.label)
            self.setup_configs('interface.dumpgenderstats', 420, 300)
            self.show()

        else:
            if len(_('Name')) < 16:
                print(
                    '%s%s%s' % (_('Name'), " " *
                                (16 - len(_('Name'))), _('Male')),
                    '\t%s' * 3 % (_('Female'), _('Unknown'), _('Guess')))
            else:
                print(
                    _('Name'), '\t%s' * 4 %
                    (_('Male'), _('Female'), _('Unknown'), _('Guess')))
            print()
            for entry in sorted(stats_list):
                if len(entry[0]) < 16:
                    print(
                        '%s%s%s' % (entry[0], " " *
                                    (16 - len(entry[0])), entry[1]),
                        '\t%s' * 3 % (entry[2:]))
                else:
                    print(entry[0], '\t%s' * 4 % (entry[1:]))
Beispiel #7
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected place.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [('', 0, 50), (_('Name'), 1, 300), (_('Type'), 2, 150),
               (_('Date'), 5, 250), (_('ID'), 4, 100), ('', NOSORT, 50)]
     self.model = ListModel(top,
                            titles,
                            list_mode="tree",
                            event_func=self.edit_place)
     return top
Beispiel #8
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected source/citation.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [('', NOSORT, 50,),
               (_('Source/Citation'), 1, 350),
               (_('Author'), 2, 200),
               (_('Publisher'), 3, 150)]
     self.model = ListModel(top, titles, list_mode="tree",
                            event_func=self.invoke_editor)
     return top
Beispiel #9
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected participant.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [('', NOSORT, 50,),
               (_('Name'), 1, 250),
               (_('Role'), 2, 80),
               (_('Birth Date'), 3, 100),
               ('', 3, 100),
               (_('Spouses'), 4, 200)]
     self.model = ListModel(top, titles, event_func=self.edit_person)
     return top
Beispiel #10
0
 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
Beispiel #11
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected child.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [(
         '',
         NOSORT,
         50,
     ), (_('Child'), 1, 250), (_('Birth Date'), 3, 100), ('', 3, 100),
               (_('Death Date'), 5, 100), ('', 5, 100)]
     self.model = ListModel(top, titles, event_func=self.edit_person)
     return top
Beispiel #12
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     self.view = Gtk.TreeView()
     self.view.set_tooltip_column(3)
     titles = [(_('Name'), 0, 230),
               (_('Birth'), 2, 100),
               ('', NOSORT, 1),
               ('', NOSORT, 1), # tooltip
               ('', NOSORT, 100)] # handle
     self.model = ListModel(self.view, titles, list_mode="tree", 
                            event_func=self.cb_double_click,
                            right_click=self.cb_right_click)
     return self.view
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the object containing the '
             'selected attribute.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [(_('Date'), 1, 100), ('', 1, 100), (_('Key'), 2, 100),
               (_('Value'), 3, 100), (
                   '',
                   NOSORT,
                   50,
               )]
     self.model = ListModel(top, titles, event_func=self._display_editor)
     return top
Beispiel #14
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected event.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [(
         '',
         NOSORT,
         50,
     ), (_('Type'), 1, 100), (_('Date'), 3, 100), ('', 3, 100),
               (_('Age'), 4, 35), (_('Where Born'), 5, 160),
               (_('Condition'), 6, 75), (_('Occupation'), 7, 160),
               (_('Residence'), 8, 160)]
     self.model = ListModel(top, titles, event_func=self.edit_event)
     return top
Beispiel #15
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     tip = _('Double-click on a row to edit the selected event.')
     self.set_tooltip(tip)
     top = Gtk.TreeView()
     titles = [(
         '',
         NOSORT,
         50,
     ), (_('Type'), 1, 100), (_('Description'), 2, 150),
               (_('Date'), 3, 100), ('', NOSORT, 50), (_('Age'), 4, 100),
               ('', NOSORT, 50), (_('Place'), 5, 400),
               (_('Main Participants'), 6, 200), (_('Role'), 7, 100)]
     self.model = ListModel(top, titles, event_func=self.edit_event)
     return top
Beispiel #16
0
 def __init__(self, uistate, data, track):
     super().__init__(uistate, track, self, modal=True)
     self.window = Gtk.Dialog()
     self.set_window(self.window, None, _("Database Information"))
     self.setup_configs('interface.information', 600, 400)
     self.ok = self.window.add_button(_('_OK'), Gtk.ResponseType.OK)
     self.ok.connect('clicked', self.on_ok_clicked)
     s = Gtk.ScrolledWindow()
     titles = [(_('Setting'), 0, 150), (_('Value'), 1, 400)]
     treeview = Gtk.TreeView()
     model = ListModel(treeview, titles)
     for key, value in sorted(data.items()):
         model.add((
             key,
             str(value),
         ), key)
     s.add(treeview)
     self.window.vbox.pack_start(s, True, True, 0)
     self.show()
Beispiel #17
0
    def __init__(self, dbstate, uistate, track, the_list, the_map, callback):
        ManagedWindow.__init__(self,uistate,track,self.__class__)

        self.dellist = set()
        self.list = the_list
        self.map = the_map
        self.length = len(self.list)
        self.update = callback
        self.db = dbstate.db
        self.dbstate = dbstate
        self.uistate = uistate

        top = Glade(toplevel="mergelist")
        window = top.toplevel
        self.set_window(window, top.get_object('title'),
                        _('Potential Merges'))
        self.setup_configs('interface.duplicatepeopletoolmatches', 500, 350)

        self.mlist = top.get_object("mlist")
        top.connect_signals({
            "destroy_passed_object" : self.close,
            "on_do_merge_clicked"   : self.on_do_merge_clicked,
            "on_help_show_clicked"  : self.on_help_clicked,
            "on_delete_show_event"  : self.close,
            "on_merge_ok_clicked"   : self.__dummy,
            "on_help_clicked"       : self.__dummy,
            "on_delete_merge_event" : self.__dummy,
            "on_delete_event"       : self.__dummy,
            })
        self.db.connect("person-delete", self.person_delete)

        mtitles = [
                (_('Rating'),3,75),
                (_('First Person'),1,200),
                (_('Second Person'),2,200),
                ('',-1,0)
                ]
        self.list = ListModel(self.mlist,mtitles,
                              event_func=self.on_do_merge_clicked)

        self.redraw()
        self.show()
Beispiel #18
0
 def __init__(self, uistate, data, parent):
     super().__init__(uistate, [], self)
     self.window = Gtk.Dialog('Gramp')
     self.set_window(self.window, None, _("Database Information"))
     self.window.set_modal(True)
     self.ok = self.window.add_button(_('_OK'), Gtk.ResponseType.OK)
     self.ok.connect('clicked', self.on_ok_clicked)
     self.window.set_position(Gtk.WindowPosition.CENTER)
     self.window.set_default_size(600, 400)
     s = Gtk.ScrolledWindow()
     titles = [(_('Setting'), 0, 150), (_('Value'), 1, 400)]
     treeview = Gtk.TreeView()
     model = ListModel(treeview, titles)
     for key, value in sorted(data.items()):
         model.add((
             key,
             str(value),
         ), key)
     s.add(treeview)
     self.window.vbox.pack_start(s, True, True, 0)
     self.show()
Beispiel #19
0
 def build_gui(self):
     """
     Build the GUI interface.
     """
     self.top = Gtk.TreeView()
     titles = [
         (_('Type'), 1, 100),
         (_('Name'), 2, 100),
         (_('Date'), 4, 200),
         ('sd', 4, 120),  # sorted date column
         ('', 5, 1),  #hidden column for the handle
         ('', 6, 1),  #hidden column for non-localized object type
     ]
     self.model = ListModel(self.top,
                            titles,
                            event_func=self.cb_double_click)
     self.date_column = self.top.get_column(2)
     self.sdate = self.top.get_column(3)
     self.top.get_column(1).set_expand(True)  # The name use the max
     # possible size
     return self.top
Beispiel #20
0
    def __init__(self, dbstate, user, options_class, name, callback=None):
        uistate = user.uistate
        self.label = _("Gender Statistics tool")
        tool.Tool.__init__(self, dbstate, options_class, name)
        if uistate:
            ManagedWindow.__init__(self, uistate, [], self.__class__)

        stats_list = []
        for name, value in dbstate.db.genderStats.stats.items():
            stats_list.append((name, ) + value + (
                _GENDER[dbstate.db.genderStats.guess_gender(name)], ))

        if uistate:
            titles = [(_('Name'), 0, 100), (_('Male'), 1, 70, INTEGER),
                      (_('Female'), 2, 70, INTEGER),
                      (_('Unknown'), 3, 70, INTEGER), (_('Guess'), 4, 70)]

            treeview = Gtk.TreeView()
            model = ListModel(treeview, titles)
            for entry in stats_list:
                model.add(entry, entry[0])

            window = Gtk.Window()
            window.set_default_size(400, 300)
            s = Gtk.ScrolledWindow()
            s.add(treeview)
            window.add(s)
            window.show_all()
            self.set_window(window, None, self.label)
            self.show()

        else:
            print('\t%s' * 5 % ('Name', 'Male', 'Female', 'Unknown', 'Guess'))
            print()
            for entry in stats_list:
                print('\t%s' * 5 % entry)
Beispiel #21
0
    def __init__(self, dbstate, user, options_class, name, callback=None):
        uistate = user.uistate
        self.label = _("Relation and distances with root")
        self.dbstate = dbstate
        FilterClass = GenericFilterFactory('Person')
        self.path = '.'
        filter = FilterClass()

        tool.Tool.__init__(self, dbstate, options_class, name)
        if uistate:

            window = Gtk.Window()
            window.set_default_size(880, 600)

            box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
            window.add(box)

            # dirty work-around for Gtk.HeaderBar() and FolderChooser

            chooser = Gtk.FileChooserDialog(
                _("Folder Chooser"),
                parent=uistate.window,
                action=Gtk.FileChooserAction.SELECT_FOLDER,
                buttons=(_('_Cancel'), Gtk.ResponseType.CANCEL, _('_Select'),
                         Gtk.ResponseType.OK))
            chooser.set_tooltip_text(_("Please, select a folder"))
            status = chooser.run()
            if status == Gtk.ResponseType.OK:
                # work-around 'IsADirectoryError' with self()
                # TypeError: invalid file: gi.FunctionInfo()
                self.path = chooser.get_current_folder()
            chooser.destroy()

            ManagedWindow.__init__(self, uistate, [], self.__class__)
            self.titles = [
                (_('Rel_id'), 0, 40, INTEGER),  # would be INTEGER
                (_('Relation'), 1, 300, str),
                (_('Name'), 2, 200, str),
                (_('up'), 3, 35, INTEGER),
                (_('down'), 4, 35, INTEGER),
                (_('Common MRA'), 5, 40, INTEGER),
                (_('Rank'), 6, 40, INTEGER),
                (_('Period'), 7, 40, str),
            ]

            treeview = Gtk.TreeView()
            model = ListModel(treeview, self.titles)
            s = Gtk.ScrolledWindow()
            s.add(treeview)
            box.pack_start(s, True, True, 0)

            button = Gtk.Button(label=_("Save"))
            button.connect("clicked", self.button_clicked)
            box.pack_end(button, False, True, 0)

        self.stats_list = []

        # behavior can be different according to CPU and generation depth

        max_level = config.get('behavior.generation-depth')
        # compact and interlinked tree
        # single core 2.80 Ghz needs +/- 0.1 second per person
        if max_level >= 15:
            var = max_level * 0.01
        elif 10 <= max_level < 15:
            var = max_level * 0.02
        else:
            var = max_level * 0.025

        plist = self.dbstate.db.iter_person_handles()
        length = self.dbstate.db.get_number_of_people()
        default_person = self.dbstate.db.get_default_person()
        if uistate:
            self.progress = ProgressMeter(self.label,
                                          can_cancel=True,
                                          parent=window)
        else:
            self.progress = ProgressMeter(self.label)

        if default_person:  # rather designed for run via GUI...
            root_id = default_person.get_gramps_id()
            ancestors = rules.person.IsAncestorOf([str(root_id), True])
            descendants = rules.person.IsDescendantOf([str(root_id), True])
            related = rules.person.IsRelatedWith([str(root_id)])

            # filtering people can be useful on some large data set
            # counter on filtering pass was not efficient
            # Not the proper solution, but a lazy one providing expected message

            filter.add_rule(related)
            self.progress.set_pass(_('Please wait, filtering...'))
            filtered_list = filter.apply(self.dbstate.db, plist)

            relationship = get_relationship_calculator()
        else:  # TODO: provide selection widget for CLI and GUI
            WarningDialog(_("No default_person"))
            return

        count = 0
        filtered_people = len(filtered_list)
        self.progress.set_pass(_('Generating relation map...'),
                               filtered_people)
        if self.progress.get_cancelled():
            self.progress.close()
            return
        step_one = time.clock()  # init for counters
        for handle in filtered_list:
            nb = len(self.stats_list)
            count += 1
            self.progress.step()
            step_two = time.clock()
            start = 99
            if count > start:  # provide a basic interface for counters
                need = (step_two - step_one) / count
                wait = need * filtered_people
                remain = int(wait) - int(step_two - step_one)
                # sorry, lazy
                header = _("%d/%d \n %d/%d seconds \n %d/%d \n%f|\t%f" %
                           (count, filtered_people, remain, int(wait), nb,
                            length, float(need), float(var)))
                self.progress.set_header(header)
                if self.progress.get_cancelled():
                    self.progress.close()
                    return
            person = dbstate.db.get_person_from_handle(handle)

            timeout_one = time.clock()  # for delta and timeout estimations
            dist = relationship.get_relationship_distance_new(dbstate.db,
                                                              default_person,
                                                              person,
                                                              only_birth=True)
            timeout_two = time.clock()

            rank = dist[0][0]
            if rank == -1 or rank > max_level:  # not related and ignored people
                continue

            limit = timeout_two - timeout_one
            expect = (limit - var) / max_level
            if limit > var:
                n = name_displayer.display(person)
                _LOG.debug("Sorry! '{0}' needs {1} second, \
                            variation = '{2}'".format(n, limit, expect))
                continue
            else:
                _LOG.debug("variation = '{}'".format(
                    limit))  # delta, see above max_level 'wall' section
                rel = relationship.get_one_relationship(
                    dbstate.db, default_person, person)
                rel_a = dist[0][2]
                Ga = len(rel_a)
                rel_b = dist[0][4]
                Gb = len(rel_b)
                mra = 1

                # m: mother; f: father
                if Ga > 0:
                    for letter in rel_a:
                        if letter == 'm':
                            mra = mra * 2 + 1
                        if letter == 'f':
                            mra = mra * 2
                    # design: mra gender will be often female (m: mother)
                    if rel_a[-1] == "f" and Gb != 0:  # male gender, look at spouse
                        mra = mra + 1

                name = name_displayer.display(person)
                # pseudo privacy; sample for DNA stuff and mapping
                import hashlib
                no_name = hashlib.sha384(name.encode() +
                                         handle.encode()).hexdigest()
                _LOG.info(no_name)  # own internal password via handle

                kekule = number.get_number(Ga, Gb, rel_a, rel_b)

                # workaround - possible unique ID and common numbers
                uuid = str(uuid4())
                _LOG.info("Random UUID: {}".format(uuid))

                if kekule == "u":  # TODO: cousin(e)s need a key
                    kekule = 0
                if kekule == "nb":  # non-birth
                    kekule = -1
                try:
                    test = int(kekule)
                except:  # 1: related to mother; 0.x : no more girls lineage
                    kekule = 1

                period = get_timeperiod(self.dbstate.db, handle)

                # sometimes 'iterator' (generator) is more faster
                #handle_list = map(handle, filtered_list)
                iterator = (handle for handle in filtered_list)

                # experimentations; not used yet
                new_list = [int(kekule), int(Ga), int(Gb), int(mra), int(rank)]
                line = (iterator, array('b', new_list))

                self.stats_list.append(
                    (int(kekule), rel, name, int(Ga), int(Gb), int(mra),
                     int(rank), str(period)))
        self.progress.close()

        from itertools import groupby
        for key, items in groupby(self.stats_list, lambda x: x[0]):
            for subitem in items:
                _LOG.info(subitem)

        _LOG.debug("total: {}".format(nb))
        for entry in self.stats_list:
            if uistate:
                model.add(entry, entry[0])
            else:
                print(entry)
        if uistate:
            window.show()
            self.set_window(window, None, self.label)
            self.show()
Beispiel #22
0
 def __init__(self):
     Gtk.TreeView.__init__(self)
     self.sections = {}
     titles = [(_('Key'), 1, 235),
               (_('Value'), 2, 325)]
     self.model = ListModel(self, titles, list_mode="tree")