3542: Scratchpad does not remove objects when changing database

svn: r14546
This commit is contained in:
Benny Malengier 2010-03-01 12:52:57 +00:00
parent 4105b54984
commit 575a4bbd67
2 changed files with 42 additions and 11 deletions

View File

@ -948,33 +948,52 @@ class ScratchPadListView(object):
def database_changed(self,db):
self._db = db
# Note: delete event is emitted before the delete, so checking
# if valid on this is useless !
db_signals = (
'person-update',
'person-rebuild',
'family-update',
'family-delete',
'family-rebuild',
'source-update',
'source-rebuild',
'place-update',
'place-delete',
'place-rebuild',
'media-update',
'media-delete',
'media-rebuild',
'event-update',
'event-rebuild',
'repository-update',
'repository-rebuild'
'repository-rebuild',
'note-rebuild'
)
for signal in db_signals:
self._db.connect(signal,self.remove_invalid_objects)
self._db.connect('person-delete', gen_del_obj(self.delete_object, 'person-link'))
self._db.connect('source-delete', gen_del_obj(self.delete_object, 'source-link'))
self._db.connect('repository-delete', gen_del_obj(self.delete_object, 'repo-link'))
self._db.connect('event-delete', gen_del_obj(self.delete_object, 'pevent'))
self._db.connect('person-delete',
gen_del_obj(self.delete_object, 'person-link'))
self._db.connect('person-delete',
gen_del_obj(self.delete_object_ref, 'personref'))
self._db.connect('source-delete',
gen_del_obj(self.delete_object, 'source-link'))
self._db.connect('source-delete',
gen_del_obj(self.delete_object_ref, 'srcref'))
self._db.connect('repository-delete',
gen_del_obj(self.delete_object, 'repo-link'))
self._db.connect('event-delete',
gen_del_obj(self.delete_object, 'pevent'))
self._db.connect('event-delete',
gen_del_obj(self.delete_object_ref, 'eventref'))
self._db.connect('media-delete',
gen_del_obj(self.delete_object, 'mediaobj'))
self._db.connect('media-delete',
gen_del_obj(self.delete_object_ref, 'mediaref'))
self._db.connect('place-delete',
gen_del_obj(self.delete_object, 'place-link'))
self._db.connect('note-delete',
gen_del_obj(self.delete_object, 'note-link'))
# family-delete not needed, cannot be dragged!
self.remove_invalid_objects()
@ -996,6 +1015,16 @@ class ScratchPadListView(object):
if data[2] in handle_list:
model.remove(o.iter)
def delete_object_ref(self, handle_list, link_type):
model = self._widget.get_model()
if model:
for o in model:
if o[0] == link_type:
data = o[1]._obj.get_reference_handle()
if data in handle_list:
model.remove(o.iter)
# Method to manage the wrapper classes.
def register_wrapper_classes(self):
@ -1153,7 +1182,6 @@ class ScratchPadListView(object):
# remember time for double drop workaround.
self._previous_drop_time = realTime
# proxy methods to provide access to the real widget functions.
def set_model(self,model=None):
@ -1237,6 +1265,10 @@ class ScratchPadWindow(ManagedWindow.ManagedWindow):
self.object_list.set_model(ScratchPadWindow.otree)
#Database might have changed, objects might have been removed,
#we need to reevaluate if all data is valid
self.object_list.remove_invalid_objects()
self.top.connect_signals({
"on_close_scratchpad" : self.close,
"on_clear_clicked": self.on_clear_clicked,

View File

@ -8,10 +8,10 @@
<property name="default_width">500</property>
<property name="default_height">300</property>
<property name="type_hint">dialog</property>
<signal name="delete_event" handler="on_scratch_pad_delete_event"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow86">
<property name="visible">True</property>
@ -58,7 +58,6 @@
<property name="can_default">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="on_clear_all_clicked"/>
</object>
<packing>
<property name="expand">False</property>