From 00a43137203b442daefec609e5f095397dbbed9a Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Tue, 31 Oct 2006 17:36:38 +0000 Subject: [PATCH] 2006-10-31 Don Allingham * src/Reorder.py: Allow for reordering of relationships * src/DataViews/_RelationView.py: add reorder support * src/glade/gramps.glade: reorder dialog * src/Makefile.am: install Reorder.py svn: r7525 --- gramps2/ChangeLog | 6 + gramps2/src/DataViews/_RelationView.py | 39 +++ gramps2/src/Makefile.am | 1 + gramps2/src/Reorder.py | 167 ++++++++++++ gramps2/src/glade/gramps.glade | 346 +++++++++++++++++++++++++ 5 files changed, 559 insertions(+) create mode 100644 gramps2/src/Reorder.py diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 7d2aa8667..fb71bcd4f 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,9 @@ +2006-10-31 Don Allingham + * src/Reorder.py: Allow for reordering of relationships + * src/DataViews/_RelationView.py: add reorder support + * src/glade/gramps.glade: reorder dialog + * src/Makefile.am: install Reorder.py + 2006-10-31 Alex Roitman * src/GrampsDb/_WriteGedcom.py (write_families): Properly write custom attr type. diff --git a/gramps2/src/DataViews/_RelationView.py b/gramps2/src/DataViews/_RelationView.py index de5957579..f4961fc79 100644 --- a/gramps2/src/DataViews/_RelationView.py +++ b/gramps2/src/DataViews/_RelationView.py @@ -1,3 +1,24 @@ +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2001-2006 Donald N. Allingham +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id$ + #------------------------------------------------------------------------- # # Python modules @@ -206,6 +227,7 @@ class RelationshipView(PageView.PersonNavView): + @@ -225,6 +247,9 @@ class RelationshipView(PageView.PersonNavView): + + + @@ -237,6 +262,10 @@ class RelationshipView(PageView.PersonNavView): def define_actions(self): PageView.PersonNavView.define_actions(self) + self.add_action('ChangeOrder', gtk.STOCK_SORT_ASCENDING, _("_Reorder"), + tip=_("Reorder the relationships"), + callback=self.reorder) + self.add_toggle_action('Details', None, _('Show details'), None, None, self.details_toggle, self.show_details) @@ -878,3 +907,13 @@ class RelationshipView(PageView.PersonNavView): def change_to(self, obj, handle): self.dbstate.change_active_handle(handle) + + def reorder(self,obj): + if self.dbstate.active: + try: + import Reorder + Reorder.Reorder(self.dbstate, self.uistate, [], + self.dbstate.active.handle) + except Errors.WindowActiveError: + pass + diff --git a/gramps2/src/Makefile.am b/gramps2/src/Makefile.am index 0bd31cc82..52a35b866 100644 --- a/gramps2/src/Makefile.am +++ b/gramps2/src/Makefile.am @@ -61,6 +61,7 @@ gdir_PYTHON = \ QuestionDialog.py\ RecentFiles.py\ Relationship.py\ + Reorder.py\ ScratchPad.py\ Sort.py\ soundex.py\ diff --git a/gramps2/src/Reorder.py b/gramps2/src/Reorder.py new file mode 100644 index 000000000..f63e5d768 --- /dev/null +++ b/gramps2/src/Reorder.py @@ -0,0 +1,167 @@ +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2001-2006 Donald N. Allingham +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id: _SourceView.py 7138 2006-08-06 06:26:10Z rshura $ + + +import const +import gtk + +import NameDisplay +import ListModel +import ManagedWindow + +_parent_titles = [(_('Father'),-1,200),(_('Mother'),-1,200),('',-1,0)] +_family_titles = [(_('Spouse'),-1,200),(_('Relationship'),-1,200),('',-1,0)] + + +class Reorder(ManagedWindow.ManagedWindow): + + def __init__(self, state, uistate, track, handle): + xml = gtk.glade.XML(const.gladeFile, "reorder", "gramps") + top = xml.get_widget('reorder') + + self.dbstate = state + ManagedWindow.ManagedWindow.__init__(self, uistate, track, self) + + self.person = self.dbstate.db.get_person_from_handle(handle) + self.set_window(top, None, _("Reorder Relationships")) + + self.ptree = xml.get_widget('ptree') + self.pmodel = ListModel.ListModel(self.ptree,_parent_titles) + + self.ftree = xml.get_widget('ftree') + self.fmodel = ListModel.ListModel(self.ftree,_family_titles) + + xml.get_widget('ok').connect('clicked', self.ok_clicked) + xml.get_widget('cancel').connect('clicked', self.cancel_clicked) + xml.get_widget('fup').connect('clicked', self.fup_clicked) + xml.get_widget('fdown').connect('clicked', self.fdown_clicked) + xml.get_widget('pup').connect('clicked', self.pup_clicked) + xml.get_widget('pdown').connect('clicked', self.pdown_clicked) + + self.parent_list = self.person.get_parent_family_handle_list() + self.family_list = self.person.get_family_handle_list() + self.fill_data() + + self.show() + + def fill_data(self): + self.fill_parents() + self.fill_family() + + def fill_parents(self): + for handle in self.parent_list: + family = self.dbstate.db.get_family_from_handle(handle) + fhandle = family.get_father_handle() + mhandle = family.get_mother_handle() + + fname = "" + if fhandle: + father = self.dbstate.db.get_person_from_handle(fhandle) + if father: + fname = NameDisplay.displayer.display(father) + + mname = "" + if mhandle: + mother = self.dbstate.db.get_person_from_handle(mhandle) + if mother: + mname = NameDisplay.displayer.display(mother) + + self.pmodel.add([fname, mname, handle]) + + def fill_family(self): + for handle in self.family_list: + + family = self.dbstate.db.get_family_from_handle(handle) + fhandle = family.get_father_handle() + mhandle = family.get_mother_handle() + + name = "" + + if fhandle and fhandle != self.person.handle: + spouse = self.dbstate.db.get_person_from_handle(fhandle) + if spouse: + name = NameDisplay.displayer.display(spouse) + elif mhandle: + spouse = self.dbstate.db.get_person_from_handle(mhandle) + if spouse: + name = NameDisplay.displayer.display(spouse) + + reltype = str(family.get_relationship()) + + self.fmodel.add([name, reltype, handle]) + + def cancel_clicked(self, obj): + self.close() + + def ok_clicked(self, obj): + trans = self.dbstate.db.transaction_begin() + self.dbstate.db.commit_person(self.person, trans) + name = NameDisplay.displayer.display(self.person) + msg = _("Reorder Relationships: %s") % name + self.dbstate.db.transaction_commit(trans, msg) + + self.close() + + def pup_clicked(self,obj): + """Moves the current selection up one row""" + row = self.pmodel.get_selected_row() + if not row or row == -1: + return + store,the_iter = self.pmodel.get_selected() + data = self.pmodel.get_data(the_iter,xrange(3)) + self.pmodel.remove(the_iter) + self.pmodel.insert(row-1,data,None,1) + handle = self.parent_list.pop(row) + self.parent_list.insert(row-1,handle) + + def pdown_clicked(self, obj): + row = self.pmodel.get_selected_row() + if row + 1 >= self.pmodel.count or row == -1: + return + store,the_iter = self.pmodel.get_selected() + data = self.pmodel.get_data(the_iter,xrange(3)) + self.pmodel.remove(the_iter) + self.pmodel.insert(row+1,data,None,1) + handle = self.parent_list.pop(row) + self.parent_list.insert(row+1,handle) + + def fup_clicked(self, obj): + row = self.fmodel.get_selected_row() + if not row or row == -1: + return + store,the_iter = self.fmodel.get_selected() + data = self.fmodel.get_data(the_iter,xrange(3)) + self.fmodel.remove(the_iter) + self.fmodel.insert(row-1,data,None,1) + handle = self.family_list.pop(row) + self.family_list.insert(row-1,handle) + + + def fdown_clicked(self, obj): + row = self.fmodel.get_selected_row() + if row + 1 >= self.fmodel.count or row == -1: + return + store,the_iter = self.fmodel.get_selected() + data = self.fmodel.get_data(the_iter,xrange(3)) + self.fmodel.remove(the_iter) + self.fmodel.insert(row+1,data,None,1) + handle = self.family_list.pop(row) + self.family_list.insert(row+1,handle) diff --git a/gramps2/src/glade/gramps.glade b/gramps2/src/glade/gramps.glade index b42a533b0..9f77b2d02 100644 --- a/gramps2/src/glade/gramps.glade +++ b/gramps2/src/glade/gramps.glade @@ -15313,4 +15313,350 @@ Very High + + 12 + True + + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + 500 + 400 + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + 5 + 3 + False + 6 + 6 + + + + True + <b>Parent relationships</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 3 + 0 + 1 + + + + + + + True + False + 0 + + + + True + True + GTK_RELIEF_NORMAL + True + + + + True + gtk-go-up + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + True + gtk-go-down + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + + + + 2 + 3 + 1 + 2 + fill + fill + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 1 + 2 + 1 + 2 + + + + + + True + <b>Family relationships</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 3 + 3 + 4 + fill + + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 1 + 2 + 4 + 5 + fill + + + + + + True + False + 0 + + + + True + True + GTK_RELIEF_NORMAL + True + + + + True + gtk-go-up + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + True + gtk-go-down + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + + + + 2 + 3 + 4 + 5 + fill + fill + + + + + 0 + True + True + + + + + +