3542: Scratchpad does not remove objects when changing database
svn: r14546
This commit is contained in:
		| @@ -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, | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user