diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index d584357c3..666f4a2c2 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,12 @@ +2005-03-29 Richard Taylor + * src/DdTargets.py: add family targets to target list functions + * src/Marriage.py (at_dest_drag_data_received, ev_dest_drag_data_received, + ev_source_drag_data_get, at_source_drag_data_get): fixed dnd methods and + added use of DdTarget types. + * src/plugins/ScratchPad.py (generate_family_event_tooltip, + generate_family_event_tooltip, redraw_object_list): added support for + family events and attributes. + 2005-03-27 Alex Roitman * src/MergeData.py: Fixes for places and sources. * src/PlaceView.py (build_context_menu): Typo. diff --git a/gramps2/src/DdTargets.py b/gramps2/src/DdTargets.py index 816fc54bb..b47adf300 100644 --- a/gramps2/src/DdTargets.py +++ b/gramps2/src/DdTargets.py @@ -152,7 +152,9 @@ class _DdTargets(object): self.EVENT.drag_type, self.ATTRIBUTE.drag_type, self.ADDRESS.drag_type, - self.SOURCEREF.drag_type) + self.SOURCEREF.drag_type, + self.FAMILY_EVENT.drag_type, + self.FAMILY_ATTRIBUTE.drag_type) def all_text_targets(self): """return a list of all the targets that could be used @@ -172,7 +174,9 @@ class _DdTargets(object): self.EVENT.target(), self.ATTRIBUTE.target(), self.ADDRESS.target(), - self.SOURCEREF.target()) + self.SOURCEREF.target(), + self.FAMILY_EVENT.target(), + self.FAMILY_ATTRIBUTE.target()) def all_targets(self): """return a list of all the known targets.""" diff --git a/gramps2/src/Marriage.py b/gramps2/src/Marriage.py index 6cf6d7c09..f7169096e 100644 --- a/gramps2/src/Marriage.py +++ b/gramps2/src/Marriage.py @@ -452,21 +452,26 @@ class Marriage: exec 'data = %s' % selection_data.data exec 'mytype = "%s"' % data[0] exec 'family = "%s"' % data[1] - if mytype != 'fevent': + + if mytype != DdTargets.FAMILY_EVENT.drag_type: return - elif family == self.family.get_handle(): + + foo = pickle.loads(data[2]); + + if family == self.family.get_handle() and \ + foo.get_handle() in self.elist: self.move_element(self.elist,self.etree.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) + src.set_base_handle(newbase.get_handle()) place = foo.get_place_handle() if place: - foo.set_place_handle(self.db.get_place_from_handle(place.get_handle())) - self.elist.insert(row,foo) + foo.set_place_handle( + self.db.get_place_from_handle(place.get_handle()).get_handle()) + self.elist.insert(row,foo.get_handle()) self.lists_changed = 1 self.redraw_event_list() @@ -476,7 +481,8 @@ class Marriage: bits_per = 8; # we're going to pass a string pickled = pickle.dumps(ev[0]); - data = str(('fevent',self.family.get_handle(),pickled)); + data = str((DdTargets.FAMILY_EVENT.drag_type, + self.family.get_handle(),pickled)); selection_data.set(selection_data.target, bits_per, data) def at_dest_drag_data_received(self,widget,context,x,y,selection_data,info,time): @@ -485,16 +491,21 @@ class Marriage: exec 'data = %s' % selection_data.data exec 'mytype = "%s"' % data[0] exec 'family = "%s"' % data[1] - if mytype != 'fevent': + + if mytype != DdTargets.FAMILY_ATTRIBUTE.drag_type: return - elif family == self.family.get_handle(): - self.move_element(self.elist,self.etree.get_selected_row(),row) + + foo = pickle.loads(data[2]); + + if family == self.family.get_handle() and \ + foo in self.alist: + self.move_element(self.alist,self.atree.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) + src.set_base_handle(newbase.get_handle()) self.alist.insert(row,foo) self.lists_changed = 1 @@ -505,7 +516,8 @@ class Marriage: bits_per = 8; # we're going to pass a string pickled = pickle.dumps(ev[0]); - data = str(('fattr',self.family.get_handle(),pickled)); + data = str((DdTargets.FAMILY_ATTRIBUTE.drag_type, + self.family.get_handle(),pickled)); selection_data.set(selection_data.target, bits_per, data) def update_lists(self): diff --git a/gramps2/src/plugins/ScratchPad.py b/gramps2/src/plugins/ScratchPad.py index f2c51b61f..e686aa8c1 100644 --- a/gramps2/src/plugins/ScratchPad.py +++ b/gramps2/src/plugins/ScratchPad.py @@ -257,9 +257,11 @@ class ScratchPadWindow: for obj in ScratchPadWindow.olist: obj_targets = obj['targets'] + # union with gramps_types if len([target for target \ in obj_targets if DdTargets.is_gramps_type(target)]) > 0: + exec 'unpack_data = %s' % obj['data'] exec 'mytype = "%s"' % unpack_data[0] @@ -274,13 +276,16 @@ class ScratchPadWindow: data.get_date(), location, self.generate_addr_tooltip(data)],obj) - elif mytype == DdTargets.EVENT.drag_type: node = self.otree.add([_("Event"), const.display_pevent(data.get_name()), data.get_description(), self.generate_event_tooltip(data)],obj) - + elif mytype == DdTargets.FAMILY_EVENT.drag_type: + node = self.otree.add([_("Family Event"), + const.display_fevent(data.get_name()), + data.get_description(), + self.generate_family_event_tooltip(data)],obj) elif mytype == DdTargets.URL.drag_type: node = self.otree.add([_("Url"), data.get_path(), @@ -291,6 +296,11 @@ class ScratchPadWindow: const.display_pattr(data.get_type()), data.get_value(), self.generate_pattr_tooltip(data)],obj) + elif mytype == DdTargets.FAMILY_ATTRIBUTE.drag_type: + node = self.otree.add([_("Family Attribute"), + const.display_fattr(data.get_type()), + data.get_value(), + self.generate_fattr_tooltip(data)],obj) elif mytype == DdTargets.SOURCEREF.drag_type: base = self.db.get_source_from_handle(data.get_base_handle()) node = self.otree.add([_("SourceRef"), @@ -301,6 +311,7 @@ class ScratchPadWindow: # Union with text targets elif len([target for target \ in obj_targets if DdTargets.is_text_type(target)]) > 0: + node = self.otree.add([_("Text"), "", obj['data'], @@ -344,6 +355,36 @@ class ScratchPadWindow: return s + + def generate_family_event_tooltip(self,event): + global escape + + s = "%s\n\n"\ + "\t%s:\t%s\n"\ + "\t%s:\t%s\n"\ + "\t%s:\t%s\n"\ + "\t%s:\t%s\n"\ + "\t%s:\t%s\n" % ( + _("Family Event"), + _("Type"),escape(const.display_fevent(event.get_name())), + _("Date"),escape(event.get_date()), + _("Place"),escape(place_title(self.db,event)), + _("Cause"),escape(event.get_cause()), + _("Description"), escape(event.get_description())) + + if len(event.get_source_references()) > 0: + psrc_ref = event.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 + def generate_addr_tooltip(self,addr): global escape s = "%s\n\n"\ @@ -408,6 +449,27 @@ class ScratchPadWindow: return s + def generate_fattr_tooltip(self,attr): + global escape + s = "%s\n\n"\ + "\t%s:\t%s\n"\ + "\t%s:\t%s" % (_("Family Attribute"), + _("Type"), + escape(const.display_fattr(attr.get_type())), + _("Value"), + escape(attr.get_value())) + + if len(attr.get_source_references()) > 0: + psrc_ref = attr.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" % ( + _("Sources"), + _("Name"),escape(short(psrc.get_title()))) + + return s + def generate_srcref_tooltip(self,srcref): global escape @@ -464,7 +526,7 @@ register_tool( ScratchPad, _("Scratch Pad"), category=_("Utilities"), - description=_("The Scratch Pad provides a tempory note pad to store " + description=_("The Scratch Pad provides a temporary note pad to store " "objects for easy reuse.") )