selection and preview of person and family
svn: r5774
This commit is contained in:
parent
58ef8176d4
commit
345b35c3b9
@ -1,3 +1,10 @@
|
|||||||
|
2006-01-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
||||||
|
* src/ObjectSelector/_FamilyFrame.py, src/ObjectSelector/_FamilyPreviewFrame.py,
|
||||||
|
src/ObjectSelector/_ObjectFrameBase.py, src/ObjectSelector/_ObjectSelectorWindow.py,
|
||||||
|
src/ObjectSelector/_PersonFrame.py, src/ObjectSelector/_PersonPreviewFrame.py,
|
||||||
|
src/ObjectSelector/_PersonTreeFrame.py src/ObjectSelector/_ObjectSelectorResult.py:
|
||||||
|
object selection and initial preview works for Family and Person
|
||||||
|
|
||||||
2006-01-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
2006-01-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
||||||
* src/ObjectSelector/_FamilyFrame.py: basic object selection now working
|
* src/ObjectSelector/_FamilyFrame.py: basic object selection now working
|
||||||
* src/ObjectSelector/_FamilyTreeFrame.py: basic object selection now working
|
* src/ObjectSelector/_FamilyTreeFrame.py: basic object selection now working
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
from _Constants import ObjectTypes
|
from _Constants import ObjectTypes
|
||||||
|
|
||||||
from _PersonFrame import PersonFrame
|
from _PersonFrame import PersonFrame
|
||||||
|
|
||||||
from _FamilyFrame import FamilyFrame
|
from _FamilyFrame import FamilyFrame
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class FamilyFrame(ObjectFrameBase):
|
|||||||
gobject.TYPE_STRING)),
|
gobject.TYPE_STRING)),
|
||||||
}
|
}
|
||||||
|
|
||||||
__default_border_width = 5
|
__person_id_field = 0
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
dbstate):
|
dbstate):
|
||||||
@ -34,7 +34,7 @@ class FamilyFrame(ObjectFrameBase):
|
|||||||
|
|
||||||
def handle_selection(treeselection):
|
def handle_selection(treeselection):
|
||||||
(model, iter) = treeselection.get_selected()
|
(model, iter) = treeselection.get_selected()
|
||||||
if iter:
|
if iter and model.get_value(iter,0):
|
||||||
self.emit('selection-changed', "%s / %s (%s)" % (
|
self.emit('selection-changed', "%s / %s (%s)" % (
|
||||||
str(model.get_value(iter,1)),
|
str(model.get_value(iter,1)),
|
||||||
str(model.get_value(iter,2)),
|
str(model.get_value(iter,2)),
|
||||||
@ -46,14 +46,8 @@ class FamilyFrame(ObjectFrameBase):
|
|||||||
|
|
||||||
self._tree_frame.get_selection().connect('changed',handle_selection)
|
self._tree_frame.get_selection().connect('changed',handle_selection)
|
||||||
|
|
||||||
def set_preview_frame_sensitivity(treeselection):
|
self._tree_frame.get_selection().connect('changed',self.set_preview,self.__class__.__person_id_field)
|
||||||
(model, iter) = treeselection.get_selected()
|
|
||||||
if iter:
|
|
||||||
self._preview_frame.set_sensitive(True)
|
|
||||||
else:
|
|
||||||
self._preview_frame.set_sensitive(False)
|
|
||||||
|
|
||||||
self._tree_frame.get_selection().connect('changed',set_preview_frame_sensitivity)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
import gtk
|
import gtk
|
||||||
import gobject
|
import gobject
|
||||||
|
from logging import getLogger
|
||||||
|
log = getLogger(".ObjectSelector")
|
||||||
|
|
||||||
|
import ImgManip
|
||||||
|
|
||||||
class FamilyPreviewFrame(gtk.Frame):
|
class FamilyPreviewFrame(gtk.Frame):
|
||||||
|
|
||||||
@ -13,15 +17,21 @@ class FamilyPreviewFrame(gtk.Frame):
|
|||||||
def __init__(self,dbstate,label="Preview"):
|
def __init__(self,dbstate,label="Preview"):
|
||||||
gtk.Frame.__init__(self,label)
|
gtk.Frame.__init__(self,label)
|
||||||
|
|
||||||
|
self._dbstate = dbstate
|
||||||
|
|
||||||
align = gtk.Alignment()
|
align = gtk.Alignment()
|
||||||
|
|
||||||
# Image
|
# Image
|
||||||
image = gtk.Image()
|
self._image_l = gtk.Image()
|
||||||
|
self._image_r = gtk.Image()
|
||||||
|
|
||||||
|
image_box = gtk.HBox()
|
||||||
|
image_box.pack_start(self._image_l)
|
||||||
|
image_box.pack_start(self._image_r)
|
||||||
|
|
||||||
# test image
|
# test image
|
||||||
image.set_from_file("../flist.svg")
|
|
||||||
image_frame = gtk.Frame()
|
image_frame = gtk.Frame()
|
||||||
image_frame.add(image)
|
image_frame.add(image_box)
|
||||||
|
|
||||||
# Text
|
# Text
|
||||||
label = gtk.Label()
|
label = gtk.Label()
|
||||||
@ -52,6 +62,37 @@ class FamilyPreviewFrame(gtk.Frame):
|
|||||||
|
|
||||||
self.add(align)
|
self.add(align)
|
||||||
|
|
||||||
|
self.clear_object()
|
||||||
|
|
||||||
|
def set_object_from_id(self,id):
|
||||||
|
try:
|
||||||
|
family = self._dbstate.db.get_family_from_gramps_id(id)
|
||||||
|
|
||||||
|
image = [self._image_l, self._image_r]
|
||||||
|
image_no = 0
|
||||||
|
for person_handle in (family.get_father_handle(),family.get_mother_handle()):
|
||||||
|
person = self._dbstate.db.get_person_from_handle(person_handle)
|
||||||
|
if not person:
|
||||||
|
return
|
||||||
|
|
||||||
|
image_list = person.get_media_list()
|
||||||
|
if image_list:
|
||||||
|
mobj = self._dbstate.db.get_object_from_handle(image_list[0].ref)
|
||||||
|
if mobj.get_mime_type()[0:5] == "image":
|
||||||
|
pixbuf = ImgManip.get_thumbnail_image(mobj.get_path())
|
||||||
|
image[image_no].set_from_pixbuf(pixbuf)
|
||||||
|
image_no += 1
|
||||||
|
else:
|
||||||
|
self._image_l.set_from_file("../person.svg")
|
||||||
|
self._image_r.set_from_file("../person.svg")
|
||||||
|
|
||||||
|
except:
|
||||||
|
log.warn("Failed to generate preview for family", exc_info=True)
|
||||||
|
self.clear_object()
|
||||||
|
|
||||||
|
def clear_object(self):
|
||||||
|
self._image_l.set_from_file("../person.svg")
|
||||||
|
self._image_r.set_from_file("../person.svg")
|
||||||
|
|
||||||
|
|
||||||
if gtk.pygtk_version < (2,8,0):
|
if gtk.pygtk_version < (2,8,0):
|
||||||
|
@ -49,10 +49,7 @@ class FamilyTreeFrame(gtk.Frame):
|
|||||||
|
|
||||||
scrollwindow.add(self._list)
|
scrollwindow.add(self._list)
|
||||||
|
|
||||||
self._inactive = False
|
|
||||||
|
|
||||||
self._selection = self._list.get_selection()
|
self._selection = self._list.get_selection()
|
||||||
#self._selection.connect('changed',self._row_changed)
|
|
||||||
|
|
||||||
self.add(scrollwindow)
|
self.add(scrollwindow)
|
||||||
|
|
||||||
|
@ -57,6 +57,17 @@ class ObjectFrameBase(gtk.Frame):
|
|||||||
|
|
||||||
self.add(pane_align)
|
self.add(pane_align)
|
||||||
|
|
||||||
|
|
||||||
|
def set_preview(self,treeselection,id_field):
|
||||||
|
(model, iter) = treeselection.get_selected()
|
||||||
|
if iter and model.get_value(iter,id_field):
|
||||||
|
self._preview_frame.set_sensitive(True)
|
||||||
|
self._preview_frame.set_object_from_id(model.get_value(iter,id_field))
|
||||||
|
else:
|
||||||
|
self._preview_frame.set_sensitive(False)
|
||||||
|
self._preview_frame.clear_object()
|
||||||
|
|
||||||
|
|
||||||
def get_selection(self):
|
def get_selection(self):
|
||||||
return self._tree_frame.get_selection()
|
return self._tree_frame.get_selection()
|
||||||
|
|
||||||
|
46
src/ObjectSelector/_ObjectSelectorResult.py
Normal file
46
src/ObjectSelector/_ObjectSelectorResult.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
from _Constants import ObjectTypes
|
||||||
|
|
||||||
|
class ObjectSelectorResult(object):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._gramps_id = None
|
||||||
|
self._object_type = None
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "Object Type = %s\n"\
|
||||||
|
"Gramps ID = %s" % (str(self._object_type),
|
||||||
|
str(self._gramps_id))
|
||||||
|
|
||||||
|
def set_gramps_id(self,id):
|
||||||
|
self._gramps_id = id
|
||||||
|
|
||||||
|
def get_gramps_id(self):
|
||||||
|
return self._gramps_id
|
||||||
|
|
||||||
|
def set_object_type(self,object_type):
|
||||||
|
self._object_type = object_type
|
||||||
|
|
||||||
|
def get_object_type(self,object_type):
|
||||||
|
return self._object_type
|
||||||
|
|
||||||
|
def is_person(self):
|
||||||
|
return self._object_type == ObjectTypes.PERSON
|
||||||
|
|
||||||
|
def is_family(self):
|
||||||
|
return self._object_type == ObjectTypes.FAMILY
|
||||||
|
|
||||||
|
def is_event(self):
|
||||||
|
return self._object_type == ObjectTypes.EVENT
|
||||||
|
|
||||||
|
def is_source(self):
|
||||||
|
return self._object_type == ObjectTypes.SOURCE
|
||||||
|
|
||||||
|
def is_repository(self):
|
||||||
|
return self._object_type == ObjectTypes.REPOSITORY
|
||||||
|
|
||||||
|
def is_media(self):
|
||||||
|
return self._object_type == ObjectTypes.MEDIA
|
||||||
|
|
||||||
|
def is_place(self):
|
||||||
|
return self._object_type == ObjectTypes.PLACE
|
@ -7,12 +7,14 @@ import gobject
|
|||||||
|
|
||||||
import _Factories
|
import _Factories
|
||||||
from _Constants import ObjectTypes
|
from _Constants import ObjectTypes
|
||||||
|
from _ObjectSelectorResult import ObjectSelectorResult
|
||||||
|
|
||||||
class _ObjectTypeWidgets(object):
|
class _ObjectTypeWidgets(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.frame = None
|
self.frame = None
|
||||||
self.sel_label = None
|
self.sel_label = None
|
||||||
|
self.selected_id = None
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
self.frame.show_all()
|
self.frame.show_all()
|
||||||
@ -22,16 +24,22 @@ class _ObjectTypeWidgets(object):
|
|||||||
self.frame.hide_all()
|
self.frame.hide_all()
|
||||||
self.sel_label.hide_all()
|
self.sel_label.hide_all()
|
||||||
|
|
||||||
|
def set_selected_id(self,id):
|
||||||
|
self.selected_id = id
|
||||||
|
|
||||||
OBJECT_LIST = [ObjectTypes.PERSON, ObjectTypes.FAMILY,
|
OBJECT_LIST = [ObjectTypes.PERSON, ObjectTypes.FAMILY,
|
||||||
ObjectTypes.SOURCE, ObjectTypes.EVENT,
|
ObjectTypes.SOURCE, ObjectTypes.EVENT,
|
||||||
ObjectTypes.MEDIA, ObjectTypes.PLACE,
|
ObjectTypes.MEDIA, ObjectTypes.PLACE,
|
||||||
ObjectTypes.REPOSITORY, ObjectTypes.REFERENCE]
|
ObjectTypes.REPOSITORY]
|
||||||
|
|
||||||
class ObjectSelectorWindow(gtk.Window):
|
class ObjectSelectorWindow(gtk.Window):
|
||||||
|
|
||||||
__gproperties__ = {}
|
__gproperties__ = {}
|
||||||
|
|
||||||
__gsignals__ = {
|
__gsignals__ = {
|
||||||
|
'add-object' : (gobject.SIGNAL_RUN_LAST,
|
||||||
|
gobject.TYPE_NONE,
|
||||||
|
(gobject.TYPE_PYOBJECT,)),
|
||||||
}
|
}
|
||||||
|
|
||||||
__default_border_width = 5
|
__default_border_width = 5
|
||||||
@ -47,6 +55,7 @@ class ObjectSelectorWindow(gtk.Window):
|
|||||||
|
|
||||||
self._dbstate = dbstate
|
self._dbstate = dbstate
|
||||||
self._object_list = object_list
|
self._object_list = object_list
|
||||||
|
self._current_object_type = None
|
||||||
|
|
||||||
self.set_title("Add Person")
|
self.set_title("Add Person")
|
||||||
|
|
||||||
@ -146,15 +155,25 @@ class ObjectSelectorWindow(gtk.Window):
|
|||||||
lambda widget,text,handle,label: label.set_text(text),
|
lambda widget,text,handle,label: label.set_text(text),
|
||||||
self._object_frames[object_type].sel_label)
|
self._object_frames[object_type].sel_label)
|
||||||
|
|
||||||
|
self._object_frames[object_type].frame.connect(
|
||||||
|
'selection-changed',
|
||||||
|
lambda widget,text,handle,current_object: current_object.set_selected_id(handle),
|
||||||
|
self._object_frames[object_type])
|
||||||
|
|
||||||
|
self._object_frames[object_type].frame.connect(
|
||||||
|
'selection-changed',
|
||||||
|
self.on_selection_changed)
|
||||||
|
|
||||||
|
|
||||||
frame_box.pack_start(self._object_frames[object_type].frame,True,True)
|
frame_box.pack_start(self._object_frames[object_type].frame,True,True)
|
||||||
|
|
||||||
self._set_object_type(default_object_type)
|
|
||||||
|
|
||||||
# Bottom buttons
|
# Bottom buttons
|
||||||
add_button = gtk.Button(stock=gtk.STOCK_ADD)
|
self._add_button = gtk.Button(stock=gtk.STOCK_ADD)
|
||||||
add_button.set_sensitive(False)
|
self._add_button.set_sensitive(False)
|
||||||
add_button.show()
|
self._add_button.show()
|
||||||
|
|
||||||
|
self._add_button.connect("clicked", self.on_add)
|
||||||
|
|
||||||
cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL)
|
cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL)
|
||||||
cancel_button.show()
|
cancel_button.show()
|
||||||
@ -166,7 +185,7 @@ class ObjectSelectorWindow(gtk.Window):
|
|||||||
bottom_button_bar.set_spacing(self.__class__.__default_border_width/2)
|
bottom_button_bar.set_spacing(self.__class__.__default_border_width/2)
|
||||||
bottom_button_bar.set_border_width(self.__class__.__default_border_width)
|
bottom_button_bar.set_border_width(self.__class__.__default_border_width)
|
||||||
bottom_button_bar.add(cancel_button)
|
bottom_button_bar.add(cancel_button)
|
||||||
bottom_button_bar.add(add_button)
|
bottom_button_bar.add(self._add_button)
|
||||||
bottom_button_bar.show()
|
bottom_button_bar.show()
|
||||||
|
|
||||||
box = gtk.VBox()
|
box = gtk.VBox()
|
||||||
@ -186,15 +205,20 @@ class ObjectSelectorWindow(gtk.Window):
|
|||||||
|
|
||||||
self.add(align)
|
self.add(align)
|
||||||
|
|
||||||
|
self._set_object_type(default_object_type)
|
||||||
|
|
||||||
|
|
||||||
def _set_object_type(self,selected_object_type):
|
def _set_object_type(self,selected_object_type):
|
||||||
# enable default
|
# enable selected object type
|
||||||
self._object_frames[selected_object_type].show()
|
self._object_frames[selected_object_type].show()
|
||||||
|
|
||||||
# disable all the others
|
# disable all the others
|
||||||
[ self._object_frames[object_type].hide() for object_type in self._object_list
|
[ self._object_frames[object_type].hide() for object_type in self._object_list
|
||||||
if object_type != selected_object_type]
|
if object_type != selected_object_type]
|
||||||
|
|
||||||
|
# Set the object selector list to the selected object type
|
||||||
|
# this is required because we may be asked to set the object type
|
||||||
|
# without the use selecting it explicitly from the list.
|
||||||
store = self._tool_list
|
store = self._tool_list
|
||||||
it = store.get_iter_first()
|
it = store.get_iter_first()
|
||||||
while it:
|
while it:
|
||||||
@ -205,6 +229,31 @@ class ObjectSelectorWindow(gtk.Window):
|
|||||||
if it != None:
|
if it != None:
|
||||||
self._tool_combo.set_active_iter(it)
|
self._tool_combo.set_active_iter(it)
|
||||||
|
|
||||||
|
self._current_object_type = selected_object_type
|
||||||
|
|
||||||
|
# Set the add button sensitivity
|
||||||
|
if self._object_frames[selected_object_type].selected_id:
|
||||||
|
self._add_button.set_sensitive(True)
|
||||||
|
else:
|
||||||
|
self._add_button.set_sensitive(False)
|
||||||
|
|
||||||
|
|
||||||
|
def get_result(self):
|
||||||
|
result = ObjectSelectorResult()
|
||||||
|
result.set_object_type(self._current_object_type)
|
||||||
|
result.set_gramps_id(self._object_frames[self._current_object_type].selected_id)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def on_add(self,button):
|
||||||
|
self.emit('add-object',self.get_result())
|
||||||
|
|
||||||
|
def on_selection_changed(self,widget,text,handle):
|
||||||
|
if handle:
|
||||||
|
self._add_button.set_sensitive(True)
|
||||||
|
else:
|
||||||
|
self._add_button.set_sensitive(False)
|
||||||
|
|
||||||
|
|
||||||
if gtk.pygtk_version < (2,8,0):
|
if gtk.pygtk_version < (2,8,0):
|
||||||
gobject.type_register(PersonSearchCriteriaWidget)
|
gobject.type_register(PersonSearchCriteriaWidget)
|
||||||
|
|
||||||
@ -214,11 +263,24 @@ if __name__ == "__main__":
|
|||||||
import GrampsDb
|
import GrampsDb
|
||||||
import const
|
import const
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import sys,os.path
|
||||||
|
|
||||||
|
form = logging.Formatter(fmt="%(relativeCreated)d: %(levelname)s: %(filename)s: line %(lineno)d: %(message)s")
|
||||||
|
stderrh = logging.StreamHandler(sys.stderr)
|
||||||
|
stderrh.setFormatter(form)
|
||||||
|
stderrh.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
# everything.
|
||||||
|
l = logging.getLogger()
|
||||||
|
l.setLevel(logging.DEBUG)
|
||||||
|
l.addHandler(stderrh)
|
||||||
|
|
||||||
def cb(d):
|
def cb(d):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
db = GrampsDb.gramps_db_factory(const.app_gramps)()
|
db = GrampsDb.gramps_db_factory(const.app_gramps)()
|
||||||
db.load("/home/rtaylor/devel/Personal/gramps/test/Untitled_2.grdb",
|
db.load(os.path.realpath(sys.argv[1]),
|
||||||
cb, # callback
|
cb, # callback
|
||||||
"w")
|
"w")
|
||||||
class D:
|
class D:
|
||||||
@ -235,4 +297,9 @@ if __name__ == "__main__":
|
|||||||
w.show()
|
w.show()
|
||||||
w.connect("destroy", gtk.main_quit)
|
w.connect("destroy", gtk.main_quit)
|
||||||
|
|
||||||
|
def add(w,results):
|
||||||
|
print str(results)
|
||||||
|
|
||||||
|
w.connect('add-object',add)
|
||||||
|
|
||||||
gtk.main()
|
gtk.main()
|
||||||
|
@ -21,6 +21,8 @@ class PersonFrame(ObjectFrameBase):
|
|||||||
gobject.TYPE_STRING)),
|
gobject.TYPE_STRING)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__person_id_field = 1
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
dbstate):
|
dbstate):
|
||||||
|
|
||||||
@ -32,15 +34,21 @@ class PersonFrame(ObjectFrameBase):
|
|||||||
|
|
||||||
def handle_selection(treeselection):
|
def handle_selection(treeselection):
|
||||||
(model, iter) = treeselection.get_selected()
|
(model, iter) = treeselection.get_selected()
|
||||||
self.emit('selection-changed', "%s (%s)" % (
|
if iter and model.get_value(iter,1):
|
||||||
str(model.get_value(iter,0)),
|
self.emit('selection-changed', "%s (%s)" % (
|
||||||
str(model.get_value(iter,1))),
|
str(model.get_value(iter,0)),
|
||||||
model.get_value(iter,0))
|
str(model.get_value(iter,1))),
|
||||||
|
model.get_value(iter,1))
|
||||||
|
else:
|
||||||
|
self.emit('selection-changed',"No Selection","")
|
||||||
|
|
||||||
|
|
||||||
self._tree_frame.get_selection().connect('changed',handle_selection)
|
self._tree_frame.get_selection().connect('changed',handle_selection)
|
||||||
|
|
||||||
|
|
||||||
|
self._tree_frame.get_selection().connect('changed',self.set_preview,self.__class__.__person_id_field)
|
||||||
|
|
||||||
|
|
||||||
if gtk.pygtk_version < (2,8,0):
|
if gtk.pygtk_version < (2,8,0):
|
||||||
gobject.type_register(PersonFrame)
|
gobject.type_register(PersonFrame)
|
||||||
|
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
import gtk
|
import gtk
|
||||||
import gobject
|
import gobject
|
||||||
|
from logging import getLogger
|
||||||
|
log = getLogger(".ObjectSelector")
|
||||||
|
|
||||||
|
import ImgManip
|
||||||
|
|
||||||
class PersonPreviewFrame(gtk.Frame):
|
class PersonPreviewFrame(gtk.Frame):
|
||||||
|
|
||||||
@ -13,15 +17,17 @@ class PersonPreviewFrame(gtk.Frame):
|
|||||||
def __init__(self,dbstate,label="Preview"):
|
def __init__(self,dbstate,label="Preview"):
|
||||||
gtk.Frame.__init__(self,label)
|
gtk.Frame.__init__(self,label)
|
||||||
|
|
||||||
|
self._dbstate = dbstate
|
||||||
|
|
||||||
align = gtk.Alignment()
|
align = gtk.Alignment()
|
||||||
|
|
||||||
# Image
|
# Image
|
||||||
image = gtk.Image()
|
self._image = gtk.Image()
|
||||||
|
|
||||||
# test image
|
# test image
|
||||||
image.set_from_file("../person.svg")
|
self._image.set_from_file("../person.svg")
|
||||||
image_frame = gtk.Frame()
|
image_frame = gtk.Frame()
|
||||||
image_frame.add(image)
|
image_frame.add(self._image)
|
||||||
|
|
||||||
# Text
|
# Text
|
||||||
label = gtk.Label()
|
label = gtk.Label()
|
||||||
@ -52,7 +58,27 @@ class PersonPreviewFrame(gtk.Frame):
|
|||||||
|
|
||||||
self.add(align)
|
self.add(align)
|
||||||
|
|
||||||
|
def set_object_from_id(self,id):
|
||||||
|
try:
|
||||||
|
person = self._dbstate.db.get_person_from_gramps_id(id)
|
||||||
|
if not person:
|
||||||
|
return
|
||||||
|
|
||||||
|
image_list = person.get_media_list()
|
||||||
|
if image_list:
|
||||||
|
mobj = self._dbstate.db.get_object_from_handle(image_list[0].ref)
|
||||||
|
if mobj.get_mime_type()[0:5] == "image":
|
||||||
|
pixbuf = ImgManip.get_thumbnail_image(mobj.get_path())
|
||||||
|
self._image.set_from_pixbuf(pixbuf)
|
||||||
|
else:
|
||||||
|
self._image.set_from_file("../person.svg")
|
||||||
|
|
||||||
|
except:
|
||||||
|
log.warn("Failed to generate preview for person", exc_info=True)
|
||||||
|
self._clear_object()
|
||||||
|
|
||||||
|
def clear_object(self):
|
||||||
|
self._image.set_from_file("../person.svg")
|
||||||
|
|
||||||
if gtk.pygtk_version < (2,8,0):
|
if gtk.pygtk_version < (2,8,0):
|
||||||
gobject.type_register(PersonPreviewFrame)
|
gobject.type_register(PersonPreviewFrame)
|
||||||
|
@ -59,8 +59,13 @@ class PersonTreeFrame(gtk.Frame):
|
|||||||
column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
|
column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
|
||||||
self._tree.append_column(column)
|
self._tree.append_column(column)
|
||||||
|
|
||||||
self.add(self._tree)
|
scrollwindow = gtk.ScrolledWindow()
|
||||||
self.set_shadow_type(gtk.SHADOW_IN)
|
scrollwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
||||||
|
scrollwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
|
||||||
|
|
||||||
|
scrollwindow.add(self._tree)
|
||||||
|
|
||||||
|
self.add(scrollwindow)
|
||||||
|
|
||||||
self.set_model(self._dbstate.db)
|
self.set_model(self._dbstate.db)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user