From: Kees B. <kee...@xs...> - 2008-12-12 13:17:54
|
On Friday 12 December 2008, Benny Malengier wrote: > 2008/12/12 Kees Bakker <kee...@xs...> > > > Hi, > > > > While I was running the "has common ancestors with" filter rule, I > > realized that gramps can be totally dead for a long time. A user > > may not know what is going on, and whether gramps makes any > > progress at all. This filter, and perhaps other filters too, can take > > several minutes. > > > > Can we (or should we) allow a filter to display progress bar updates? > > Of course the caller of the filter only knows the context, so I think > > the caller must (optionally) create a new Utils.ProgressMeter. And > > the filter can call step(). > > > > How about the following? > > > > class GenericFilter: > > """Filter class that consists of several rules.""" > > > > logical_functions = ['or', 'and', 'xor', 'one'] > > > > def __init__(self, source=None, progress=None): > > ... > > def check_foo(self, db, id_list): > > ... > > if progress: > > progress.step() > > if not rule.apply(db, person): > > val = False > > break > > > > This latter piece of code is found several times in > > src/Filters/_GenericFilter.py so I don't know if there is a better > > place for this. > > > The idea of progress indication is a good idea. OK. I'll give it try. But I was hoping someone would jump in with a definite solution. :-) > For the practical implementation I have no clue, but some points: > 1. for a progressmeter you need to know beforehand an estimate of the time, > no? I don't think that is available This is doable, all the information is there at the right place. The filter is given the list of items (id_list most of the time). So the caller knows the "length" of the progress bar. And the filter needs to make a step for each element in the list. A larger extract from _GenericFilter shows it. for handle in id_list: person = self.find_from_handle(db, handle) val = True ==> if progress: progress.step() for rule in flist: if not rule.apply(db, person): val = False break if val != self.invert: final_list.append(handle) > 2. perhaps is suffices to change the icon and have it rotate like in a > webbrowser? That's an alternative if the above doesn't work. Except, the user still has no clue how long Gramps will be busy. -- |