Improved reporting for traceback dialog, attempts to determine the distribution
svn: r1220
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							@@ -88,7 +88,6 @@ class AddMediaObject:
 | 
			
		||||
            "destroy_passed_object" : Utils.destroy_passed_object
 | 
			
		||||
            })
 | 
			
		||||
        
 | 
			
		||||
        self.window.editable_enters(self.description)
 | 
			
		||||
        self.window.show()
 | 
			
		||||
 | 
			
		||||
    def on_savephoto_clicked(self,obj):
 | 
			
		||||
@@ -143,8 +142,10 @@ class AddMediaObject:
 | 
			
		||||
 | 
			
		||||
        if os.path.isfile(filename):
 | 
			
		||||
            type = Utils.get_mime_type(filename)
 | 
			
		||||
            if type[0:5] == 'image':
 | 
			
		||||
 | 
			
		||||
            if type[0:5] == "image":
 | 
			
		||||
                image = RelImage.scale_image(filename,const.thumbScale)
 | 
			
		||||
                self.image.load_imlib(image)
 | 
			
		||||
                self.image.set_from_pixbuf(image)
 | 
			
		||||
            else:
 | 
			
		||||
                self.image.load_file(Utils.find_icon(type))
 | 
			
		||||
                i = gtk.gdk.pixbuf_new_from_file(Utils.find_icon(type))
 | 
			
		||||
            self.image.set_from_pixbuf(i)
 | 
			
		||||
 
 | 
			
		||||
@@ -26,12 +26,14 @@
 | 
			
		||||
import cStringIO
 | 
			
		||||
import traceback
 | 
			
		||||
import sys
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# GTK/GNOME modules
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
import gtk
 | 
			
		||||
import gtk.glade
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
@@ -42,6 +44,14 @@ import gtk.glade
 | 
			
		||||
import const
 | 
			
		||||
from intl import gettext as _
 | 
			
		||||
 | 
			
		||||
