selection and preview of person and family
svn: r5774
This commit is contained in:
		@@ -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>
 | 
			
		||||
       * src/ObjectSelector/_FamilyFrame.py: basic object selection now working
 | 
			
		||||
       * src/ObjectSelector/_FamilyTreeFrame.py: basic object selection now working
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
from _Constants import ObjectTypes
 | 
			
		||||
 | 
			
		||||
from _PersonFrame import PersonFrame
 | 
			
		||||
 | 
			
		||||
from _FamilyFrame import FamilyFrame
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ class FamilyFrame(ObjectFrameBase):
 | 
			
		||||
                                 gobject.TYPE_STRING)),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    __default_border_width = 5
 | 
			
		||||
    __person_id_field = 0
 | 
			
		||||
 | 
			
		||||
    def __init__(self,
 | 
			
		||||
                 dbstate):
 | 
			
		||||
@@ -34,7 +34,7 @@ class FamilyFrame(ObjectFrameBase):
 | 
			
		||||
 | 
			
		||||
        def handle_selection(treeselection):
 | 
			
		||||
            (model, iter) = treeselection.get_selected()
 | 
			
		||||
            if iter:
 | 
			
		||||
            if iter and model.get_value(iter,0):
 | 
			
		||||
                self.emit('selection-changed', "%s / %s (%s)" % (                
 | 
			
		||||
                    str(model.get_value(iter,1)),
 | 
			
		||||
                    str(model.get_value(iter,2)),
 | 
			
		||||
@@ -46,14 +46,8 @@ class FamilyFrame(ObjectFrameBase):
 | 
			
		||||
 | 
			
		||||
        self._tree_frame.get_selection().connect('changed',handle_selection)
 | 
			
		||||
 | 
			
		||||
        def set_preview_frame_sensitivity(treeselection):
 | 
			
		||||
            (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',self.set_preview,self.__class__.__person_id_field)
 | 
			
		||||
 | 
			
		||||
        self._tree_frame.get_selection().connect('changed',set_preview_frame_sensitivity)
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,9 @@
 | 
			
		||||
import gtk
 | 
			
		||||
import gobject
 | 
			
		||||
from logging import getLogger
 | 
			
		||||
log = getLogger(".ObjectSelector")
 | 
			
		||||
 | 
			
		||||
import ImgManip
 | 
			
		||||
 | 
			
		||||
class FamilyPreviewFrame(gtk.Frame):
 | 
			
		||||
    
 | 
			
		||||
@@ -13,15 +17,21 @@ class FamilyPreviewFrame(gtk.Frame):
 | 
			
		||||
    def __init__(self,dbstate,label="Preview"):
 | 
			
		||||
	gtk.Frame.__init__(self,label)
 | 
			
		||||
 | 
			
		||||
        self._dbstate = dbstate
 | 
			
		||||
        
 | 
			
		||||
	align = gtk.Alignment()
 | 
			
		||||
 | 
			
		||||
        # 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
 | 
			
		||||
        image.set_from_file("../flist.svg")
 | 
			
		||||
        image_frame = gtk.Frame()
 | 
			
		||||
        image_frame.add(image)
 | 
			
		||||
        image_frame.add(image_box)
 | 
			
		||||
        
 | 
			
		||||
        # Text
 | 
			
		||||
        label = gtk.Label()
 | 
			
		||||
@@ -52,6 +62,37 @@ class FamilyPreviewFrame(gtk.Frame):
 | 
			
		||||
 | 
			
		||||
	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):
 | 
			
		||||
 
 | 
			
		||||
@@ -49,10 +49,7 @@ class FamilyTreeFrame(gtk.Frame):
 | 
			
		||||
 | 
			
		||||
        scrollwindow.add(self._list)
 | 
			
		||||
 | 
			
		||||
        self._inactive = False
 | 
			
		||||
 | 
			
		||||
        self._selection = self._list.get_selection()
 | 
			
		||||
        #self._selection.connect('changed',self._row_changed)
 | 
			
		||||
 | 
			
		||||
        self.add(scrollwindow)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,17 @@ class ObjectFrameBase(gtk.Frame):
 | 
			
		||||
        
 | 
			
		||||
        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):
 | 
			
		||||
        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
 | 
			
		||||
from _Constants import ObjectTypes
 | 
			
		||||
from _ObjectSelectorResult import ObjectSelectorResult
 | 
			
		||||
 | 
			
		||||
class _ObjectTypeWidgets(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        self.frame = None
 | 
			
		||||
        self.sel_label = None
 | 
			
		||||
        self.selected_id = None
 | 
			
		||||
 | 
			
		||||
    def show(self):
 | 
			
		||||
        self.frame.show_all()
 | 
			
		||||
@@ -22,16 +24,22 @@ class _ObjectTypeWidgets(object):
 | 
			
		||||
        self.frame.hide_all()
 | 
			
		||||
        self.sel_label.hide_all()
 | 
			
		||||
 | 
			
		||||
    def set_selected_id(self,id):
 | 
			
		||||
        self.selected_id = id
 | 
			
		||||
 | 
			
		||||
OBJECT_LIST = [ObjectTypes.PERSON, ObjectTypes.FAMILY,
 | 
			
		||||
               ObjectTypes.SOURCE, ObjectTypes.EVENT,
 | 
			
		||||
               ObjectTypes.MEDIA,  ObjectTypes.PLACE,
 | 
			
		||||
               ObjectTypes.REPOSITORY, ObjectTypes.REFERENCE]
 | 
			
		||||
               ObjectTypes.REPOSITORY]
 | 
			
		||||
 | 
			
		||||
class ObjectSelectorWindow(gtk.Window):
 | 
			
		||||
    
 | 
			
		||||
    __gproperties__ = {}
 | 
			
		||||
 | 
			
		||||
    __gsignals__ = {
 | 
			
		||||
        'add-object'  : (gobject.SIGNAL_RUN_LAST,
 | 
			
		||||
                         gobject.TYPE_NONE,
 | 
			
		||||
                         (gobject.TYPE_PYOBJECT,)),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    __default_border_width = 5
 | 
			
		||||
@@ -47,6 +55,7 @@ class ObjectSelectorWindow(gtk.Window):
 | 
			
		||||
 | 
			
		||||
        self._dbstate = dbstate
 | 
			
		||||
        self._object_list = object_list
 | 
			
		||||
        self._current_object_type = None
 | 
			
		||||
        
 | 
			
		||||
        self.set_title("Add Person")
 | 
			
		||||
        
 | 
			
		||||
@@ -146,15 +155,25 @@ class ObjectSelectorWindow(gtk.Window):
 | 
			
		||||
                lambda widget,text,handle,label: label.set_text(text),
 | 
			
		||||
                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)
 | 
			
		||||
 | 
			
		||||
        self._set_object_type(default_object_type)
 | 
			
		||||
        
 | 
			
		||||
        # Bottom buttons
 | 
			
		||||
        add_button = gtk.Button(stock=gtk.STOCK_ADD)
 | 
			
		||||
        add_button.set_sensitive(False)
 | 
			
		||||
        add_button.show()
 | 
			
		||||
        self._add_button = gtk.Button(stock=gtk.STOCK_ADD)
 | 
			
		||||
        self._add_button.set_sensitive(False)
 | 
			
		||||
        self._add_button.show()
 | 
			
		||||
 | 
			
		||||
        self._add_button.connect("clicked", self.on_add)
 | 
			
		||||
        
 | 
			
		||||
        cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL)
 | 
			
		||||
        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_border_width(self.__class__.__default_border_width)
 | 
			
		||||
        bottom_button_bar.add(cancel_button)
 | 
			
		||||
        bottom_button_bar.add(add_button)
 | 
			
		||||
        bottom_button_bar.add(self._add_button)
 | 
			
		||||
        bottom_button_bar.show()
 | 
			
		||||
        
 | 
			
		||||
        box = gtk.VBox()
 | 
			
		||||
