ProgressMeter additions
svn: r5008
This commit is contained in:
parent
3816790b4f
commit
ca4856adee
@ -1,3 +1,9 @@
|
||||
2005-08-03 Don Allingham <don@gramps-project.org>
|
||||
* src/GrampsDbBase.py: provide functions for indicating the number
|
||||
of items in each table
|
||||
* src/Check.py: Add ProgressMeter calls
|
||||
* src/Utils.py: Define new ProgressMeter class
|
||||
|
||||
2005-08-02 Alex Roitman <shura@gramps-project.org>
|
||||
* src/Bookmarks.py: Convert from CList to ListModel and TreeView;
|
||||
Remove Cancel and OK buttons, Add Close button; make all changes
|
||||
|
@ -783,6 +783,36 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
"""
|
||||
return len(self.person_map)
|
||||
|
||||
def get_number_of_families(self):
|
||||
"""
|
||||
Returns the number of families currently in the databse.
|
||||
"""
|
||||
return len(self.family_map)
|
||||
|
||||
def get_number_of_events(self):
|
||||
"""
|
||||
Returns the number of events currently in the databse.
|
||||
"""
|
||||
return len(self.event_map)
|
||||
|
||||
def get_number_of_places(self):
|
||||
"""
|
||||
Returns the number of places currently in the databse.
|
||||
"""
|
||||
return len(self.place_map)
|
||||
|
||||
def get_number_of_sources(self):
|
||||
"""
|
||||
Returns the number of sources currently in the databse.
|
||||
"""
|
||||
return len(self.source_map)
|
||||
|
||||
def get_number_of_media_objects(self):
|
||||
"""
|
||||
Returns the number of media objects currently in the databse.
|
||||
"""
|
||||
return len(self.media_map)
|
||||
|
||||
def get_person_handles(self,sort_handles=True):
|
||||
"""
|
||||
Returns a list of database handles, one handle for each Person in
|
||||
|
@ -810,3 +810,61 @@ def strip_context(msgid,sep='|'):
|
||||
if msgval == msgid and sep_idx != -1:
|
||||
msgval = msgid[sep_idx+1:]
|
||||
return msgval
|
||||
|
||||
class ProgressMeter:
|
||||
"""
|
||||
Progress meter class for GRAMPS.
|
||||
"""
|
||||
def __init__(self,title,header):
|
||||
"""
|
||||
Specify the title and the current pass header.
|
||||
"""
|
||||
self.ptop = gtk.Dialog()
|
||||
self.ptop.set_has_separator(False)
|
||||
self.ptop.set_title(title)
|
||||
self.ptop.set_border_width(12)
|
||||
self.ptop.vbox.set_spacing(10)
|
||||
lbl = gtk.Label('<span size="larger" weight="bold">%s</span>' % title)
|
||||
lbl.set_use_markup(True)
|
||||
self.lbl = gtk.Label(header)
|
||||
self.lbl.set_use_markup(True)
|
||||
self.ptop.vbox.add(lbl)
|
||||
self.ptop.vbox.add(self.lbl)
|
||||
self.ptop.vbox.set_border_width(24)
|
||||
self.pbar = gtk.ProgressBar()
|
||||
|
||||
self.ptop.set_size_request(350,125)
|
||||
self.ptop.vbox.add(self.pbar)
|
||||
self.ptop.show_all()
|
||||
|
||||
def set_pass(self,header,total):
|
||||
"""
|
||||
Reset for another pass. Provide a new header and define number
|
||||
of steps to be used.
|
||||
"""
|
||||
self.pbar_max = total
|
||||
self.pbar_index = 0.0
|
||||
self.lbl.set_text(header)
|
||||
self.pbar.set_fraction(0.0)
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
|
||||
def step(self):
|
||||
"""Click the progress bar over to the next value. Be paranoid
|
||||
and insure that it doesn't go over 100%."""
|
||||
self.pbar_index = self.pbar_index + 1.0
|
||||
if (self.pbar_index > self.pbar_max):
|
||||
self.pbar_index = self.pbar_max
|
||||
|
||||
val = self.pbar_index/self.pbar_max
|
||||
|
||||
self.pbar.set_text("%d of %d (%.1f%%)" % (self.pbar_index,self.pbar_max,(val*100)))
|
||||
self.pbar.set_fraction(val)
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
|
||||
def close(self):
|
||||
"""
|
||||
Close the progress meter
|
||||
"""
|
||||
self.ptop.destroy()
|
||||
|
@ -120,11 +120,16 @@ class CheckIntegrity:
|
||||
self.invalid_death_events = []
|
||||
self.invalid_place_references = []
|
||||
self.invalid_source_references = []
|
||||
self.progress = Utils.ProgressMeter('Checking database','')
|
||||
|
||||
def family_errors(self):
|
||||
return len(self.broken_parent_links) + len(self.broken_links) + len(self.empty_family) + len(self.duplicate_links)
|
||||
|
||||
def cleanup_duplicate_spouses(self):
|
||||
|
||||
self.progress.set_pass(_('Looking for duplicate spouses'),
|
||||
self.db.get_number_of_people())
|
||||
|
||||
cursor = self.db.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
@ -140,11 +145,17 @@ class CheckIntegrity:
|
||||
p.set_family_handle_list(new_list)
|
||||
self.db.commit_person(p,self.trans)
|
||||
data = cursor.next()
|
||||
self.progress.step()
|
||||
cursor.close()
|
||||
|
||||
def check_for_broken_family_links(self):
|
||||
# Check persons referenced by the family objects
|
||||
for family_handle in self.db.get_family_handles():
|
||||
|
||||
fhandle_list = self.db.get_family_handles()
|
||||
self.progress.set_pass(_('Looking for broken family links'),
|
||||
len(fhandle_list) + self.db.get_number_of_people())
|
||||
|
||||
for family_handle in fhandle_list:
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
father_handle = family.get_father_handle()
|
||||
mother_handle = family.get_mother_handle()
|
||||
@ -193,6 +204,7 @@ class CheckIntegrity:
|
||||
family.remove_child_handle(child_handle)
|
||||
self.db.commit_family(family,self.trans)
|
||||
self.broken_links.append((child_handle,family_handle))
|
||||
self.progress.step()
|
||||
|
||||
# Check persons membership in referenced families
|
||||
for person_handle in self.db.get_person_handles():
|
||||
@ -227,8 +239,13 @@ class CheckIntegrity:
|
||||
person.remove_family_handle(family_handle)
|
||||
self.db.commit_person(person,self.trans)
|
||||
self.broken_links.append((person_handle,family_handle))
|
||||
self.progress.step()
|
||||
|
||||
def cleanup_missing_photos(self,cl=0):
|
||||
|
||||
self.progress.set_pass(_('Looking for unused objects'),
|
||||
len(self.db.get_media_object_handles()))
|
||||
|
||||
missmedia_action = 0
|
||||
#-------------------------------------------------------------------------
|
||||
def remove_clicked():
|
||||
@ -318,9 +335,17 @@ class CheckIntegrity:
|
||||
leave_clicked()
|
||||
elif missmedia_action == 3:
|
||||
select_clicked()
|
||||
self.progress.step()
|
||||
|
||||
def cleanup_empty_families(self,automatic):
|
||||
for family_handle in self.db.get_family_handles():
|
||||
|
||||
fhandle_list = self.db.get_family_handles()
|
||||
|
||||
self.progress.set_pass(_('Looking for empty families'),
|
||||
len(fhandle_list))
|
||||
for family_handle in fhandle_list:
|
||||
self.progress.step()
|
||||
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
father_handle = family.get_father_handle()
|
||||
mother_handle = family.get_mother_handle()
|
||||
@ -352,7 +377,12 @@ class CheckIntegrity:
|
||||
self.db.remove_family(family_handle,self.trans)
|
||||
|
||||
def check_parent_relationships(self):
|
||||
for family_handle in self.db.get_family_handles():
|
||||
|
||||
fhandle_list = self.db.get_family_handles()
|
||||
self.progress.set_pass(_('Looking for broken parent relationships'),
|
||||
len(fhandle_list))
|
||||
|
||||
for family_handle in fhandle_list:
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
mother_handle = family.get_mother_handle()
|
||||
father_handle = family.get_father_handle()
|
||||
@ -400,7 +430,12 @@ class CheckIntegrity:
|
||||
self.db.commit_family(family,self.trans)
|
||||
|
||||
def check_events(self):
|
||||
self.progress.set_pass(_('Looking for event problems'),
|
||||
self.db.get_number_of_people())
|
||||
|
||||
for key in self.db.get_person_handles(sort_handles=False):
|
||||
self.progress.step()
|
||||
|
||||
person = self.db.get_person_from_handle(key)
|
||||
birth_handle = person.get_birth_handle()
|
||||
if birth_handle:
|
||||
@ -441,7 +476,12 @@ class CheckIntegrity:
|
||||
self.invalid_events.append(key)
|
||||
|
||||
def check_place_references(self):
|
||||
for key in self.db.get_event_handles():
|
||||
elist = self.db.get_event_handles()
|
||||
|
||||
self.progress.set_pass(_('Looking for place reference problems'),
|
||||
len(elist))
|
||||
|
||||
for key in elist:
|
||||
event = self.db.get_event_from_handle(key)
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
@ -455,9 +495,18 @@ class CheckIntegrity:
|
||||
def check_source_references(self):
|
||||
known_handles = self.db.get_source_handles()
|
||||
|
||||
total = self.db.get_number_of_people() + self.db.get_number_of_families() + \
|
||||
self.db.get_number_of_events() + self.db.get_number_of_places() + \
|
||||
self.db.get_number_of_media_objects() + \
|
||||
self.db.get_number_of_sources()
|
||||
|
||||
self.progress.set_pass(_('Looking for source reference problems'),
|
||||
total)
|
||||
|
||||
cursor = self.db.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
person = RelLib.Person()
|
||||
person.unserialize(info)
|
||||
@ -477,6 +526,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_family_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
family = RelLib.Family()
|
||||
family.unserialize(info)
|
||||
@ -496,6 +546,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_place_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
place = RelLib.Place()
|
||||
place.unserialize(info)
|
||||
@ -515,6 +566,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_source_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
source = RelLib.Source()
|
||||
source.unserialize(info)
|
||||
@ -534,6 +586,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_media_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
obj = RelLib.MediaObject()
|
||||
obj.unserialize(info)
|
||||
@ -553,6 +606,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_event_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
event = RelLib.Event()
|
||||
event.unserialize(info)
|
||||
@ -570,6 +624,7 @@ class CheckIntegrity:
|
||||
cursor.close()
|
||||
|
||||
def build_report(self,cl=0):
|
||||
self.progress.close()
|
||||
bad_photos = len(self.bad_photo)
|
||||
replaced_photos = len(self.replaced_photo)
|
||||
removed_photos = len(self.removed_photo)
|
||||
|
Loading…
Reference in New Issue
Block a user