_release_files = [
 | 
			
		||||
    "/etc/redhat-release",
 | 
			
		||||
    "/etc/mandrake-release",
 | 
			
		||||
    "/etc/debian-release",
 | 
			
		||||
    "/etc/SuSE-release",
 | 
			
		||||
    "/etc/gentoo-release",
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# DisplayTrace
 | 
			
		||||
@@ -51,13 +61,28 @@ class DisplayTrace:
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        data = sys.exc_info()
 | 
			
		||||
        ver = sys.version_info
 | 
			
		||||
        
 | 
			
		||||
        msg = cStringIO.StringIO()
 | 
			
		||||
        msg.write(_('GRAMPS %s has encountered an internal error.\n'
 | 
			
		||||
                    'Please copy the message below and post a bug report '
 | 
			
		||||
                    'at http://sourceforge.net/projects/gramps or send an '
 | 
			
		||||
                    'email message to gramps-users@lists.sourceforge.net\n\n')
 | 
			
		||||
                  % const.version)
 | 
			
		||||
                    
 | 
			
		||||
        msg.write(_('GRAMPS has encountered an internal error.\n'
 | 
			
		||||
                    'Please copy the message below and post a bug report\n'
 | 
			
		||||
                    'at http://sourceforge.net/projects/gramps or send an\n'
 | 
			
		||||
                    'email message to gramps-bugs@lists.sourceforge.net\n\n'))
 | 
			
		||||
 | 
			
		||||
        msg.write("GRAMPS : %s\n" % const.version)
 | 
			
		||||
        msg.write("Python : %s.%s.%s %s\n" % (ver[0],ver[1],ver[2],ver[3]))
 | 
			
		||||
        msg.write("GTK : %s.%s.%s\n" % gtk.gtk_version)
 | 
			
		||||
        for n in _release_files:
 | 
			
		||||
            if os.path.isfile(n):
 | 
			
		||||
                try:
 | 
			
		||||
                    f = open(n)
 | 
			
		||||
                    text = f.readline()
 | 
			
		||||
                    msg.write("OS : %s\n" % text)
 | 
			
		||||
                    f.close()
 | 
			
		||||
                    break
 | 
			
		||||
                except:
 | 
			
		||||
                    pass
 | 
			
		||||
        
 | 
			
		||||
        traceback.print_exception(data[0],data[1],data[2],None,msg)
 | 
			
		||||
 | 
			
		||||
        self.glade = gtk.glade.XML(const.pluginsFile,"plugstat")
 | 
			
		||||
 
 | 
			
		||||
@@ -234,14 +234,11 @@ class Gallery(ImageSelect):
 | 
			
		||||
        self.photo = None
 | 
			
		||||
 | 
			
		||||
    def close(self):
 | 
			
		||||
        pass
 | 
			
		||||
#        self.iconlist.hide()
 | 
			
		||||
#        print self.canvas_list
 | 
			
		||||
#        print self.p_map
 | 
			
		||||
#        self.canvas_list = None
 | 
			
		||||
#        self.p_map = None
 | 
			
		||||
        self.iconlist.hide()
 | 
			
		||||
        self.canvas_list = None
 | 
			
		||||
        self.p_map = None
 | 
			
		||||
#        gc.collect()
 | 
			
		||||
#        self.iconlist.destroy()
 | 
			
		||||
        self.iconlist.destroy()
 | 
			
		||||
        
 | 
			
		||||
    def on_canvas1_event(self,obj,event):
 | 
			
		||||
        """Handle resize events over the canvas, redrawing if the size changes"""
 | 
			
		||||
@@ -267,11 +264,11 @@ class Gallery(ImageSelect):
 | 
			
		||||
 | 
			
		||||
                item = widget.get_item_at(event.x,event.y)
 | 
			
		||||
                if item:
 | 
			
		||||
                    (i,t,b,self.photo) = self.p_map[item]
 | 
			
		||||
                    (i,t,b,self.photo,oid) = self.p_map[item]
 | 
			
		||||
                    t.set(fill_color_gdk=style.fg[gtk.STATE_SELECTED])
 | 
			
		||||
                    b.set(fill_color_gdk=style.bg[gtk.STATE_SELECTED])
 | 
			
		||||
                    if self.sel:
 | 
			
		||||
                        (i,t,b,photo) = self.p_map[self.sel]
 | 
			
		||||
                        (i,t,b,photo,oid) = self.p_map[self.sel]
 | 
			
		||||
                        t.set(fill_color_gdk=style.fg[gtk.STATE_NORMAL])
 | 
			
		||||
                        b.set(fill_color_gdk=style.bg[gtk.STATE_NORMAL])
 | 
			
		||||
                        
 | 
			
		||||
@@ -285,7 +282,7 @@ class Gallery(ImageSelect):
 | 
			
		||||
            elif event.button == 3:
 | 
			
		||||
                item = widget.get_item_at(event.x,event.y)
 | 
			
		||||
                if item:
 | 
			
		||||
                    (i,t,b,self.photo) = self.p_map[item]
 | 
			
		||||
                    (i,t,b,self.photo,oid) = self.p_map[item]
 | 
			
		||||
                    self.show_popup(self.photo)
 | 
			
		||||
                return gtk.TRUE
 | 
			
		||||
        elif event.type == gtk.gdk.BUTTON_RELEASE:
 | 
			
		||||
@@ -293,7 +290,7 @@ class Gallery(ImageSelect):
 | 
			
		||||
        elif event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
 | 
			
		||||
            item = widget.get_item_at(event.x,event.y)
 | 
			
		||||
            if item:
 | 
			
		||||
                (i,t,b,self.photo) = self.p_map[item]
 | 
			
		||||
                (i,t,b,self.photo,oid) = self.p_map[item]
 | 
			
		||||
                LocalMediaProperties(self.photo,self.path,self)
 | 
			
		||||
            return gtk.TRUE
 | 
			
		||||
        elif event.type == gtk.gdk.MOTION_NOTIFY:
 | 
			
		||||
@@ -365,7 +362,7 @@ class Gallery(ImageSelect):
 | 
			
		||||
            self.cx = _PAD
 | 
			
		||||
            self.cy = self.cy + _PAD + _IMAGEY
 | 
			
		||||
        else:
 | 
			
		||||
            self.cx = _PAD + self.cx + _IMAGEX
 | 
			
		||||
            self.cx = self.cx + _PAD + _IMAGEX
 | 
			
		||||
        
 | 
			
		||||
    def load_images(self):
 | 
			
		||||
        """clears the currentImages list to free up any cached 
 | 
			
		||||
@@ -502,7 +499,7 @@ class Gallery(ImageSelect):
 | 
			
		||||
        thumbnails, and remove it from the dataobj photo list."""
 | 
			
		||||
 | 
			
		||||
        if self.sel:
 | 
			
		||||
            (i,t,b,photo) = self.p_map[self.sel]
 | 
			
		||||
            (i,t,b,photo,oid) = self.p_map[self.sel]
 | 
			
		||||
            val = self.canvas_list[photo.getReference().getId()]
 | 
			
		||||
            val[0].hide()
 | 
			
		||||
            val[1].hide()
 | 
			
		||||
@@ -591,7 +588,7 @@ class LocalMediaProperties:
 | 
			
		||||
        self.attr_details = self.change_dialog.get_widget("attr_details")
 | 
			
		||||
 | 
			
		||||
        self.attr_list = self.change_dialog.get_widget("attr_list")
 | 
			
		||||
        titles = [(_('Attribute'),-1,150),(_('Value'),-1,100)]
 | 
			
		||||
        titles = [(_('Attribute'),0,150),(_('Value'),0,100)]
 | 
			
		||||
 | 
			
		||||
        self.atree = ListModel.ListModel(self.attr_list,titles,
 | 
			
		||||
                                         self.on_attr_list_select_row,
 | 
			
		||||
@@ -723,7 +720,7 @@ class GlobalMediaProperties:
 | 
			
		||||
 | 
			
		||||
        self.attr_list = self.change_dialog.get_widget("attr_list")
 | 
			
		||||
 | 
			
		||||
        titles = [(_('Attribute'),-1,150),(_('Value'),-1,100)]
 | 
			
		||||
        titles = [(_('Attribute'),0,150),(_('Value'),1,100)]
 | 
			
		||||
 | 
			
		||||
        self.atree = ListModel.ListModel(self.attr_list,titles,
 | 
			
		||||
                                         self.on_attr_list_select_row,
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,9 @@ class ListModel:
 | 
			
		||||
            self.cids.append(name[1])
 | 
			
		||||
            if name[1] != -1:
 | 
			
		||||
                self.tree.append_column(column)
 | 
			
		||||
            
 | 
			
		||||
        self.model.set_sort_column_id(self.cids[0],gtk.SORT_ASCENDING)
 | 
			
		||||
 | 
			
		||||
        if self.cids[0] > 0:
 | 
			
		||||
            self.model.set_sort_column_id(self.cids[0],gtk.SORT_ASCENDING)
 | 
			
		||||
        self.connect_model()
 | 
			
		||||
        
 | 
			
		||||
        if select_func:
 | 
			
		||||
 
 | 
			
		||||
@@ -233,24 +233,27 @@ class MediaView:
 | 
			
		||||
#            self.list.moveto(0)
 | 
			
		||||
#        self.list.thaw()
 | 
			
		||||
 | 
			
		||||
    def create_add_dialog(self,obj):
 | 
			
		||||
    def on_add_clicked(self,obj):
 | 
			
		||||
        """Add a new media object to the media list"""
 | 
			
		||||
        import AddMedia
 | 
			
		||||
        AddMedia.AddMediaObject(self.db,self.load_media)
 | 
			
		||||
 | 
			
		||||
    def on_edit_media_clicked(self,obj):
 | 
			
		||||
    def on_edit_clicked(self,obj):
 | 
			
		||||
        """Edit the properties of an existing media object in the media list"""
 | 
			
		||||
        if len(self.list.selection) <= 0:
 | 
			
		||||
            return
 | 
			
		||||
        object = self.list.get_row_data(self.list.selection[0])
 | 
			
		||||
        ImageSelect.GlobalMediaProperties(self.db,object,self.load_media)
 | 
			
		||||
 | 
			
		||||
        list_store, iter = self.selection.get_selected()
 | 
			
		||||
        if iter:
 | 
			
		||||
            id = list_store.get_value(iter,1)
 | 
			
		||||
            object = self.db.getObject(id)
 | 
			
		||||
            ImageSelect.GlobalMediaProperties(self.db,object,self.load_media)
 | 
			
		||||
 | 
			
		||||
    def on_delete_clicked(self,obj):
 | 
			
		||||
        if len(self.list.selection) <= 0:
 | 
			
		||||
        store,iter = self.selection.get_selected()
 | 
			
		||||
        if not iter:
 | 
			
		||||
            return
 | 
			
		||||
        else:
 | 
			
		||||
            index = self.list.selection[0]
 | 
			
		||||
        mobj = self.list.get_row_data(index)
 | 
			
		||||
 | 
			
		||||
        id = store.get_value(iter,1)
 | 
			
		||||
        mobj = self.db.getObject(id)
 | 
			
		||||
        if self.is_object_used(mobj):
 | 
			
		||||
            ans = ImageSelect.DeleteMediaQuery(mobj,self.db,self.update)
 | 
			
		||||
            QuestionDialog(_('Delete Object'),
 | 
			
		||||
@@ -258,12 +261,11 @@ class MediaView:
 | 
			
		||||
                             "Delete anyway?"),
 | 
			
		||||
                           ans.query_response)
 | 
			
		||||
        else:
 | 
			
		||||
            map = self.db.getObjectMap()
 | 
			
		||||
            del map[mobj.getId()]
 | 
			
		||||
            self.db.removeObject(mobj.getId())
 | 
			
		||||
            Utils.modified()
 | 
			
		||||
            self.update(0)
 | 
			
		||||
 | 
			
		||||
    def is_media_object_used(self,mobj):
 | 
			
		||||
    def is_object_used(self,mobj):
 | 
			
		||||
        for p in self.db.getFamilyMap().values():
 | 
			
		||||
            for o in p.getPhotoList():
 | 
			
		||||
                if o.getReference() == mobj:
 | 
			
		||||
 
 | 
			
		||||
@@ -2252,6 +2252,9 @@ class GrampsDB(Persistent):
 | 
			
		||||
        self.omapIndex = self.omapIndex + 1
 | 
			
		||||
        return index
 | 
			
		||||
 | 
			
		||||
    def getObject(self,id):
 | 
			
		||||
        return self.objectMap[id]
 | 
			
		||||
 | 
			
		||||
    def findObject(self,idVal,map):
 | 
			
		||||
        """finds an Object in the database using the idVal and map
 | 
			
		||||
        variables to translate between the external ID and gramps'
 | 
			
		||||
@@ -2303,6 +2306,9 @@ class GrampsDB(Persistent):
 | 
			
		||||
        self.placeTable[index] = place.getDisplayInfo()
 | 
			
		||||
        return index
 | 
			
		||||
 | 
			
		||||
    def removeObject(self,id):
 | 
			
		||||
        del self.placeMap[id]
 | 
			
		||||
 | 
			
		||||
    def removePlace(self,id):
 | 
			
		||||
        del self.placeMap[id]
 | 
			
		||||
        del self.placeTable[id]
 | 
			
		||||
 
 | 
			
		||||
@@ -311,9 +311,6 @@ class Gramps:
 | 
			
		||||
            "on_edit_active_person" : self.load_active_person,
 | 
			
		||||
            "on_edit_selected_people" : self.load_selected_people,
 | 
			
		||||
            "on_edit_bookmarks_activate" : self.on_edit_bookmarks_activate,
 | 
			
		||||
            "on_edit_media_clicked" : self.media_view.on_edit_media_clicked,
 | 
			
		||||
            "on_edit_place_clicked" : self.place_view.on_edit_clicked,
 | 
			
		||||
            "on_edit_source_clicked" : self.source_view.on_edit_clicked,
 | 
			
		||||
            "on_exit_activate" : self.on_exit_activate,
 | 
			
		||||
            "on_family1_activate" : self.on_family1_activate,
 | 
			
		||||
            "on_find_activate" : self.on_find_activate,
 | 
			
		||||
@@ -326,7 +323,6 @@ class Gramps:
 | 
			
		||||
            "on_pedigree1_activate" : self.on_pedigree1_activate,
 | 
			
		||||
            "on_person_list1_activate" : self.on_person_list1_activate,
 | 
			
		||||
            "on_main_key_release_event" : self.on_main_key_release_event,
 | 
			
		||||
            "on_add_media_clicked" : self.media_view.create_add_dialog,
 | 
			
		||||
            "on_media_activate" : self.on_media_activate,
 | 
			
		||||
            "on_media_list_select_row" : self.media_view.on_select_row,
 | 
			
		||||
            "on_media_list_drag_data_get" : self.media_view.on_drag_data_get,
 | 
			
		||||
@@ -371,6 +367,8 @@ class Gramps:
 | 
			
		||||
            self.source_view.on_edit_clicked(obj)
 | 
			
		||||
        elif cpage == 4:
 | 
			
		||||
            self.place_view.on_edit_clicked(obj)
 | 
			
		||||
        elif cpage == 5:
 | 
			
		||||
            self.media_view.on_edit_clicked(obj)
 | 
			
		||||
 | 
			
		||||
    def add_button_clicked(self,obj):
 | 
			
		||||
        cpage = self.notebook.get_current_page()
 | 
			
		||||
@@ -380,6 +378,8 @@ class Gramps:
 | 
			
		||||
            self.source_view.on_add_clicked(obj)
 | 
			
		||||
        elif cpage == 4:
 | 
			
		||||
            self.place_view.on_add_place_clicked(obj)
 | 
			
		||||
        elif cpage == 5:
 | 
			
		||||
            self.media_view.on_add_clicked(obj)
 | 
			
		||||
 | 
			
		||||
    def remove_button_clicked(self,obj):
 | 
			
		||||
        cpage = self.notebook.get_current_page()
 | 
			
		||||
@@ -389,6 +389,8 @@ class Gramps:
 | 
			
		||||
            self.source_view.on_delete_clicked(obj)
 | 
			
		||||
        elif cpage == 4:
 | 
			
		||||
            self.place_view.on_delete_clicked(obj)
 | 
			
		||||
        elif cpage == 5:
 | 
			
		||||
            self.media_view.on_delete_clicked(obj)
 | 
			
		||||
 | 
			
		||||
    def enable_buttons(self,val):
 | 
			
		||||
        self.addbtn.set_sensitive(val)
 | 
			
		||||
 
 | 
			
		||||
@@ -135,6 +135,8 @@
 | 
			
		||||
 | 
			
		||||
		  <child>
 | 
			
		||||
		    <widget class="GtkImage" id="image">
 | 
			
		||||
		      <property name="width_request">100</property>
 | 
			
		||||
		      <property name="height_request">100</property>
 | 
			
		||||
		      <property name="visible">True</property>
 | 
			
		||||
		      <property name="xalign">0.5</property>
 | 
			
		||||
		      <property name="yalign">0.5</property>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user