* src/DisplayModels.py: use dirty flag to only draw when requested
* src/PageView.py: use dirty flag to only draw when requested * src/PeopleView.py: use dirty flag to only draw when requested * src/PeopleModel.py: provide simple caching * src/ViewManager.py: control dirty flags svn: r5803
This commit is contained in:
parent
37239cd822
commit
24e095c818
@ -1,3 +1,10 @@
|
|||||||
|
2006-01-19 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/DisplayModels.py: use dirty flag to only draw when requested
|
||||||
|
* src/PageView.py: use dirty flag to only draw when requested
|
||||||
|
* src/PeopleView.py: use dirty flag to only draw when requested
|
||||||
|
* src/PeopleModel.py: provide simple caching
|
||||||
|
* src/ViewManager.py: control dirty flags
|
||||||
|
|
||||||
2006-01-19 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
2006-01-19 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
||||||
* src/ObjectSelector/_PersonFilterFrame.py, src/ObjectSelector/_PersonFrame.py
|
* src/ObjectSelector/_PersonFilterFrame.py, src/ObjectSelector/_PersonFrame.py
|
||||||
src/ObjectSelector/_PersonTreeFrame.py: filters in Person view just about work.
|
src/ObjectSelector/_PersonTreeFrame.py: filters in Person view just about work.
|
||||||
|
@ -71,6 +71,8 @@ class BaseModel(gtk.GenericTreeModel):
|
|||||||
|
|
||||||
def __init__(self,db,scol=0,order=gtk.SORT_ASCENDING,tooltip_column=None):
|
def __init__(self,db,scol=0,order=gtk.SORT_ASCENDING,tooltip_column=None):
|
||||||
gtk.GenericTreeModel.__init__(self)
|
gtk.GenericTreeModel.__init__(self)
|
||||||
|
self.prev_handle = None
|
||||||
|
self.prev_data = None
|
||||||
self.set_property("leak_references",False)
|
self.set_property("leak_references",False)
|
||||||
self.db = db
|
self.db = db
|
||||||
self.sort_func = self.smap[scol]
|
self.sort_func = self.smap[scol]
|
||||||
@ -161,7 +163,10 @@ class BaseModel(gtk.GenericTreeModel):
|
|||||||
|
|
||||||
def on_get_value(self,node,col):
|
def on_get_value(self,node,col):
|
||||||
try:
|
try:
|
||||||
return self.fmap[col](self.map(str(node)))
|
if node != self.prev_handle:
|
||||||
|
self.prev_data = self.map(str(node))
|
||||||
|
self.prev_handle = node
|
||||||
|
return self.fmap[col](self.prev_data)
|
||||||
except:
|
except:
|
||||||
return u''
|
return u''
|
||||||
|
|
||||||
|
@ -2652,7 +2652,7 @@ class FilterWidget:
|
|||||||
|
|
||||||
def get_filter( self):
|
def get_filter( self):
|
||||||
print "get_filter"
|
print "get_filter"
|
||||||
print self.DataFilter.flist[0]
|
#print self.DataFilter.flist[0]
|
||||||
return self.DataFilter
|
return self.DataFilter
|
||||||
|
|
||||||
def inverted( self):
|
def inverted( self):
|
||||||
|
@ -47,6 +47,20 @@ class PageView:
|
|||||||
self.ui = '<ui></ui>'
|
self.ui = '<ui></ui>'
|
||||||
self.dbstate.connect('no-database',self.disable_action_group)
|
self.dbstate.connect('no-database',self.disable_action_group)
|
||||||
self.dbstate.connect('database-changed',self.enable_action_group)
|
self.dbstate.connect('database-changed',self.enable_action_group)
|
||||||
|
self.dirty = True
|
||||||
|
self.active = False
|
||||||
|
|
||||||
|
def set_active(self):
|
||||||
|
self.active = True
|
||||||
|
if self.dirty:
|
||||||
|
print self,"set active dirty"
|
||||||
|
self.build_tree()
|
||||||
|
|
||||||
|
def set_inactive(self):
|
||||||
|
self.active = False
|
||||||
|
|
||||||
|
def build_tree(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def navigation_type(self):
|
def navigation_type(self):
|
||||||
return NAVIGATION_NONE
|
return NAVIGATION_NONE
|
||||||
@ -405,33 +419,53 @@ class ListView(PageView):
|
|||||||
index += 1
|
index += 1
|
||||||
|
|
||||||
def build_tree(self):
|
def build_tree(self):
|
||||||
self.model = self.make_model(self.dbstate.db,self.sort_col)
|
if self.active:
|
||||||
self.list.set_model(self.model)
|
self.model = self.make_model(self.dbstate.db,self.sort_col)
|
||||||
self.selection = self.list.get_selection()
|
self.list.set_model(self.model)
|
||||||
|
self.selection = self.list.get_selection()
|
||||||
if self.model.tooltip_column != None:
|
|
||||||
self.tooltips = TreeTips.TreeTips(self.list,
|
|
||||||
self.model.tooltip_column,True)
|
|
||||||
|
|
||||||
|
if self.model.tooltip_column != None:
|
||||||
|
self.tooltips = TreeTips.TreeTips(self.list,
|
||||||
|
self.model.tooltip_column,True)
|
||||||
|
self.dirty = False
|
||||||
|
else:
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
def change_db(self,db):
|
def change_db(self,db):
|
||||||
for sig in self.signal_map:
|
for sig in self.signal_map:
|
||||||
db.connect(sig, self.signal_map[sig])
|
db.connect(sig, self.signal_map[sig])
|
||||||
self.model = self.make_model(self.dbstate.db,0)
|
self.model = self.make_model(self.dbstate.db,0)
|
||||||
self.list.set_model(self.model)
|
self.list.set_model(self.model)
|
||||||
self.build_columns()
|
self.build_columns()
|
||||||
self.build_tree()
|
if self.active:
|
||||||
|
self.build_tree()
|
||||||
|
else:
|
||||||
|
print self,"change_db dirty"
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
def row_add(self,handle_list):
|
def row_add(self,handle_list):
|
||||||
for handle in handle_list:
|
if self.active:
|
||||||
self.model.add_row_by_handle(handle)
|
for handle in handle_list:
|
||||||
|
self.model.add_row_by_handle(handle)
|
||||||
|
else:
|
||||||
|
print self,"row add dirty"
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
def row_update(self,handle_list):
|
def row_update(self,handle_list):
|
||||||
for handle in handle_list:
|
if self.active:
|
||||||
self.model.update_row_by_handle(handle)
|
for handle in handle_list:
|
||||||
|
self.model.update_row_by_handle(handle)
|
||||||
|
else:
|
||||||
|
print self,"row update dirty"
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
def row_delete(self,handle_list):
|
def row_delete(self,handle_list):
|
||||||
for handle in handle_list:
|
if self.active:
|
||||||
self.model.delete_row_by_handle(handle)
|
for handle in handle_list:
|
||||||
|
self.model.delete_row_by_handle(handle)
|
||||||
|
else:
|
||||||
|
print self,"row delete dirty"
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
def define_actions(self):
|
def define_actions(self):
|
||||||
"""
|
"""
|
||||||
|
@ -112,8 +112,10 @@ class PeopleModel(gtk.GenericTreeModel):
|
|||||||
self.sortnames = {}
|
self.sortnames = {}
|
||||||
self.marker_color_column = 11
|
self.marker_color_column = 11
|
||||||
self.tooltip_column = 12
|
self.tooltip_column = 12
|
||||||
|
self.prev_handle = None
|
||||||
|
self.prev_data = None
|
||||||
self.rebuild_data(data_filter)
|
self.rebuild_data(data_filter)
|
||||||
|
|
||||||
def rebuild_data(self,data_filter=None,skip=None):
|
def rebuild_data(self,data_filter=None,skip=None):
|
||||||
self.calculate_data(data_filter,skip)
|
self.calculate_data(data_filter,skip)
|
||||||
self.assign_data()
|
self.assign_data()
|
||||||
@ -236,7 +238,10 @@ class PeopleModel(gtk.GenericTreeModel):
|
|||||||
# return values for 'data' row, calling a function
|
# return values for 'data' row, calling a function
|
||||||
# according to column_defs table
|
# according to column_defs table
|
||||||
try:
|
try:
|
||||||
return COLUMN_DEFS[col][COLUMN_DEF_LIST](self,self.db.get_raw_person_data(str(node)),node)
|
if node != self.prev_handle:
|
||||||
|
self.prev_data = self.db.get_raw_person_data(str(node))
|
||||||
|
self.prev_handle = node
|
||||||
|
return COLUMN_DEFS[col][COLUMN_DEF_LIST](self,self.prev_data,node)
|
||||||
except:
|
except:
|
||||||
print "".join(traceback.format_exception(*sys.exc_info()))
|
print "".join(traceback.format_exception(*sys.exc_info()))
|
||||||
return u'error'
|
return u'error'
|
||||||
|
@ -231,6 +231,12 @@ class PersonView(PageView.PersonNavView):
|
|||||||
self.generic_filter_widget.apply_filter()
|
self.generic_filter_widget.apply_filter()
|
||||||
|
|
||||||
def goto_active_person(self,obj=None):
|
def goto_active_person(self,obj=None):
|
||||||
|
import time
|
||||||
|
t = time.time()
|
||||||
|
self.goto_active_person_2(None)
|
||||||
|
print time.time() - t
|
||||||
|
|
||||||
|
def goto_active_person_2(self,obj=None):
|
||||||
"""
|
"""
|
||||||
Callback (and usable function) that selects the active person
|
Callback (and usable function) that selects the active person
|
||||||
in the display tree.
|
in the display tree.
|
||||||
@ -319,14 +325,17 @@ class PersonView(PageView.PersonNavView):
|
|||||||
Creates a new PeopleModel instance. Essentially creates a complete
|
Creates a new PeopleModel instance. Essentially creates a complete
|
||||||
rebuild of the data.
|
rebuild of the data.
|
||||||
"""
|
"""
|
||||||
self.model = PeopleModel.PeopleModel(
|
if self.active:
|
||||||
self.dbstate.db, self.generic_filter_widget.get_filter(), self.generic_filter_widget.inverted())
|
self.model = PeopleModel.PeopleModel(
|
||||||
self.tree.set_model(self.model)
|
self.dbstate.db, self.generic_filter_widget.get_filter(), self.generic_filter_widget.inverted())
|
||||||
|
self.tree.set_model(self.model)
|
||||||
if self.model.tooltip_column != None:
|
|
||||||
self.tooltips = TreeTips.TreeTips(self.tree,self.model.tooltip_column,True)
|
|
||||||
self.build_columns()
|
|
||||||
|
|
||||||
|
if self.model.tooltip_column != None:
|
||||||
|
self.tooltips = TreeTips.TreeTips(self.tree,self.model.tooltip_column,True)
|
||||||
|
self.build_columns()
|
||||||
|
self.dirty = False
|
||||||
|
else:
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
def filter_toggle(self,obj):
|
def filter_toggle(self,obj):
|
||||||
if obj.get_active():
|
if obj.get_active():
|
||||||
|
@ -466,22 +466,28 @@ class ViewManager:
|
|||||||
index += 1
|
index += 1
|
||||||
self.bbox.pack_start(button,False)
|
self.bbox.pack_start(button,False)
|
||||||
|
|
||||||
|
self.active_page = self.pages[0]
|
||||||
|
self.active_page.set_active()
|
||||||
|
|
||||||
def change_page(self,obj,page,num=-1):
|
def change_page(self,obj,page,num=-1):
|
||||||
if num == -1:
|
if num == -1:
|
||||||
num = self.notebook.get_current_page()
|
num = self.notebook.get_current_page()
|
||||||
|
|
||||||
if self.state.open == True:
|
if self.state.open == True:
|
||||||
|
|
||||||
for mergeid in self.merge_ids:
|
for mergeid in self.merge_ids:
|
||||||
self.uimanager.remove_ui(mergeid)
|
self.uimanager.remove_ui(mergeid)
|
||||||
|
|
||||||
if self.active_page:
|
if self.active_page:
|
||||||
|
self.active_page.set_inactive()
|
||||||
groups = self.active_page.get_actions()
|
groups = self.active_page.get_actions()
|
||||||
for grp in groups:
|
for grp in groups:
|
||||||
self.uimanager.remove_action_group(grp)
|
self.uimanager.remove_action_group(grp)
|
||||||
|
|
||||||
if len(self.pages) > 0:
|
if len(self.pages) > 0:
|
||||||
self.active_page = self.pages[num]
|
self.active_page = self.pages[num]
|
||||||
|
self.active_page.set_active()
|
||||||
|
|
||||||
old_nav = self.navigation_type[self.prev_nav]
|
old_nav = self.navigation_type[self.prev_nav]
|
||||||
if old_nav[0] != None:
|
if old_nav[0] != None:
|
||||||
old_nav[0].disable()
|
old_nav[0].disable()
|
||||||
|
Loading…
Reference in New Issue
Block a user