52
54
from ..selectors import SelectorFactory
53
55
from .displaytabs import CitationEmbedList, NoteTab
54
56
from ..glade import Glade
57
from ..ddtargets import DdTargets
58
from gi.repository import Gdk
56
60
#-------------------------------------------------------------------------
83
87
_('Person Reference Editor'))
84
88
self.person_label = self.top.get_object('person')
91
self.person_label.drag_dest_set(Gtk.DestDefaults.MOTION |
92
Gtk.DestDefaults.DROP,
95
tglist = Gtk.TargetList.new([])
96
tglist.add(DdTargets.PERSON_LINK.atom_drag_type,
97
DdTargets.PERSON_LINK.target_flags,
98
DdTargets.PERSON_LINK.app_id)
99
self.person_label.drag_dest_set_target_list(tglist)
100
self.person_label.connect('drag_data_received', self.on_drag_persondata_received)
101
self._update_dnd_capability()
103
def _update_dnd_capability(self):
104
self.label_event_box = self.top.get_object('person_event_box')
105
# Set the drag action from the label
107
self.label_event_box.drag_source_set(Gdk.ModifierType.BUTTON1_MASK,
108
[], Gdk.DragAction.COPY)
109
tglist = Gtk.TargetList.new([])
110
tglist.add(DdTargets.PERSON_LINK.atom_drag_type,
111
DdTargets.PERSON_LINK.target_flags,
112
DdTargets.PERSON_LINK.app_id)
113
self.label_event_box.drag_source_set_target_list(tglist)
114
self.label_event_box.drag_source_set_icon_name('gramps-person')
115
self.label_event_box.connect('drag_data_get', self.drag_data_get)
117
self.label_event_box.drag_source_unset()
86
119
def _setup_fields(self):
129
162
sel = SelectPerson(self.dbstate, self.uistate, self.track)
130
163
person = sel.run()
164
self.update_person(person)
166
def update_person(self, person):
133
168
self.obj.ref = person.get_handle()
134
169
self.person_label.set_text(name_displayer.display(person))
170
self._update_dnd_capability()
172
def on_drag_persondata_received(self, widget, context, x, y, sel_data,
175
Handle the standard gtk interface for drag_data_received.
177
if sel_data and sel_data.get_data():
178
(drag_type, idval, handle, val) = pickle.loads(sel_data.get_data())
179
person = self.db.get_person_from_handle(handle)
180
self.update_person(person)
182
def drag_data_get(self, widget, context, sel_data, info, time):
183
# get the selected object, returning if not is defined
184
if info == DdTargets.PERSON_LINK.app_id:
185
data = (DdTargets.PERSON_LINK.drag_type, id(self), self.obj.ref, 0)
186
sel_data.set(DdTargets.PERSON_LINK.atom_drag_type, 8, pickle.dumps(data))
136
188
def _create_tabbed_pages(self):