diff --git a/src/DisplayTabs.py b/src/DisplayTabs.py index cfe39e80f..7231ee984 100644 --- a/src/DisplayTabs.py +++ b/src/DisplayTabs.py @@ -75,6 +75,85 @@ class EmbeddedList(gtk.HBox): return gtk.Label('UNDEFINED') +class NoteTab(gtk.HBox): + + def __init__(self, note_obj): + gtk.HBox.__init__(self) + self.note_obj = note_obj + + self.text = gtk.TextView() + scroll = gtk.ScrolledWindow() + scroll.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) + scroll.add_with_viewport(self.text) + self.pack_start(scroll,True) + if note_obj: + self.text.get_buffer().insert_at_cursor(note_obj.get()) + + self.show_all() + + def rebuild(self): + pass + + def get_tab_widget(self): + return gtk.Label(_('Note')) + +class GalleryTab(gtk.HBox): + + def __init__(self,db, media_list): + gtk.HBox.__init__(self) + self.db = db + self.media_list = media_list + + self.hbox = gtk.HBox() + self.label = gtk.Label(_('Children')) + + self.iconmodel= gtk.ListStore(gtk.gdk.Pixbuf,str) + self.iconlist = gtk.IconView() + self.iconlist.set_pixbuf_column(0) + self.iconlist.set_text_column(1) + self.iconlist.set_model(self.iconmodel) + + scroll = gtk.ScrolledWindow() + scroll.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) + scroll.add_with_viewport(self.iconlist) + self.pack_start(scroll,True) + + self.rebuild() + self.show_all() + + def get_data(self): + return self.media_list + + def rebuild(self): + for ref in self.media_list: + obj = self.db.get_object_from_handle(ref.get_reference_handle()) + pixbuf = self.get_image(obj) + self.iconmodel.append(row=[pixbuf,obj.get_description()]) + self.set_label() + + def get_image(self,obj): + import ImgManip + + mtype = obj.get_mime_type() + if mtype[0:5] == "image": + image = ImgManip.get_thumbnail_image(obj.get_path()) + else: + image = GrampsMime.find_mime_type_pixbuf(mtype) + if not image: + image = gtk.gdk.pixbuf_new_from_file(const.icon) + return image + + def get_tab_widget(self): + return self.label + + def set_label(self): + if len(self.get_data()): + self.label.set_text("%s" % _('Gallery')) + self.label.set_use_markup(True) + else: + self.label.set_text(_('Gallery')) + + #------------------------------------------------------------------------- # # ChildModel @@ -203,3 +282,45 @@ class EventRefModel(gtk.ListStore): return self.db.get_place_from_handle(place_handle).get_title() return u"" + +#------------------------------------------------------------------------- +# +# EventRefModel +# +#------------------------------------------------------------------------- + +class AttrModel(gtk.ListStore): + + def __init__(self,attr_list,db): + gtk.ListStore.__init__(self,str,str) + self.db = db + index = 1 + for attr in attr_list: + self.append(row=[ + self.type_name(attr), + attr.get_value(), + ]) + index += 1 + + def type_name(self, attr): + t = attr.get_type() + if t[0] == RelLib.Attribute.CUSTOM: + return t[1] + else: + return Utils.personal_attributes[t[0]] + + +class FamilyAttrModel(AttrModel): + + def __init__(self,attr_list,db): + AttrModel.__init__(self,attr_list,db) + + def type_name(self, attr): + t = attr.get_type() + if t[0] == RelLib.Attribute.CUSTOM: + return t[1] + else: + return Utils.family_attributes[t[0]] + + + diff --git a/src/EditFamily.py b/src/EditFamily.py index 182b93cc3..c04c6b5aa 100644 --- a/src/EditFamily.py +++ b/src/EditFamily.py @@ -97,6 +97,37 @@ class EventEmbedList(DisplayTabs.EmbeddedList): def get_tab_widget(self): return self.label +class AttrEmbedList(DisplayTabs.EmbeddedList): + + column_names = [ + (_('Type'),0), + (_('Value'),1), + ] + + def __init__(self,db,data): + self.data = data + self.hbox = gtk.HBox() + self.label = gtk.Label(_('Attributes')) + self.hbox.show_all() + + DisplayTabs.EmbeddedList.__init__(self, db, DisplayTabs.FamilyAttrModel) + + def get_data(self): + return self.data + + def column_order(self): + return ((1,0),(1,1)) + + def set_label(self): + if len(self.get_data()): + self.label.set_text("%s" % _('Attributes')) + self.label.set_use_markup(True) + else: + self.label.set_text(_('Attributes')) + + def get_tab_widget(self): + return self.label + class ChildEmbedList(DisplayTabs.EmbeddedList): column_names = [ @@ -114,10 +145,28 @@ class ChildEmbedList(DisplayTabs.EmbeddedList): self.family = family self.hbox = gtk.HBox() self.label = gtk.Label(_('Children')) + self.add_btn = gtk.Button() + self.add_btn.add(gtk.image_new_from_stock(gtk.STOCK_ADD, + gtk.ICON_SIZE_BUTTON)) + self.edit_btn = gtk.Button() + self.edit_btn.add(gtk.image_new_from_stock(gtk.STOCK_EDIT, + gtk.ICON_SIZE_BUTTON)) + self.del_btn = gtk.Button() + self.del_btn.add(gtk.image_new_from_stock(gtk.STOCK_REMOVE, + gtk.ICON_SIZE_BUTTON)) self.hbox.show_all() - + DisplayTabs.EmbeddedList.__init__(self, db, DisplayTabs.ChildModel) + self.set_spacing(6) + vbox = gtk.VBox() + vbox.set_spacing(6) + vbox.pack_start(self.add_btn,False) + vbox.pack_start(self.edit_btn,False) + vbox.pack_start(self.del_btn,False) + vbox.show_all() + self.pack_start(vbox,False) + def get_data(self): return self.family.get_child_handle_list() @@ -202,6 +251,9 @@ class EditFamily(DisplayState.ManagedWindow): self.child_list = ChildEmbedList(self.dbstate.db, self.family) self.event_list = EventEmbedList(self.dbstate.db, self.family) + self.attr_list = AttrEmbedList(self.dbstate.db, self.family.get_attribute_list()) + self.note_tab = DisplayTabs.NoteTab(self.family.get_note_object()) + self.gallery_tab = DisplayTabs.GalleryTab(self.dbstate.db,self.family.get_media_list()) self.notebook.insert_page(self.child_list) self.notebook.set_tab_label(self.child_list,self.child_list.get_tab_widget()) @@ -209,6 +261,15 @@ class EditFamily(DisplayState.ManagedWindow): self.notebook.insert_page(self.event_list) self.notebook.set_tab_label(self.event_list,self.event_list.get_tab_widget()) + self.notebook.insert_page(self.attr_list) + self.notebook.set_tab_label(self.attr_list,self.attr_list.get_tab_widget()) + + self.notebook.insert_page(self.note_tab) + self.notebook.set_tab_label(self.note_tab,self.note_tab.get_tab_widget()) + + self.notebook.insert_page(self.gallery_tab) + self.notebook.set_tab_label(self.gallery_tab,self.gallery_tab.get_tab_widget()) + self.gid.set_text(self.family.get_gramps_id())