@@ -186,15 +205,20 @@ class ObjectSelectorWindow(gtk.Window):
 | 
			
		||||
        
 | 
			
		||||
	self.add(align)
 | 
			
		||||
 | 
			
		||||
        self._set_object_type(default_object_type)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def _set_object_type(self,selected_object_type):
 | 
			
		||||
        # enable default
 | 
			
		||||
        # enable selected object type
 | 
			
		||||
        self._object_frames[selected_object_type].show()
 | 
			
		||||
 | 
			
		||||
        # disable all the others
 | 
			
		||||
        [ self._object_frames[object_type].hide() for object_type in self._object_list
 | 
			
		||||
          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
 | 
			
		||||
        it = store.get_iter_first()
 | 
			
		||||
        while it:
 | 
			
		||||
@@ -205,6 +229,31 @@ class ObjectSelectorWindow(gtk.Window):
 | 
			
		||||
        if it != None:
 | 
			
		||||
            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):
 | 
			
		||||
    gobject.type_register(PersonSearchCriteriaWidget)
 | 
			
		||||
 | 
			
		||||
@@ -214,11 +263,24 @@ if __name__ == "__main__":
 | 
			
		||||
    import GrampsDb
 | 
			
		||||
    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):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
            "w")
 | 
			
		||||
    class D:
 | 
			
		||||
