From 9b2933bee09cf8f0370d762a83edd344edd3ec10 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Fri, 8 Nov 2002 03:42:25 +0000 Subject: [PATCH] Gallery drag/drop functionality svn: r1169 --- example/gramps/data.gramps | Bin 3711 -> 3695 bytes src/EditPerson.py | 2 - src/ImageSelect.py | 204 +- src/ListModel.py | 24 +- src/SelectChild.py | 16 +- src/edit_person.glade | 4 +- src/gramps.glade | 1 + src/mergedata.glade | 3683 +++++++++++++++++------------------- src/plugins/EventCmp.py | 52 +- src/plugins/Merge.py | 97 +- src/plugins/eventcmp.glade | 1024 +++++----- 11 files changed, 2491 insertions(+), 2616 deletions(-) diff --git a/example/gramps/data.gramps b/example/gramps/data.gramps index f62de5b7310ba53877d235e5aa0374e1dc4c792a..68bcdbdaee8e3dc98ddb06e50dbe977a18a95bf9 100644 GIT binary patch delta 3672 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 delta 3688 zcmV-u4wv!o9RC~#ABzYGMjX452Rwi8Z`-=@d;bc~ABGBuZT+$(VQJnHH*MP2G(r5{ z9*SWY7>l;qN~A!^N%PvP9k;?~cd2?_$eiV)3zT5ldOw=ZTv z59NgCDKrkC%^YVmrKA8_$30Z=m6*vNvQ>)JqZjmsH7-F4g2imvAg^9AoRO0=ev76V zEtki`=2fc+P7-nAIu4o+&?SGS3{A^{YN$T68qR3>a5BvWuxn09ny5zVWvfw9!dOqf zkbCr%i|?vQ^{NVpuUIJ_PJW-BRxs+{ttL5#Ug?SJ`N2rFsb934EIA`5zVG)(qftK& zJ+Er0Ubotj4Ab=FmfseV1^+B~M(%-2WWY$NdQ=K3E)KWZcs$(5^SFN!3QEWvuhQ~u z@1q~~>TWqmlQTpUcYBtj>dYO2{0N<4=FwQ*X!|0V74F#tb>3#>4q_w$D-u9dLHZ974E6ZTl2v+WqNQxUt@fTun1I-t0y|;fb^Fd}pUM6lqY{k(Ngt;A9y8>zQ3*_BVsVa~3pzueQ~r<~ z#-{jvC+d5V3S)vYK>+A!!gFwSz-ig~snvSdNbMtgEdIoo3|)M~X@(DDxP4gR+`jL; zoXO)3HhKnZw8($O12Qm*VL}IeCwy(g5dxlZ-_x%Zu49Ji4Cf^+vK>Pj_Z_{5)t-}G zs6J*H?HH2lNt@et*B%eaH&s4guY7I2WE_0_vyWFFZceW+zP@==D+(&Ww}uF4E_j9} zJSS|4LGzB#JHp`ecLX|GE(yAtPEK#o$B#$I3eXpRN3wrgB9I&i!a~qHh&d48ZQ=^# zh1;zL=z^eoT%baYg%E}wz>hBwPm=+3u1CfV&8A}*Rx zuK0l&dJq2G4Eg|%Cpe`r0!HxwopH%tqNo7Ye&dq6ppNKv1yAcSTw<_#z_Lq{K?|Vf z1B{%o0zRw?o|082TUH{3=CX_L0OU_A1_XjBII6~3fAdE03Z_E+IdUK}R+_$Z+u zxgUR4#bNAiD8s+DPy0Id7Q7GF>3ijffjzH!t&^V#IgEP|D7QM;Yt_>D z7hMsdYoAvdK3y#{Y%%=scPzPXY$^V5lpEpgB@o@p+LhGsE#{euQqTlVVc7xRGh7>L zd=R@6#mZ4Wh~4pC+wP1^?2g5`bb&ikgjRpW1sUQ%!~Nm^KRht`SLTkyz@ZMTu<;aSvf zWwXIWO{vyV{6c{YG@0 zFR&WomUwP1C-_vX=5zYvWGWyeub(aKfL2pX&s^8DBSqhlQUn*?aH3hs3WCX&J0$L2 zS;01*$x_J75u$a!YZQn$JqfP7|Ej(Y#*E9R3~ZI3)OUMjQfXfuG(GGC&(Tpv>#L9+lun1 zd|uwm(&%%xfS7xaK>s{h&3;Dl(^-~9-9=D6L9ChLJ6^2XH-@%^=0yzTslWO7&#GA)n=)BkF&-xeBIkrhYysR=r;rnOv&< z!eqm^IhIEWD;)AxhYC3vZ+~g~I_+^PfOyg2ltu2?ER@(~BWhB%tXBI&sCge~-g~XO zhKgBFaLzU3+}3RoTbyezi_hd-7+WX~YLD2D3P$W1j@Z-cO0>VOj7+l`Tf@=_IMxY1 zFkpjk$cBGF#|CGAE<_`>oQ8WlR0?rp9S3wQ^K_Fd(!6&^I!KPLhhxC~z>NE2?X271 zUd66sqJtg8kIaa7wKHf-JkOHRkDAu|2-!P2etNG_rWy~Y-}i4M=MyJ z-{Jea(YuDW!q@s2fr&YF3Kw-(KZS!AC_tc2SO+Gx5KrVi3g>sATX6i)ghT#I1>x_% z;Ky-wHC4xgZ&;Rc&K7m?R2R0Y24?i)8Y11=uk{H`1YsDfxcXSd+g}h-wYS}oTZ{^Q z(vg43SPG*Hty%V7;A%&KDk}_ZItp&^Vrx2nif{FE9o*Iyq6u`XUy6WfYs0cAX$g_B z3dH4gLV&-y97eGQ-Bih)<6+&h##(`U0=D-w>}SJqHEYiujOJPK>+;i`*yZ|q6vQ=9HGhST3*{g{56mp&KNmDXI!u)PqX#a zPMVI+y5nb_5V6XSKxApgR|Wbk(|FT+k`Sip>~2U`mlPeLKX9?+q$2jqzck%~b+-;%Ext0zceiksP7Z6lWyCJNOi@J5G3(tr#sI)RjlK4BI*ZqEj0pop0 z+^9%(QInC3y^WB6pP(}$zLS(Z=um9tzz4zi8Nzuldr_+h8GwRamKS< zs-&FBx-ZRu*d@-`^U2;Q(R)EM&Psn%Rra{;py3LyycK#E*&9v%gYzVXMdAp3<>@X9=SABl&e+0vZGvY4OLt9K z*XDT}@$qnDtEK-%W@Tfyt6vK0mE7|YGx;zmf0R9x(F_ojIW>3Nn8`$9>;ZK6iihEc}AAx)) z@Vxx*ncy?9gyg?*D{H<5e%yc`5AtOG6nOP|3-+`m(pbxj|2)TWpM*PV;Eo30@ 20: - description = "%s..." % description[0:20] - - image = gtk.gdk.pixbuf_new_from_file(name) - x = image.get_width() - y = image.get_height() - - grp = self.root.add(gnome.canvas.CanvasGroup,x=self.cx,y=self.cy) - grp.connect('event',self.item_event) - grp.set_data('obj',photo) - - xloc = (_IMAGEX-x)/2 - yloc = (_IMAGEX-y)/2 - - item = grp.add(gnome.canvas.CanvasPixbuf, - pixbuf=image, - x=xloc, - y=yloc) - text = grp.add(gnome.canvas.CanvasText, - x=_IMAGEX/2, - y=_IMAGEX, - anchor=gtk.ANCHOR_CENTER, - text=description) + oid = object.getId() - self.cx = 10 + _IMAGEX + self.cx - if self.cx + 10 + _IMAGEX > self.x: - self.cx = 10 - self.cy = self.cy + 10 + _IMAGEY + if self.canvas_list.has_key(oid): + (grp,item,text,bg,x,y) = self.canvas_list[oid] + if x != self.cx or y != self.cy: + grp.move(self.cx-x,self.cy-y) + else: + name = Utils.thumb_path(self.db.getSavePath(),object) + description = object.getDescription() + if len(description) > 20: + description = "%s..." % description[0:20] + + image = gtk.gdk.pixbuf_new_from_file(name) + x = image.get_width() + y = image.get_height() + + grp = self.root.add(gnome.canvas.CanvasGroup,x=self.cx,y=self.cy) + + xloc = (_IMAGEX-x)/2 + yloc = (_IMAGEY-y)/2 + + bg = grp.add(gnome.canvas.CanvasRect, + x1=0, + x2=_IMAGEX, + y2=_IMAGEY, + y1=_IMAGEY-20) + + item = grp.add(gnome.canvas.CanvasPixbuf, + pixbuf=image, + x=xloc, + y=yloc) + + text = grp.add(gnome.canvas.CanvasText, + x=_IMAGEX/2, + y=_IMAGEX, + anchor=gtk.ANCHOR_CENTER, + text=description) + + + self.item_map[item] = oid + self.item_map[text] = oid + self.item_map[grp] = oid + self.item_map[bg] = oid + + self.p_map[item] = (item,text,bg,photo) + self.p_map[text] = (item,text,bg,photo) + self.p_map[grp] = (item,text,bg,photo) + self.p_map[bg] = (item,text,bg,photo) - item.show() - text.show() - self.canvas_list.append(grp) - self.canvas_list.append(item) - self.canvas_list.append(text) + item.show() + text.show() + bg.show() + + self.canvas_list[oid] = (grp,item,text,bg,self.cx,self.cy) + + if self.cx + _PAD + _IMAGEX > self.x: + self.cx = _PAD + self.cy = self.cy + _PAD + _IMAGEY + else: + self.cx = _PAD + self.cx + _IMAGEX def load_images(self): """clears the currentImages list to free up any cached Imlibs. Then add each photo in the place's list of photos to the photolist window.""" - for item in self.canvas_list: - item.destroy() - self.pos = 0 - self.cx = 10 - self.cy = 10 + self.cx = _PAD + self.cy = _PAD (self.x,self.y) = self.iconlist.get_size() - self.max = (self.x)/(_IMAGEX+10) + self.max = (self.x)/(_IMAGEX+_PAD) for photo in self.dataobj.getPhotoList(): self.add_thumbnail(photo) @@ -345,13 +401,12 @@ class Gallery(ImageSelect): self.selectedIcon = iconNumber def get_index(self,obj,x,y): - x_offset = x/(_IMAGEX+10) - y_offset = y/(_IMAGEY+10) - index = (y_offset*self.max)+x_offset + x_offset = x/(_IMAGEX+_PAD) + y_offset = y/(_IMAGEY+_PAD) + index = (y_offset*(1+self.max))+x_offset return min(index,len(self.dataobj.getPhotoList())) def on_photolist_drag_data_received(self,w, context, x, y, data, info, time): - print "receive",w if data and data.format == 8: icon_index = self.get_index(w,x,y) d = string.strip(string.replace(data.data,'\0',' ')) @@ -441,20 +496,14 @@ class Gallery(ImageSelect): if GrampsCfg.globalprop: LocalMediaProperties(oref,self.path,self) Utils.modified() - #w.drag_finish(context, 1, 0, time) - else: - pass - #w.drag_finish(context, 0, 0, time) def on_photolist_drag_data_get(self,w, context, selection_data, info, time): - print "drag data get",w if info == 1: return - if self.selectedIcon != -1: - ref = self.dataobj.getPhotoList()[self.selectedIcon] - id = ref.getReference().getId() - selection_data.set(selection_data.target, 8, id) - + id = self.item_map[self.drag_item] + selection_data.set(selection_data.target, 8, id) + self.drag_item = None + def on_add_photo_clicked(self, obj): """User wants to add a new photo. Create a dialog to find out which photo they want.""" @@ -479,7 +528,6 @@ class Gallery(ImageSelect): def show_popup(self, photo): """Look for right-clicks on a picture and create a popup menu of the available actions.""" - menu = gtk.Menu() item = gtk.TearoffMenuItem() diff --git a/src/ListModel.py b/src/ListModel.py index a606b4332..20d70cca9 100644 --- a/src/ListModel.py +++ b/src/ListModel.py @@ -25,29 +25,7 @@ class ListModel: def __init__(self,tree,dlist): self.tree = tree l = len(dlist) - if l == 1: - self.model = gtk.ListStore(TYPE_STRING) - elif l == 2: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING) - elif l == 3: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING, TYPE_STRING) - elif l == 4: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING) - elif l == 5: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING, TYPE_STRING) - elif l == 6: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING, TYPE_STRING, TYPE_STRING) - elif l == 7: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING) - elif l == 8: - self.model = gtk.ListStore(TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING, TYPE_STRING, TYPE_STRING, - TYPE_STRING, TYPE_STRING) + self.model = gtk.ListStore(*[TYPE_STRING]*l) self.selection = self.tree.get_selection() self.tree.set_model(self.model) diff --git a/src/SelectChild.py b/src/SelectChild.py index a32108f18..057a0634e 100644 --- a/src/SelectChild.py +++ b/src/SelectChild.py @@ -121,21 +121,21 @@ class SelectChild: bday = self.person.getBirth().getDateObj() dday = self.person.getDeath().getDateObj() - slist = [] + slist = {} for f in self.person.getParentList(): if f: if f[0].getFather(): - slist.append(f[0].getFather()) + slist[f[0].getFather().getId()] = 1 elif f[0].getMother(): - slist.append(f[0].getMother()) + slist[f[0].getMother().getId()] = 1 for c in f[0].getChildList(): - slist.append(c) + slist[c.getId()] = 1 person_list = [] for key in self.db.getPersonKeys(): person = self.db.getPerson(key) if filter: - if person in slist or person.getMainParents(): + if slist.has_key(key) or person.getMainParents(): continue pdday = person.getDeath().getDateObj() @@ -167,10 +167,10 @@ class SelectChild: if pdday.getLowYear() > dday.getHighYear() + 150: continue - person_list.append(person) + person_list.append(person.getId()) - for person in person_list: - dinfo = self.db.getPersonDisplay(id) + for idval in person_list: + dinfo = self.db.getPersonDisplay(idval) rdata = [dinfo[0],dinfo[1],dinfo[3],dinfo[5],dinfo[6]] self.refmodel.add(rdata) diff --git a/src/edit_person.glade b/src/edit_person.glade index 9b616c739..613d4e96a 100644 --- a/src/edit_person.glade +++ b/src/edit_person.glade @@ -4274,8 +4274,8 @@ True True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT diff --git a/src/gramps.glade b/src/gramps.glade index e15ee8fa7..ea60c3cb1 100644 --- a/src/gramps.glade +++ b/src/gramps.glade @@ -5450,6 +5450,7 @@ GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False + 300 True False True diff --git a/src/mergedata.glade b/src/mergedata.glade index 31c3d6198..8d7831c7f 100644 --- a/src/mergedata.glade +++ b/src/mergedata.glade @@ -1,1945 +1,1756 @@ - - + + - - merge - merge - - src - pixmaps - C - True - True - + + + Merge Places - GRAMPS + GTK_WINDOW_TOPLEVEL + yes + no + yes + 400 + yes + GTK_WIN_POS_NONE - - GnomeDialog - merge_places - 400 - Merge Places - GRAMPS - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - True - False - True - False - False - False + + + no + 8 + yes - - GtkVBox - GnomeDialog:vbox - dialog-vbox2 - False - 8 - - 4 - True - True + + + GTK_BUTTONBOX_END + 8 + 400 + yes + + + + yes + yes + yes + gtk-ok + yes + yes + + + + + + + + yes + yes + yes + gtk-cancel + yes + yes + + + + + + + 0 + no + yes + GTK_PACK_END + + + + + + no + 0 + yes + + + + Select the title for the merged place + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + 0 + no + no + + + + + + yes + + + 10 + no + yes + + + + + + no + 0 + 0 + 3 + 2 + yes + + + + yes + yes + + 0 + yes + yes + + + 1 + 2 + 2 + 3 + 0 + 0 + expand|fill + + + + + + + + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 1 + 2 + 0 + 1 + 0 + 0 + fill + + + + + + + + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 1 + 2 + 1 + 2 + 0 + 0 + fill + + + + + + + yes + Place 1 + yes + yes + yes + + + 0 + 1 + 0 + 1 + 5 + 5 + fill + + + + + + + yes + Place 2 + no + yes + yes + title1 + + + 0 + 1 + 1 + 2 + 5 + 5 + fill + + + + + + + yes + Other + no + yes + yes + title1 + + + 0 + 1 + 2 + 3 + 5 + 5 + fill + + + + + + 0 + yes + yes + + + + + 0 + yes + yes + + + + + 4 + yes + yes + - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area2 - 400 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button7 - True - True - - clicked - on_merge_places_clicked - merge_places - Tue, 23 Oct 2001 23:26:52 GMT - - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button9 - True - True - - clicked - destroy_passed_object - merge_places - Tue, 23 Oct 2001 23:00:28 GMT - - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkVBox - vbox2 - False - 0 - - 0 - True - True - - - - GtkLabel - label56 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkHSeparator - hseparator6 - - 10 - False - True - - - - - GtkTable - table5 - 3 - 2 - False - 0 - 0 - - 0 - True - True - - - - GtkEntry - title3_text - True - True - True - 0 - - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - title1_text - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - title2_text - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkRadioButton - title1 - True - - True - True - title - - 0 - 1 - 0 - 1 - 5 - 5 - False - False - False - False - True - False - - - - - GtkRadioButton - title2 - True - - False - True - title - - 0 - 1 - 1 - 2 - 5 - 5 - False - False - False - False - True - False - - - - - GtkRadioButton - title3 - True - - False - True - title - - 0 - 1 - 2 - 3 - 5 - 5 - False - False - False - False - True - False - - - - - + + Merge People - GRAMPS + GTK_WINDOW_TOPLEVEL + yes + no + yes + yes + GTK_WIN_POS_NONE - - GnomeDialog - merge - Merge People - GRAMPS - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - True - False - True - False - False - False + + + no + 8 + yes - - GtkVBox - GnomeDialog:vbox - dialog-vbox3 - False - 8 - - 4 - True - True + + + GTK_BUTTONBOX_END + 8 + yes + + + + yes + yes + Merge and Close + yes + + + + + + + + yes + yes + Merge and Edit + yes + + + + + + + + yes + yes + yes + gtk-cancel + yes + yes + + + + + + + 0 + no + yes + GTK_PACK_END + + + + + + no + 0 + 620 + yes + + + + Merge People + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + 10 + no + no + + + + + + yes + 0 + yes + + + + First Person + 0 + 300 + GTK_SHADOW_ETCHED_IN + yes + + + + no + 0 + 2 + 14 + 3 + yes + + + + yes + + no + yes + yes + + + 2 + 3 + 0 + 1 + 0 + 0 + shrink + + + + + + + Birth Date + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 4 + 5 + 0 + 0 + fill + + + + + + + Death Date + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 7 + 8 + 0 + 0 + fill + + + + + + + Mother + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 11 + 12 + 0 + 0 + fill + + + + + + + Name + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 0 + 1 + 0 + 0 + fill + + + + + + + Birth Place + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 5 + 6 + 0 + 0 + fill + + + + + + + Death Place + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 8 + 9 + 0 + 0 + fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 4 + 5 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 5 + 6 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 7 + 8 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 8 + 9 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 10 + 11 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 11 + 12 + 0 + 0 + expand|fill + + + + + + + Father + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 10 + 11 + 0 + 0 + fill + + + + + + + yes + + + 0 + 3 + 9 + 10 + 0 + 5 + fill + fill + + + + + + yes + + + 0 + 3 + 12 + 13 + 0 + 5 + fill + fill + + + + + + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + yes + + + + yes + no + yes + + + + CList:title + + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + + + + + + GTK_UPDATE_CONTINUOUS + yes + + + + + + GTK_UPDATE_CONTINUOUS + yes + + + + + 1 + 3 + 13 + 14 + 0 + 0 + fill + fill + + + + + + Spouses + GTK_JUSTIFY_CENTER + no + 1 + 0 + 5 + 0 + yes + + + 0 + 1 + 13 + 14 + 0 + 0 + fill + expand|fill + + + + + + yes + + + 0 + 3 + 6 + 7 + 0 + 0 + fill + expand|fill + + + + + + yes + + + 0 + 3 + 3 + 4 + 0 + 0 + fill + expand|fill + + + + + + yes + + no + yes + yes + + + 2 + 3 + 10 + 12 + 0 + 0 + shrink + + + + + + + yes + + yes + yes + yes + + + 2 + 3 + 7 + 9 + 0 + 0 + shrink + shrink + + + + + + yes + + no + yes + yes + + + 2 + 3 + 4 + 6 + 0 + 0 + shrink + shrink + + + + + + ID + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 2 + 3 + 0 + 0 + fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 2 + 3 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 0 + 1 + 0 + 0 + expand|fill + + + + + + + yes + + no + yes + yes + + + 2 + 3 + 2 + 3 + 0 + 0 + fill + + + + + + + yes + + + 0 + 3 + 1 + 2 + 0 + 0 + fill + expand|fill + + + + + + + 2 + yes + yes + + + + + + Second Person + 0 + 300 + GTK_SHADOW_ETCHED_IN + yes + + + + no + 0 + 2 + 14 + 3 + yes + + + + Death Date + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 7 + 8 + 0 + 0 + fill + + + + + + + Mother + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 11 + 12 + 0 + 0 + fill + + + + + + + Birth Place + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 5 + 6 + 0 + 0 + fill + + + + + + + Birth Date + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 4 + 5 + 0 + 0 + fill + + + + + + + Death Place + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 8 + 9 + 0 + 0 + fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 0 + 1 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 4 + 5 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 5 + 6 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 7 + 8 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 8 + 9 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 10 + 11 + 0 + 0 + expand|fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 11 + 12 + 0 + 0 + expand|fill + + + + + + + Spouses + GTK_JUSTIFY_CENTER + no + 1 + 0 + 5 + 0 + yes + + + 0 + 1 + 13 + 14 + 0 + 0 + fill + expand|fill + + + + + + Father + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 10 + 11 + 0 + 0 + fill + + + + + + + yes + + + 0 + 3 + 9 + 10 + 0 + 5 + fill + fill + + + + + + yes + + + 0 + 3 + 12 + 13 + 0 + 5 + fill + fill + + + + + + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + yes + + + + yes + no + yes + + + + CList:title + + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + + + + + + GTK_UPDATE_CONTINUOUS + yes + + + + + + GTK_UPDATE_CONTINUOUS + yes + + + + + 1 + 3 + 13 + 14 + 0 + 0 + fill + fill + + + + + + yes + + + 0 + 3 + 3 + 4 + 0 + 0 + fill + expand|fill + + + + + + yes + + + 0 + 3 + 6 + 7 + 0 + 0 + fill + expand|fill + + + + + + yes + + no + yes + yes + bbirth1 + + + 2 + 3 + 4 + 6 + 0 + 0 + shrink + + + + + + + yes + + no + yes + yes + death1 + + + 2 + 3 + 7 + 9 + 0 + 0 + shrink + + + + + + + yes + + no + yes + yes + bfather1 + + + 2 + 3 + 10 + 12 + 0 + 0 + shrink + + + + + + + Name + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 0 + 1 + 0 + 0 + fill + + + + + + + ID + GTK_JUSTIFY_CENTER + no + 1 + 0.5 + 5 + 0 + yes + + + 0 + 1 + 2 + 3 + 0 + 0 + fill + + + + + + + yes + no + + 0 + yes + yes + + + 1 + 2 + 2 + 3 + 0 + 0 + expand|fill + + + + + + + yes + + no + yes + yes + bname1 + + + 2 + 3 + 0 + 1 + 0 + 0 + shrink + + + + + + + yes + + no + yes + yes + id1 + + + 2 + 3 + 2 + 3 + 0 + 0 + fill + + + + + + + yes + + + 0 + 3 + 1 + 2 + 0 + 0 + fill + expand|fill + + + + + + + 2 + yes + yes + + + + + 0 + yes + yes + + + + + + no + 0 + yes + + + + + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + 0 + yes + yes + + + + + + no + 0 + yes + + + + yes + Keep other name as an alternate name + no + yes + yes + + + 0 + no + no + + + + + + yes + Keep other birth event as an alternate birth event + no + yes + yes + + + 0 + no + no + + + + + + yes + Keep other death event as an alternate death event + no + yes + yes + + + 0 + no + no + + + + + 0 + no + no + + + + + + + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + 0 + yes + yes + + + + + 3 + no + yes + + + + + 0 + yes + yes + + + + + 4 + yes + yes + - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area3 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button12 - True - True - - clicked - on_merge_clicked - merge - Thu, 25 Oct 2001 17:00:40 GMT - - - - - - GtkButton - button13 - True - True - - clicked - on_next_clicked - merge - Thu, 25 Oct 2001 17:00:18 GMT - - - - - - GtkButton - button14 - True - True - - clicked - destroy_passed_object - merge - Thu, 25 Oct 2001 16:59:59 GMT - - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkVBox - vbox1 - 620 - False - 0 - - 0 - True - True - - - - GtkLabel - progress - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 10 - False - False - - - - - GtkHBox - hbox1 - True - 0 - - 0 - True - True - - - - GtkFrame - PersonFrame1 - 300 - - 0 - GTK_SHADOW_ETCHED_IN - - 2 - True - True - - - - GtkTable - table3 - 14 - 3 - False - 0 - 2 - - - GtkRadioButton - bname1 - True - - False - True - name - - 2 - 3 - 0 - 1 - 0 - 0 - False - False - True - False - False - False - - - - - GtkLabel - label8 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 4 - 5 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label12 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 7 - 8 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label22 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 11 - 12 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label4 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label26 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 5 - 6 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label30 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 8 - 9 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - birth1_text - True - False - True - 0 - - - 1 - 2 - 4 - 5 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - bplace1_text - True - False - True - 0 - - - 1 - 2 - 5 - 6 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - death1_text - True - False - True - 0 - - - 1 - 2 - 7 - 8 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - dplace1_text - True - False - True - 0 - - - 1 - 2 - 8 - 9 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - father1 - True - False - True - 0 - - - 1 - 2 - 10 - 11 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - mother1 - True - False - True - 0 - - - 1 - 2 - 11 - 12 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label16 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 10 - 11 - 0 - 0 - False - False - False - False - True - False - - - - - GtkHSeparator - hseparator2 - - 0 - 3 - 9 - 10 - 0 - 5 - False - False - False - False - True - True - - - - - GtkHSeparator - hseparator4 - - 0 - 3 - 12 - 13 - 0 - 5 - False - False - False - False - True - True - - - - - GtkScrolledWindow - scrolledwindow1 - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 1 - 3 - 13 - 14 - 0 - 0 - False - False - False - False - True - True - - - - GtkCList - spouse1 - True - 1 - 80 - GTK_SELECTION_SINGLE - False - GTK_SHADOW_IN - - - GtkLabel - CList:title - label51 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - GtkLabel - label33 - - GTK_JUSTIFY_CENTER - False - 1 - 0 - 5 - 0 - - 0 - 1 - 13 - 14 - 0 - 0 - False - True - False - False - True - True - - - - - GtkHSeparator - hseparator7 - - 0 - 3 - 6 - 7 - 0 - 0 - False - True - False - False - True - True - - - - - GtkHSeparator - hseparator8 - - 0 - 3 - 3 - 4 - 0 - 0 - False - True - False - False - True - True - - - - - GtkRadioButton - bfather1 - True - - False - True - father - - 2 - 3 - 10 - 12 - 0 - 0 - False - False - True - False - False - False - - - - - GtkRadioButton - death1 - True - - True - True - death - - 2 - 3 - 7 - 9 - 0 - 0 - False - False - True - True - False - False - - - - - GtkRadioButton - bbirth1 - True - - False - True - birth - - 2 - 3 - 4 - 6 - 0 - 0 - False - False - True - True - False - False - - - - - GtkLabel - label57 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - id1_text - True - False - True - 0 - - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - name1_text - True - False - True - 0 - - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkRadioButton - id1 - True - - False - True - id - - 2 - 3 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkHSeparator - hseparator11 - - 0 - 3 - 1 - 2 - 0 - 0 - False - True - False - False - True - True - - - - - - - GtkFrame - PersonFrame2 - 300 - - 0 - GTK_SHADOW_ETCHED_IN - - 2 - True - True - - - - GtkTable - table4 - 14 - 3 - False - 0 - 2 - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 7 - 8 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label25 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 11 - 12 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label27 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 5 - 6 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label9 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 4 - 5 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label32 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 8 - 9 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - name2_text - True - False - True - 0 - - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - birth2_text - True - False - True - 0 - - - 1 - 2 - 4 - 5 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - bplace2_text - True - False - True - 0 - - - 1 - 2 - 5 - 6 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - death2_text - True - False - True - 0 - - - 1 - 2 - 7 - 8 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - dplace2_text - True - False - True - 0 - - - 1 - 2 - 8 - 9 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - father2 - True - False - True - 0 - - - 1 - 2 - 10 - 11 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - mother2 - True - False - True - 0 - - - 1 - 2 - 11 - 12 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label34 - - GTK_JUSTIFY_CENTER - False - 1 - 0 - 5 - 0 - - 0 - 1 - 13 - 14 - 0 - 0 - False - True - False - False - True - True - - - - - GtkLabel - label19 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 10 - 11 - 0 - 0 - False - False - False - False - True - False - - - - - GtkHSeparator - hseparator3 - - 0 - 3 - 9 - 10 - 0 - 5 - False - False - False - False - True - True - - - - - GtkHSeparator - hseparator5 - - 0 - 3 - 12 - 13 - 0 - 5 - False - False - False - False - True - True - - - - - GtkScrolledWindow - scrolledwindow2 - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 1 - 3 - 13 - 14 - 0 - 0 - False - False - False - False - True - True - - - - GtkCList - spouse2 - True - 1 - 80 - GTK_SELECTION_SINGLE - False - GTK_SHADOW_IN - - - GtkLabel - CList:title - label50 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - GtkHSeparator - hseparator9 - - 0 - 3 - 3 - 4 - 0 - 0 - False - True - False - False - True - True - - - - - GtkHSeparator - hseparator10 - - 0 - 3 - 6 - 7 - 0 - 0 - False - True - False - False - True - True - - - - - GtkRadioButton - bbirth2 - True - - False - True - birth - - 2 - 3 - 4 - 6 - 0 - 0 - False - False - True - False - False - False - - - - - GtkRadioButton - death2 - True - - False - True - death - - 2 - 3 - 7 - 9 - 0 - 0 - False - False - True - False - False - False - - - - - GtkRadioButton - bfather2 - True - - False - True - father - - 2 - 3 - 10 - 12 - 0 - 0 - False - False - True - False - False - False - - - - - GtkLabel - label58 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label59 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - id2_text - True - False - True - 0 - - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkRadioButton - radiobutton2 - True - - False - True - name - - 2 - 3 - 0 - 1 - 0 - 0 - False - False - True - False - False - False - - - - - GtkRadioButton - id2 - True - - False - True - id - - 2 - 3 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkHSeparator - hseparator12 - - 0 - 3 - 1 - 2 - 0 - 0 - False - True - False - False - True - True - - - - - - - - GtkHBox - hbox7 - False - 0 - - 3 - False - True - - - - GtkLabel - label53 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - True - True - - - - - GtkVBox - vbox3 - False - 0 - - 0 - False - False - - - - GtkCheckButton - altname - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - altbirth - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - altdeath - True - - False - True - - 0 - False - False - - - - - - GtkLabel - label54 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - True - True - - - - - - - + diff --git a/src/plugins/EventCmp.py b/src/plugins/EventCmp.py index 7fd38b2a8..f163e1e6d 100644 --- a/src/plugins/EventCmp.py +++ b/src/plugins/EventCmp.py @@ -31,10 +31,10 @@ import Utils import string import const import GenericFilter +import ListModel from TextDoc import * from OpenSpreadSheet import * -import intl -_ = intl.gettext +from intl import gettext as _ import gnome.ui import gtk @@ -167,11 +167,8 @@ def by_value(first,second): # #------------------------------------------------------------------------- def fix(line): - l = string.strip(line) - l = string.replace(l,'&','&') - l = string.replace(l,'>','>') - l = string.replace(l,'<','<') - return string.replace(l,'"','"') + l = line.strip().replace('&','&').replace(l,'>','>') + return l.replace(l,'<','<').replace(l,'"','"') #------------------------------------------------------------------------- # @@ -193,7 +190,7 @@ class DisplayChart: }) self.top = self.topDialog.get_widget("view") - self.table = self.topDialog.get_widget("addarea") + self.eventlist = self.topDialog.get_widget('treeview') self.my_list.sort(sort.by_last_name) @@ -204,17 +201,19 @@ class DisplayChart: def draw_clist_display(self): - eventlist = gtk.CList(len(self.event_titles),self.event_titles) - self.table.add(eventlist) - eventlist.show() + titles = [] + index = 0 + for v in self.event_titles: + titles.append((v,150,index)) + index = index + 1 + + self.list = ListModel.ListModel(self.eventlist,titles) + for data in self.row_data: + self.list.add(data) - for (top,bottom) in self.row_data: - eventlist.append(top) - eventlist.append(bottom) - - for index in range(0,len(self.event_titles)): - width = min(150,eventlist.optimal_column_width(index)) - eventlist.set_column_width(index,width) +# for index in range(0,len(self.event_titles)): +# width = min(150,eventlist.optimal_column_width(index)) +# self.eventlist.set_column_width(index,width) def build_row_data(self): for individual in self.my_list: @@ -235,29 +234,26 @@ class DisplayChart: while done == 0: added = 0 if first: - tlist = [name,birth.getDate(),death.getDate()] - blist = ["",birth.getPlaceName(),death.getPlaceName()] + tlist = [name,"%s\n%s" % (birth.getDate(),birth.getPlaceName()), + "%s\n%s" % (death.getDate(),death.getPlaceName())] else: tlist = ["","",""] - blist = ["","",""] for ename in self.event_titles[3:]: if map.has_key(ename) and len(map[ename]) > 0: event = map[ename][0] del map[ename][0] - tlist.append(event.getDate()) - blist.append(event.getPlaceName()) + tlist.append("%s\n%s" % (event.getDate(), event.getPlaceName())) added = 1 else: tlist.append("") - blist.append("") if first: first = 0 - self.row_data.append((tlist,blist)) + self.row_data.append(tlist) elif added == 0: done = 1 else: - self.row_data.append((tlist,blist)) + self.row_data.append(tlist) def make_event_titles(self): """Creates the list of unique event types, along with the person's @@ -330,6 +326,8 @@ register_tool( runTool, _("Compare individual events"), category=_("Analysis and Exploration"), - description=_("Aids in the analysis of data by allowing the development of custom filters that can be applied to the database to find similar events") + description=_("Aids in the analysis of data by allowing the " + "development of custom filters that can be applied " + "to the database to find similar events") ) diff --git a/src/plugins/Merge.py b/src/plugins/Merge.py index 9977ebb44..462809bfa 100644 --- a/src/plugins/Merge.py +++ b/src/plugins/Merge.py @@ -24,6 +24,7 @@ import RelLib import Utils import soundex import GrampsCfg +import ListModel from intl import gettext as _ import string @@ -43,11 +44,16 @@ def is_initial(name): if len(name) > 2: return 0 elif len(name) == 2: - if name[0] in string.uppercase and name[1] == '.': + if name[0] == name[0].upper() and name[1] == '.': return 1 else: - return name[0] in string.uppercase + return name[0] == name[0].upper() +#------------------------------------------------------------------------- +# +# +# +#------------------------------------------------------------------------- def ancestors_of(p1,list): if p1 == None or p1 in list: return @@ -113,9 +119,11 @@ class Merge: self.show() def progress_update(self,val): - self.progress.set_value(val) - while gtk.events_pending(): - gtk.mainiteration() + pass +# self.progress.set_value(val) +# while gtk.events_pending(): +# gtk.mainiteration() + def find_potentials(self,thresh): top = gtk.glade.XML(self.glade_file,"message") @@ -131,19 +139,20 @@ class Merge: key = self.gen_key(p1.getPrimaryName().getSurname()) if p1.getGender() == RelLib.Person.male: if males.has_key(key): - males[key].append(p1) + males[key].append(p1.getId()) else: - males[key] = [p1] + males[key] = [p1.getId()] else: if females.has_key(key): - females[key].append(p1) + females[key].append(p1.getId()) else: - females[key] = [p1] + females[key] = [p1.getId()] length = len(self.person_list) num = 0 for p1 in self.person_list: + p1key = p1.getId() if num % 25 == 0: self.progress_update((float(num)/float(length))*100) num = num + 1 @@ -155,26 +164,27 @@ class Merge: remaining = females[key] index = 0 - for p2 in remaining: + for p2key in remaining: index = index + 1 - if p1 == p2: + if p1key == p2key: continue - if self.map.has_key(p2): - (v,c) = self.map[p2] + p2 = self.db.getPerson(p2key) + if self.map.has_key(p2key): + (v,c) = self.map[p2key] if v == p1: continue chance = self.compare_people(p1,p2) if chance >= thresh: - if self.map.has_key(p1): - val = self.map[p1] + if self.map.has_key(p1key): + val = self.map[p1key] if val[1] > chance: - self.map[p1] = (p2,chance) + self.map[p1key] = (p2,chance) else: - self.map[p1] = (p2,chance) + self.map[p1key] = (p2,chance) - self.list = self.map.keys()[:] - self.list.sort(by_id) + self.list = self.map.keys() + self.list.sort() self.length = len(self.list) self.topWin.destroy() self.dellist = {} @@ -188,6 +198,12 @@ class Merge: "on_do_merge_clicked" : self.on_do_merge_clicked, }) self.mlist.connect('button-press-event',self.button_press_event) + + self.list = ListModel.ListModel(self.mlist, + [(_('Rating'),75,0), + (_('First Person'),200,1), + (_('Second Person'),200,2)]) + self.redraw() def redraw(self): @@ -196,39 +212,41 @@ class Merge: if self.dellist.has_key(p1): continue (p2,c) = self.map[p1] - if self.dellist.has_key(p2): - p2 = self.dellist[p2] + p2key = p2.getId() + if self.dellist.has_key(p2key): + p2 = self.dellist[p2key] if p1 == p2: continue - list.append((c,p1,p2)) + list.append((c,p1,p2.getId())) list.sort() list.reverse() index = 0 - self.mlist.freeze() - self.mlist.clear() + self.match_map = {} + self.list.clear() for (c,p1,p2) in list: c = "%5.2f" % c - self.mlist.append([c, name_of(p1), name_of(p2)]) - self.mlist.set_row_data(index,(p1,p2)) + pn1 = self.db.getPerson(p1) + pn2 = self.db.getPerson(p2) + self.list.add([c, name_of(pn1), name_of(pn2)]) + self.match_map[index] = (p1,p2) index = index + 1 - self.mlist.thaw() def button_press_event(self,obj,event): - if event.button != 1 or event.type != GDK._2BUTTON_PRESS: + if event.button != 1 or event.type != gtk.gdk._2BUTTON_PRESS: return - if len(self.mlist.selection) <= 0: - return - row = self.mlist.selection[0] - (p1,p2) = self.mlist.get_row_data(row) - MergeData.MergePeople(self.db,p1,p2,self.on_update) + self.on_do_merge_clicked(obj) def on_do_merge_clicked(self,obj): - if len(self.mlist.selection) != 1: + store,iter = self.list.selection.get_selected() + if not iter: return - row = self.mlist.selection[0] - (p1,p2) = self.mlist.get_row_data(row) - MergeData.MergePeople(self.db,p1,p2,self.on_update) + + row = self.list.model.get_path(iter) + (p1,p2) = self.match_map[row[0]] + pn1 = self.db.getPerson(p1) + pn2 = self.db.getPerson(p2) + MergeData.MergePeople(self.db,pn1,pn2,self.on_update) def on_update(self,p1,p2): self.dellist[p2] = p1 @@ -389,7 +407,7 @@ class Merge: name1 = p1.getPrimaryName() name2 = p2.getPrimaryName() - + chance = self.name_match(name1,name2) if chance == -1 : return -1 @@ -524,6 +542,7 @@ register_tool( runTool, _("Find possible duplicate people"), category=_("Database Processing"), - description=_("Searches the entire database, looking for individual entries that may represent the same person.") + description=_("Searches the entire database, looking for " + "individual entries that may represent the same person.") ) diff --git a/src/plugins/eventcmp.glade b/src/plugins/eventcmp.glade index df12e7148..37210d029 100644 --- a/src/plugins/eventcmp.glade +++ b/src/plugins/eventcmp.glade @@ -1,547 +1,569 @@ - + - + - - Save as a Spreadsheet - GRAMPS - GTK_WINDOW_DIALOG - no - no - no - yes - GTK_WIN_POS_NONE + + True + Save as a Spreadsheet - GRAMPS + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True - - - no - 8 - yes + + + True + False + 8 - - - GTK_BUTTONBOX_END - 8 - yes + + + True + GTK_BUTTONBOX_END - - - yes - yes - yes - gtk-ok - yes - yes + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + 0 + + + - - - + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + 0 + + + + + + 0 + False + True + GTK_PACK_END + + - - - yes - yes - yes - gtk-cancel - yes - yes + + + True + False + 0 - - - - - - 0 - no - yes - GTK_PACK_END - - + + + True + Save data as a spreadsheet + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + - - - no - 0 - yes + + + True + + + 5 + True + True + + - - - Save data as a spreadsheet - GTK_JUSTIFY_CENTER - no - 0.5 - 0.5 - 0 - 0 - yes - - - 0 - no - no - - + + + True + table_data + 10 + Save Data + False + False - - - yes - - - 5 - yes - yes - - + + + True + True + True + True + 0 + + True + * + False + + + + + 5 + False + False + + - - - table_data - no - 350 - no - Save Data - yes + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN - - - yes - yes - - 0 - yes - yes - - - - - 5 - no - no - - + + + True + False + 0 - - - Format - 0 - GTK_SHADOW_ETCHED_IN - yes + + + True + True + OpenOffice Spreadsheet + True + GTK_RELIEF_NORMAL + True + False + True + + + 0 + False + False + + - - - no - 0 - yes + + + True + HTML + True + GTK_RELIEF_NORMAL + False + False + True + openoffice + + + + 0 + False + False + + - - - yes - OpenOffice Spreadsheet - yes - yes - yes - - - 0 - no - no - - + + + True + False + 0 - - - no - yes - HTML - no - yes - openoffice + + + - - - - 0 - no - no - - + + + Template + False + False + GTK_JUSTIFY_CENTER + False + False + 1 + 0.5 + 5 + 0 + + + 0 + True + True + + - - - no - 0 - yes + + + False + HtmlTemplate + 10 + Choose the HTML template + False + False - - - + + + True + True + True + True + 0 + + True + * + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + - - - no - Template - GTK_JUSTIFY_CENTER - no - 1 - 0.5 - 5 - 0 - - - 0 - yes - yes - - + + + True + Format + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + True + True + + + + + 0 + True + True + + + + + - - - no - no - HtmlTemplate - no - no - Choose the HTML template + + True + Event Comparison - GRAMPS + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + 500 + 400 + True + False + True - - - yes - yes - - 0 - yes - yes - - - - - 0 - yes - yes - - - - - 0 - yes - yes - - - - - - - 0 - yes - yes - - - - - 0 - yes - yes - - - - - 4 - yes - yes - - - - - Event Comparison - GRAMPS - GTK_WINDOW_TOPLEVEL - no - no - yes - 350 - yes - GTK_WIN_POS_NONE + + + True + False + 8 - - - no - 8 - yes + + + True + GTK_BUTTONBOX_END - - - GTK_BUTTONBOX_END - 8 - yes + + + True + True + True + gtk-save-as + True + GTK_RELIEF_NORMAL + 0 + + + - - - yes - yes - Save As... - yes + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + 0 + + + + + + 0 + False + True + GTK_PACK_END + + - - - + + + True + 2 + 1 + False + 0 + 0 - - - yes - yes - yes - gtk-close - yes - yes + + + True + Event Comparison + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + 1 + 0 + 1 + 10 + fill + + + - - - - - - 0 - no - yes - GTK_PACK_END - - + + + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT - - - no - 0 - 0 - 2 - 1 - yes + + + True + True + True + True + False + True + + + + + 0 + 1 + 1 + 2 + + + + + 0 + True + True + + + + + - - - Event Comparison - GTK_JUSTIFY_CENTER - no - 0.5 - 0.5 - 0 - 0 - 400 - yes - - - 0 - 1 - 0 - 1 - 0 - 10 - fill - - - + + True + Event Comparison - GRAMPS + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True - - - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - yes + + + True + False + 8 - - - + + + True + GTK_BUTTONBOX_END - - - GTK_UPDATE_CONTINUOUS - yes - - + + + True + True + True + gtk-apply + True + GTK_RELIEF_NORMAL + 0 + + + - - - GTK_UPDATE_CONTINUOUS - yes - - - - - 0 - 1 - 1 - 2 - 0 - 0 - expand|fill - expand|fill - - - - - 0 - yes - yes - - - - - 4 - yes - yes - - - - - Event Comparison - GRAMPS - GTK_WINDOW_TOPLEVEL - no - no - no - 350 - yes - GTK_WIN_POS_NONE + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + 0 + + + + + + 0 + False + True + GTK_PACK_END + + - - - no - 8 - yes + + + True + False + 0 - - - GTK_BUTTONBOX_END - 8 - yes + + + True + Event Comparison + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + - - - yes - yes - yes - gtk-apply - yes - yes + + + True + + + 5 + False + True + + + + + 0 + False + True + + - - - + + + True + False + 0 - - - yes - yes - yes - gtk-cancel - yes - yes + + + True + Filter + False + False + GTK_JUSTIFY_CENTER + False + False + 1 + 0.5 + 5 + 0 + + + 0 + False + False + + - - - - - - 0 - no - yes - GTK_PACK_END - - + + + True + True + -1 - - - no - 0 - yes + + + True + + + + + 0 + True + True + + + + + 0 + False + True + + + + + - - - Event Comparison - GTK_JUSTIFY_CENTER - no - 0.5 - 0.5 - 0 - 0 - yes - - - 0 - no - no - - - - - - yes - - - 5 - no - yes - - - - - 0 - no - yes - - - - - - no - 0 - yes - - - - Filter - GTK_JUSTIFY_CENTER - no - 1 - 0.5 - 5 - 0 - yes - - - 0 - no - no - - - - - - yes - 0 - yes - - - - yes - - - - - 0 - yes - yes - - - - - 0 - no - yes - - - - - 4 - yes - yes - - -