Gallery drag/drop functionality
svn: r1169
This commit is contained in:
@@ -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")
|
||||
)
|
||||
|
||||
|
||||
@@ -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.")
|
||||
)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user