@@ -235,4 +297,9 @@ if __name__ == "__main__":
 | 
			
		||||
    w.show()
 | 
			
		||||
    w.connect("destroy", gtk.main_quit)
 | 
			
		||||
 | 
			
		||||
    def add(w,results):
 | 
			
		||||
        print str(results)
 | 
			
		||||
 | 
			
		||||
    w.connect('add-object',add)
 | 
			
		||||
    
 | 
			
		||||
    gtk.main()
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,8 @@ class PersonFrame(ObjectFrameBase):
 | 
			
		||||
                                 gobject.TYPE_STRING)),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    __person_id_field = 1
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self,
 | 
			
		||||
                 dbstate):
 | 
			
		||||
        
 | 
			
		||||
@@ -32,15 +34,21 @@ class PersonFrame(ObjectFrameBase):
 | 
			
		||||
 | 
			
		||||
        def handle_selection(treeselection):
 | 
			
		||||
            (model, iter) = treeselection.get_selected()
 | 
			
		||||
            if iter and model.get_value(iter,1):                            
 | 
			
		||||
                self.emit('selection-changed', "%s (%s)" % (                
 | 
			
		||||
                    str(model.get_value(iter,0)),
 | 
			
		||||
                    str(model.get_value(iter,1))),
 | 
			
		||||
                      model.get_value(iter,0))
 | 
			
		||||
                          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',self.set_preview,self.__class__.__person_id_field)
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
if gtk.pygtk_version < (2,8,0):
 | 
			
		||||
    gobject.type_register(PersonFrame)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,9 @@
 | 
			
		||||
import gtk
 | 
			
		||||
import gobject
 | 
			
		||||
from logging import getLogger
 | 
			
		||||
log = getLogger(".ObjectSelector")
 | 
			
		||||
 | 
			
		||||
import ImgManip
 | 
			
		||||
 | 
			
		||||
class PersonPreviewFrame(gtk.Frame):
 | 
			
		||||
    
 | 
			
		||||
@@ -13,15 +17,17 @@ class PersonPreviewFrame(gtk.Frame):
 | 
			
		||||
    def __init__(self,dbstate,label="Preview"):
 | 
			
		||||
	gtk.Frame.__init__(self,label)
 | 
			
		||||
 | 
			
		||||
        self._dbstate = dbstate
 | 
			
		||||
        
 | 
			
		||||
	align = gtk.Alignment()
 | 
			
		||||
 | 
			
		||||
        # Image
 | 
			
		||||
        image = gtk.Image()
 | 
			
		||||
        self._image = gtk.Image()
 | 
			
		||||
 | 
			
		||||
        # test image
 | 
			
		||||
        image.set_from_file("../person.svg")
 | 
			
		||||
        self._image.set_from_file("../person.svg")
 | 
			
		||||
        image_frame = gtk.Frame()
 | 
			
		||||
        image_frame.add(image)
 | 
			
		||||
        image_frame.add(self._image)
 | 
			
		||||
        
 | 
			
		||||
        # Text
 | 
			
		||||
        label = gtk.Label()
 | 
			
		||||
@@ -52,7 +58,27 @@ class PersonPreviewFrame(gtk.Frame):
 | 
			
		||||
 | 
			
		||||
	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):
 | 
			
		||||
    gobject.type_register(PersonPreviewFrame)
 | 
			
		||||
 
 | 
			
		||||
@@ -59,8 +59,13 @@ class PersonTreeFrame(gtk.Frame):
 | 
			
		||||
            column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
 | 
			
		||||
            self._tree.append_column(column)
 | 
			
		||||
 | 
			
		||||
        self.add(self._tree)
 | 
			
		||||
        self.set_shadow_type(gtk.SHADOW_IN)
 | 
			
		||||
        scrollwindow = gtk.ScrolledWindow()
 | 
			
		||||
        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)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user