diff --git a/ChangeLog b/ChangeLog index 6faf4fa3b..a5cf963d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-04-01 Richard Taylor + * src/plugins/ScratchPad.py (ScratchPadListView.register_wrapper_classes, + ScratchPadName): added support for Names + * src/EditPerson.py (EditPerson.__init__, EditPerson.name_drag_data_get, + EditPerson.name_drag_begin, EditPerson.name_drag_data_received): added dnd for Names + * src/DdTargets.py (_DdTargets.__init__, _DdTargets.all_gramps_types, + _DdTargets.all_gramps_targets): added Names as dnd target. + 2005-04-01 Richard Taylor * src/plugins/ScratchPad.py: changed pickle to cPickle. cPickle is much faster. * src/EditPerson.py: changed pickle to cPickle. cPickle is much faster. diff --git a/src/DdTargets.py b/src/DdTargets.py index 4c91ce729..c7fcb9588 100644 --- a/src/DdTargets.py +++ b/src/DdTargets.py @@ -102,6 +102,7 @@ class _DdTargets(object): self.ATTRIBUTE = _DdType(self,'pattr') self.ADDRESS = _DdType(self,'paddr') self.SOURCEREF = _DdType(self,'srcref') + self.NAME = _DdType(self,'name') self.FAMILY_EVENT = _DdType(self,'fevent') self.FAMILY_ATTRIBUTE = _DdType(self,'fattr') @@ -160,6 +161,7 @@ class _DdTargets(object): self.ATTRIBUTE.drag_type, self.ADDRESS.drag_type, self.SOURCEREF.drag_type, + self.NAME.drag_type, self.FAMILY_EVENT.drag_type, self.FAMILY_ATTRIBUTE.drag_type) @@ -182,6 +184,7 @@ class _DdTargets(object): self.ATTRIBUTE.target(), self.ADDRESS.target(), self.SOURCEREF.target(), + self.NAME.target(), self.FAMILY_EVENT.target(), self.FAMILY_ATTRIBUTE.target()) diff --git a/src/EditPerson.py b/src/EditPerson.py index 5b774049d..17df6b731 100644 --- a/src/EditPerson.py +++ b/src/EditPerson.py @@ -400,6 +400,17 @@ class EditPerson: self.flowed.set_active(1) Utils.bold_label(self.notes_label) + self.name_list.drag_dest_set(gtk.DEST_DEFAULT_ALL, + [DdTargets.NAME.target()], + ACTION_COPY) + self.name_list.drag_source_set(BUTTON1_MASK, + [DdTargets.NAME.target()], + ACTION_COPY) + self.name_list.connect('drag_data_get', self.name_drag_data_get) + self.name_list.connect('drag_begin', self.name_drag_begin) + self.name_list.connect('drag_data_received', + self.name_drag_data_received) + self.event_list.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.EVENT.target()], ACTION_COPY) @@ -807,7 +818,47 @@ class EditPerson: def set_lds_seal(self,obj): self.lds_sealing.set_status(obj.get_active()) - + + def name_drag_data_get(self,widget, context, sel_data, info, time): + name = self.ntree.get_selected_objects() + + bits_per = 8; # we're going to pass a string + pickled = pickle.dumps(name[0]); + data = str((DdTargets.NAME.drag_type,self.person.get_handle(),pickled)); + sel_data.set(sel_data.target, bits_per, data) + + def name_drag_begin(self, context, a): + return + icon = self.ntree.get_icon() + t = self.ntree.tree + (x,y) = icon.get_size() + mask = gtk.gdk.Pixmap(self.window.window,x,y,1) + mask.draw_rectangle(t.get_style().white_gc, True, 0,0,x,y) + t.drag_source_set_icon(t.get_colormap(),icon,mask) + + def name_drag_data_received(self,widget,context,x,y,sel_data,info,time): + row = self.ntree.get_row_at(x,y) + + if sel_data and sel_data.data: + exec 'data = %s' % sel_data.data + exec 'mytype = "%s"' % data[0] + exec 'person = "%s"' % data[1] + if mytype != DdTargets.NAME.drag_type: + return + elif person == self.person.get_handle(): + self.move_element(self.nlist,self.ntree.get_selected_row(),row) + else: + foo = pickle.loads(data[2]); + for src in foo.get_source_references(): + base_handle = src.get_base_handle() + newbase = self.db.get_source_from_handle(base_handle) + src.set_base_handle(newbase.get_handle()) + + self.nlist.insert(row,foo) + + self.lists_changed = True + self.redraw_name_list() + def ev_drag_data_received(self,widget,context,x,y,sel_data,info,time): row = self.etree.get_row_at(x,y) diff --git a/src/plugins/ScratchPad.py b/src/plugins/ScratchPad.py index 5111e5076..850e075bf 100644 --- a/src/plugins/ScratchPad.py +++ b/src/plugins/ScratchPad.py @@ -351,6 +351,42 @@ class ScratchPadSourceRef(ScratchPadGrampsTypeWrapper): return s +class ScratchPadName(ScratchPadGrampsTypeWrapper): + + DROP_TARGETS = [DdTargets.NAME] + DRAG_TARGET = DdTargets.NAME + ICON = BLANK_PIC + + def __init__(self,db,obj): + ScratchPadGrampsTypeWrapper.__init__(self,db,obj) + self._type = _("Name") + self._title = self._obj.get_name() + self._value = self._obj.get_type() + + + def tooltip(self): + global escape + + s = "%s\n\n"\ + "\t%s:\t%s\n"\ + "\t%s:\t%s\n" % ( + _("Name"), + _("Name"),escape(self._obj.get_name()), + _("Type"),escape(self._obj.get_type())) + + if len(self._obj.get_source_references()) > 0: + psrc_ref = self._obj.get_source_references()[0] + psrc_id = psrc_ref.get_base_handle() + psrc = self._db.get_source_from_handle(psrc_id) + + s += "\n%s\n\n"\ + "\t%s:\t%s\n" % ( + _("Primary source"), + _("Name"), + escape(short(psrc.get_title()))) + + return s + class ScratchPadText(ScratchPadWrapper): DROP_TARGETS = DdTargets.all_text() @@ -460,6 +496,7 @@ class ScratchPadListView: self.register_wrapper_class(ScratchPadAttribute) self.register_wrapper_class(ScratchPadFamilyAttribute) self.register_wrapper_class(ScratchPadSourceRef) + self.register_wrapper_class(ScratchPadName) self.register_wrapper_class(ScratchPadText) def register_wrapper_class(self,wrapper_class):