Added a label for XmpTag and IptcTag tags in TAGS_, so now it is: for section, key, key2, func, label in TAGS_ in __display_exif_tags()

svn: r17908
This commit is contained in:
Rob G. Healey 2011-07-09 08:13:13 +00:00
parent ce3a24d543
commit cd6418d90c

View File

@ -83,20 +83,20 @@ else:
#------------------------------------------------ #------------------------------------------------
# support helpers # support helpers
#------------------------------------------------ #------------------------------------------------
def _format_datetime(exif_dt): def _format_datetime(tag_value):
""" """
Convert a python datetime object into a string for display, using the Convert a python datetime object into a string for display, using the
standard Gramps date format. standard Gramps date format.
""" """
if type(exif_dt) is not datetime.datetime: if type(tag_value) is not datetime.datetime:
return '' return ''
date_part = gen.lib.date.Date() date_part = gen.lib.date.Date()
date_part.set_yr_mon_day(exif_dt.year, exif_dt.month, exif_dt.day) date_part.set_yr_mon_day(tag_value.year, tag_value.month, tag_value.day)
date_str = _dd.display(date_part) date_str = _dd.display(date_part)
time_str = _('%(hr)02d:%(min)02d:%(sec)02d') % {'hr': exif_dt.hour, time_str = _('%(hr)02d:%(min)02d:%(sec)02d') % {'hr': tag_value.hour,
'min': exif_dt.minute, 'min': tag_value.minute,
'sec': exif_dt.second} 'sec': tag_value.second}
return _('%(date)s %(time)s') % {'date': date_str, 'time': time_str} return _('%(date)s %(time)s') % {'date': date_str, 'time': time_str}
def _format_gps(tag_value): def _format_gps(tag_value):
@ -106,6 +106,13 @@ def _format_gps(tag_value):
return "%d° %02d' %05.2f\"" % (tag_value[0], tag_value[1], tag_value[2]) return "%d° %02d' %05.2f\"" % (tag_value[0], tag_value[1], tag_value[2])
def _format_time(tag_value):
"""
formats a pyexiv2.Rational() list into a Time format
"""
return "%02d:%02d:%02d" % (tag_value[0], tag_value[1], tag_value[2])
def _parse_datetime(value): def _parse_datetime(value):
""" """
Parse date and time and return a datetime object. Parse date and time and return a datetime object.
@ -152,12 +159,13 @@ def _parse_datetime(value):
_vtypes = [".jpeg", ".jpg", ".jfif", ".exv", ".dng", ".bmp", ".nef", ".png", ".psd", _vtypes = [".jpeg", ".jpg", ".jfif", ".exv", ".dng", ".bmp", ".nef", ".png", ".psd",
".jp2", ".pef", ".srw", ".pgf", ".tiff"] ".jp2", ".pef", ".srw", ".pgf", ".tiff"]
_vtypes.sort() _vtypes.sort()
_VALIDIMAGEMAP = dict( (index, imgtype_) for index, imgtype_ in enumerate(_vtypes) ) _VALIDIMAGEMAP = dict( (index, imgtype) for index, imgtype in enumerate(_vtypes) )
# valid converting types for PIL.Image... # valid converting types for PIL.Image...
_validconvert = list( (_("-- Image Types --"), ".bmp", ".gif", ".jpg", ".msp", _validconvert = list( (".bmp", ".gif", ".jpg", ".msp", ".pcx", ".png", ".ppm", ".tiff", ".xbm") )
".pcx", ".png", ".ppm", ".tiff", ".xbm") ) _validconvert.sort()
# Categories for Separating the nodes of Exif metadata tags...
DESCRIPTION = _("Description") DESCRIPTION = _("Description")
ORIGIN = _("Origin") ORIGIN = _("Origin")
IMAGE = _('Image') IMAGE = _('Image')
@ -168,84 +176,84 @@ ADVANCED = _("Advanced")
# All of the exiv2 tag reference... # All of the exiv2 tag reference...
TAGS_ = [ TAGS_ = [
# Description subclass... # Description subclass...
(DESCRIPTION, 'Exif.Image.Artist', None, None), (DESCRIPTION, 'Exif.Image.ImageDescription', None, None, None),
(DESCRIPTION, 'Exif.Image.Copyright', None, None), (DESCRIPTION, 'Exif.Image.Artist', None, None, None),
(DESCRIPTION, 'Exif.Photo.DateTimeOriginal', None, _format_datetime), (DESCRIPTION, 'Exif.Image.Copyright', None, None, None),
(DESCRIPTION, 'Exif.Photo.DateTimeDigitized', None, _format_datetime), (DESCRIPTION, 'Exif.Photo.DateTimeOriginal', None, _format_datetime, None),
(DESCRIPTION, 'Exif.Image.Rating', None, None), (DESCRIPTION, 'Exif.Image.DateTime', None, _format_datetime, None),
(DESCRIPTION, 'Exif.Image.Rating', None, None, None),
# Origin subclass... # Origin subclass...
(ORIGIN, 'Exif.Image.Software', None, None), (ORIGIN, 'Exif.Image.Software', None, None, None),
(ORIGIN, 'Xmp.MicrosoftPhoto.DateAcquired', None, None), (ORIGIN, 'Xmp.MicrosoftPhoto.DateAcquired', None, None, None),
(ORIGIN, 'Exif.Image.TimeZoneOffset', None, None), (ORIGIN, 'Exif.Image.TimeZoneOffset', None, None, None),
(ORIGIN, 'Exif.Image.SubjectDistance', None, None), (ORIGIN, 'Exif.Image.SubjectDistance', None, None, None),
# Image subclass... # Image subclass...
(IMAGE, 'Exif.Image.ImageDescription', None, None), (IMAGE, 'Exif.Photo.PixelXDimension', None, None, None),
(IMAGE, 'Exif.Photo.DateTimeOriginal', None, _format_datetime), (IMAGE, 'Exif.Photo.PixelYDimension', None, None, None),
(IMAGE, 'Exif.Photo.PixelXDimension', None, None), (IMAGE, 'Exif.Image.Compression', None, None, None),
(IMAGE, 'Exif.Photo.PixelYDimension', None, None), (IMAGE, 'Exif.Image.DocumentName', None, None, None),
(IMAGE, 'Exif.Image.Compression', None, None), (IMAGE, 'Exif.Image.Orientation', None, None, None),
(IMAGE, 'Exif.Image.DocumentName', None, None), (IMAGE, 'Exif.Image.ImageID', None, None, None),
(IMAGE, 'Exif.Image.Orientation', None, None), (IMAGE, 'Exif.Photo.ExifVersion', None, None, None),
(IMAGE, 'Exif.Image.ImageID', None, None),
(IMAGE, 'Exif.Photo.ExifVersion', None, None),
# Camera subclass... # Camera subclass...
(CAMERA, 'Exif.Image.Make', None, None), (CAMERA, 'Exif.Image.Make', None, None, None),
(CAMERA, 'Exif.Image.Model', None, None), (CAMERA, 'Exif.Image.Model', None, None, None),
(CAMERA, 'Exif.Photo.FNumber', None, None), (CAMERA, 'Exif.Photo.FNumber', None, None, None),
(CAMERA, 'Exif.Photo.ExposureTime', None, None), (CAMERA, 'Exif.Photo.ExposureTime', None, None, None),
(CAMERA, 'Exif.Photo.ISOSpeedRatings', None, None), (CAMERA, 'Exif.Photo.ISOSpeedRatings', None, None, None),
(CAMERA, 'Exif.Photo.FocalLength', None, None), (CAMERA, 'Exif.Photo.FocalLength', None, None, None),
(CAMERA, 'Exif.Photo.MeteringMode', None, None), (CAMERA, 'Exif.Photo.MeteringMode', None, None, None),
(CAMERA, 'Exif.Photo.Flash', None, None), (CAMERA, 'Exif.Photo.Flash', None, None, None),
(CAMERA, 'Exif.Image.SelfTimerMode', None, None), (CAMERA, 'Exif.Image.SelfTimerMode', None, None, None),
(CAMERA, 'Exif.Image.CameraSerialNumber', None, None),
# GPS subclass... # GPS subclass...
(GPS, 'Exif.GPSInfo.GPSLatitude', (GPS, 'Exif.GPSInfo.GPSLatitude',
'Exif.GPSInfo.GPSLatitudeRef', _format_gps), 'Exif.GPSInfo.GPSLatitudeRef', _format_gps, None),
(GPS, 'Exif.GPSInfo.GPSLongitude', (GPS, 'Exif.GPSInfo.GPSLongitude',
'Exif.GPSInfo.GPSLongitudeRef', _format_gps), 'Exif.GPSInfo.GPSLongitudeRef', _format_gps, None),
(GPS, 'Exif.GPSInfo.GPSAltitude', (GPS, 'Exif.GPSInfo.GPSAltitude',
'Exif.GPSInfo.GPSAltitudeRef', None), 'Exif.GPSInfo.GPSAltitudeRef', None, None),
(GPS, 'Exif.Image.GPSTag', None, None), (GPS, 'Exif.Image.GPSTag', None, None, None),
(GPS, 'Exif.GPSInfo.GPSTimeStamp', None, _format_gps), (GPS, 'Exif.GPSInfo.GPSTimeStamp', None, _format_time, None),
(GPS, 'Exif.GPSInfo.GPSSatellites', None, None), (GPS, 'Exif.GPSInfo.GPSSatellites', None, None, None),
# Advanced subclass... # Advanced subclass...
(ADVANCED, 'Xmp.MicrosoftPhoto.LensManufacturer', None, None), (ADVANCED, 'Xmp.MicrosoftPhoto.LensManufacturer', None, None, _("Lens Manufacturer")),
(ADVANCED, 'Xmp.MicrosoftPhoto.LensModel', None, None), (ADVANCED, 'Xmp.MicrosoftPhoto.LensModel', None, None, _("Lens Model")),
(ADVANCED, 'Xmp.MicrosoftPhoto.FlashManufacturer', None, None), (ADVANCED, 'Xmp.MicrosoftPhoto.FlashManufacturer', None, None, _("Flash Manufacturer")),
(ADVANCED, 'Xmp.MicrosoftPhoto.FlashModel', None, None), (ADVANCED, 'Xmp.MicrosoftPhoto.FlashModel', None, None, _("Flash Model")),
(ADVANCED, 'Xmp.MicrosoftPhoto.CameraSerialNumber', None, None), (ADVANCED, 'Exif.Image.CameraSerialNumber', None, None, None),
(ADVANCED, 'Exif.Photo.Contrast', None, None), (ADVANCED, 'Exif.Photo.Contrast', None, None, _("Contrast")),
(ADVANCED, 'Exif.Photo.LightSource', None, None), (ADVANCED, 'Exif.Photo.LightSource', None, None, _("Light Source")),
(ADVANCED, 'Exif.Photo.ExposureProgram', None, None), (ADVANCED, 'Exif.Photo.ExposureProgram', None, None, _("Exposure Program")),
(ADVANCED, 'Exif.Photo.Saturation', None, None), (ADVANCED, 'Exif.Photo.Saturation', None, None, _("Saturation")),
(ADVANCED, 'Exif.Photo.Sharpness', None, None), (ADVANCED, 'Exif.Photo.Sharpness', None, None, _("Sharpness")),
(ADVANCED, 'Exif.Photo.WhiteBalance', None, None), (ADVANCED, 'Exif.Photo.WhiteBalance', None, None, _("White Balance")),
(ADVANCED, 'Exif.Image.ExifTag', None, None), (ADVANCED, 'Exif.Image.ExifTag', None, None, None),
(ADVANCED, 'Exif.Image.BatteryLevel', None, None), (ADVANCED, 'Exif.Image.BatteryLevel', None, None, None),
(ADVANCED, 'Exif.Image.XPKeywords', None, None), (ADVANCED, 'Exif.Image.XPKeywords', None, None, None),
(ADVANCED, 'Exif.Image.XPComment', None, None), (ADVANCED, 'Exif.Image.XPComment', None, None, None),
(ADVANCED, 'Exif.Image.XPSubject', None, None) ] (ADVANCED, 'Exif.Image.XPSubject', None, None, None),
(ADVANCED, 'Exif.Photo.DateTimeDigitized', None, _format_datetime, None)
]
# set up Exif keys for Image Exif metadata keypairs... # set up Exif keys for Image Exif metadata keypairs...
_DATAMAP = { _DATAMAP = {
"Exif.Image.ImageDescription" : "Description", "Exif.Image.ImageDescription" : "Description",
"Exif.Photo.DateTimeOriginal" : "Original",
"Exif.Image.DateTime" : "Modified", "Exif.Image.DateTime" : "Modified",
"Exif.Image.Artist" : "Artist", "Exif.Image.Artist" : "Artist",
"Exif.Image.Copyright" : "Copyright", "Exif.Image.Copyright" : "Copyright",
"Exif.Photo.DateTimeOriginal" : "Original",
"Exif.Photo.DateTimeDigitized" : "Digitized",
"Exif.GPSInfo.GPSLatitudeRef" : "LatitudeRef", "Exif.GPSInfo.GPSLatitudeRef" : "LatitudeRef",
"Exif.GPSInfo.GPSLatitude" : "Latitude", "Exif.GPSInfo.GPSLatitude" : "Latitude",
"Exif.GPSInfo.GPSLongitudeRef" : "LongitudeRef", "Exif.GPSInfo.GPSLongitudeRef" : "LongitudeRef",
"Exif.GPSInfo.GPSLongitude" : "Longitude", "Exif.GPSInfo.GPSLongitude" : "Longitude",
"Exif.GPSInfo.GPSAltitudeRef" : "AltitudeRef", "Exif.GPSInfo.GPSAltitudeRef" : "AltitudeRef",
"Exif.GPSInfo.GPSAltitude" : "Altitude"} "Exif.GPSInfo.GPSAltitude" : "Altitude",
"Exif.Photo.DateTimeDigitized" : "Digitized" }
_DATAMAP = dict((key, val) for key, val in _DATAMAP.items() ) _DATAMAP = dict((key, val) for key, val in _DATAMAP.items() )
_DATAMAP.update( (val, key) for key, val in _DATAMAP.items() ) _DATAMAP.update( (val, key) for key, val in _DATAMAP.items() )
@ -381,7 +389,7 @@ class EditExifMetadata(Gramplet):
main_vbox.pack_start(gtk.HSeparator(), expand =False, fill =True, padding =0) main_vbox.pack_start(gtk.HSeparator(), expand =False, fill =True, padding =0)
# Thumbnail, ImageType, and Convert buttons... # Thumbnail, ImageType, and Convert buttons...
new_hbox = gtk.HBox() new_hbox = gtk.HBox(False, 0)
main_vbox.pack_start(new_hbox, expand =False, fill =True, padding =5) main_vbox.pack_start(new_hbox, expand =False, fill =True, padding =5)
new_hbox.show() new_hbox.show()
@ -397,11 +405,12 @@ class EditExifMetadata(Gramplet):
# Image Type... # Image Type...
event_box = gtk.EventBox() event_box = gtk.EventBox()
event_box.set_size_request(150, 30) ## event_box.set_size_request(150, 30)
new_hbox.pack_start(event_box, expand =False, fill =True, padding =5) new_hbox.pack_start(event_box, expand =False, fill =True, padding =5)
event_box.show() event_box.show()
combo_box = gtk.combo_box_new_text() combo_box = gtk.combo_box_new_text()
combo_box.append_text(_("--Image Types--"))
combo_box.set_active(0) combo_box.set_active(0)
combo_box.set_sensitive(False) combo_box.set_sensitive(False)
event_box.add(combo_box) event_box.add(combo_box)
@ -455,7 +464,7 @@ class EditExifMetadata(Gramplet):
""" """
top = gtk.TreeView() top = gtk.TreeView()
titles = [(_('Key'), 1, 160), titles = [(_('Key'), 1, 200),
(_('Value'), 2, 290)] (_('Value'), 2, 290)]
self.model = ListModel(top, titles, list_mode="tree") self.model = ListModel(top, titles, list_mode="tree")
return top return top
@ -473,22 +482,22 @@ class EditExifMetadata(Gramplet):
# Help will never be disabled... # Help will never be disabled...
""" """
# deactivate all buttons except Help...
self.deactivate_buttons(["All"])
db = self.dbstate.db db = self.dbstate.db
# self.update() imagefntype_ = []
# display all button tooltips only... # display all button tooltips only...
# 1st argument is for Fields, 2nd argument is for Buttons... # 1st argument is for Fields, 2nd argument is for Buttons...
self._setup_widget_tips(fields =False, buttons =True) self._setup_widget_tips(fields =False, buttons =True)
# clears all labels and display area... # clears all labels and display area...
for widgetname_ in ["MediaLabel", "MimeType", "ImageSize", "MessageArea", "Total"]: for widget in ["MediaLabel", "MimeType", "ImageSize", "MessageArea", "Total"]:
self.exif_widgets[widgetname_].set_text("") self.exif_widgets[widget].set_text("")
self.model.clear() self.model.clear()
self.sections = {} self.sections = {}
# deactivate Convert and ImageType buttons...
self.deactivate_buttons(["Convert", "ImageType"])
# set Message Ares to Select... # set Message Ares to Select...
self.exif_widgets["MessageArea"].set_text(_("Select an image to begin...")) self.exif_widgets["MessageArea"].set_text(_("Select an image to begin..."))
@ -538,13 +547,13 @@ class EditExifMetadata(Gramplet):
if self.extension not in _VALIDIMAGEMAP.values(): if self.extension not in _VALIDIMAGEMAP.values():
self.activate_buttons(["ImageType"]) self.activate_buttons(["ImageType"])
imageconvert_ = _validconvert imagefntype_ = _validconvert
if self.extension in imageconvert_: if self.extension in imagefntype_:
imageconvert_.remove(self.extension) imagefntype_.remove(self.extension)
self._VCONVERTMAP = dict( (index, imgtype_) for index, imgtype_ in enumerate(imageconvert_) ) self._VCONVERTMAP = dict( (index, imgtype) for index, imgtype in enumerate(imagefntype_) )
for imgtype_ in self._VCONVERTMAP.values(): for imgtype in self._VCONVERTMAP.values():
self.exif_widgets["ImageType"].append_text(imgtype_) self.exif_widgets["ImageType"].append_text(imgtype)
self.exif_widgets["ImageType"].set_active(0) self.exif_widgets["ImageType"].set_active(0)
else: else:
self.activate_buttons(["Edit"]) self.activate_buttons(["Edit"])
@ -599,7 +608,7 @@ class EditExifMetadata(Gramplet):
self.exif_widgets["MessageArea"].set_text(_("Please choose a different image...")) self.exif_widgets["MessageArea"].set_text(_("Please choose a different image..."))
return return
def __display_exif_tags(self, metadatatags_ =None): def __display_exif_tags(self):
""" """
Display the exif tags. Display the exif tags.
""" """
@ -618,7 +627,7 @@ class EditExifMetadata(Gramplet):
has_metadata = False has_metadata = False
if has_metadata: if has_metadata:
for section, key, key2, func in TAGS_: for section, key, key2, func, label in TAGS_:
if key in metadatatags_: if key in metadatatags_:
if section not in self.sections: if section not in self.sections:
node = self.model.add([section, '']) node = self.model.add([section, ''])
@ -644,21 +653,26 @@ class EditExifMetadata(Gramplet):
has_metadata = False has_metadata = False
if has_metadata: if has_metadata:
for section, key, key2, func in TAGS_: for section, key, key2, func, label in TAGS_:
if key in metadatatags_: if key in metadatatags_:
if section not in self.sections: if section not in self.sections:
node = self.model.add([section, '']) node = self.model.add([section, ''])
self.sections[section] = node self.sections[section] = node
else: else:
node = self.sections[section] node = self.sections[section]
tag = self.plugin_image[key] tag = self.plugin_image[key]
if func: if func:
label = tag.label
human_value = func(tag.value) human_value = func(tag.value)
elif ("Xmp" in key or "Iptc" in key):
human_value = self._get_value(key)
else: else:
label = tag.value
human_value = tag.human_value human_value = tag.human_value
if key2: if key2:
human_value += ' ' + self.plugin_image[key2].human_value human_value += ' ' + self.plugin_image[key2].human_value
self.model.add((tag.label, human_value), node =node) self.model.add((label, human_value), node =node)
self.model.tree.expand_all() self.model.tree.expand_all()
# update has_data functionality... # update has_data functionality...
@ -1037,23 +1051,27 @@ class EditExifMetadata(Gramplet):
addonwiki = 'Edit Image Exif Metadata' addonwiki = 'Edit Image Exif Metadata'
GrampsDisplay.help(webpage =addonwiki) GrampsDisplay.help(webpage =addonwiki)
def activate_buttons(self, ButtonList): def activate_buttons(self, buttonlist):
""" """
Enable/ activate the buttons that are in ButtonList Enable/ activate the buttons that are in buttonlist
""" """
for widgetname_ in ButtonList: for widget in buttonlist:
self.exif_widgets[widgetname_].set_sensitive(True) self.exif_widgets[widget].set_sensitive(True)
def deactivate_buttons(self, ButtonList): def deactivate_buttons(self, buttonlist):
""" """
disable/ de-activate buttons in ButtonList disable/ de-activate buttons in buttonlist
*** if All, then disable ALL buttons in the current display... *** if All, then disable ALL buttons in the current display...
""" """
for widgetname_ in ButtonList: if buttonlist == ["All"]:
self.exif_widgets[widgetname_].set_sensitive(False) buttonlist = [(buttonname) for buttonname in _BUTTONTIPS.keys()
if buttonname is not "Help"]
for widget in buttonlist:
self.exif_widgets[widget].set_sensitive(False)
def active_buttons(self, obj): def active_buttons(self, obj):
""" """
@ -1138,7 +1156,7 @@ class EditExifMetadata(Gramplet):
self._setup_widget_tips(fields =True, buttons = True) self._setup_widget_tips(fields =True, buttons = True)
# display all data fields and their values... # display all data fields and their values...
self.EditArea(self.plugin_image) self.__edit_area()
def __build_edit_gui(self): def __build_edit_gui(self):
""" """
@ -1227,10 +1245,6 @@ class EditExifMetadata(Gramplet):
self.dates[widget] = None self.dates[widget] = None
# if there is text in the modified Date/ Time field, disable editing...
if self.exif_widgets["Modified"].get_text():
self.exif_widgets["Modified"].set_editable(False)
# GPS coordinates... # GPS coordinates...
latlong_frame = gtk.Frame(_("Latitude/ Longitude/ Altitude GPS coordinates")) latlong_frame = gtk.Frame(_("Latitude/ Longitude/ Altitude GPS coordinates"))
latlong_frame.set_size_request(470, 125) latlong_frame.set_size_request(470, 125)
@ -1318,7 +1332,7 @@ class EditExifMetadata(Gramplet):
# Re -display the edit area button... # Re -display the edit area button...
hsccc_box.add(self.__create_button( hsccc_box.add(self.__create_button(
"Copy", False, [self.EditArea], gtk.STOCK_COPY, True) ) "Copy", False, [self.__edit_area], gtk.STOCK_COPY, True) )
# Close button... # Close button...
hsccc_box.add(self.__create_button( hsccc_box.add(self.__create_button(
@ -1394,7 +1408,7 @@ class EditExifMetadata(Gramplet):
for widget in _TOOLTIPS.keys(): for widget in _TOOLTIPS.keys():
self.exif_widgets[widget].set_text("") self.exif_widgets[widget].set_text("")
def EditArea(self, mediadatatags_ =None): def __edit_area(self):
""" """
displays the image Exif metadata in the Edit Area... displays the image Exif metadata in the Edit Area...
""" """
@ -1404,27 +1418,26 @@ class EditExifMetadata(Gramplet):
mediadatatags_ = [keytag_ for keytag_ in mediadatatags_ if keytag_ in _DATAMAP] mediadatatags_ = [keytag_ for keytag_ in mediadatatags_ if keytag_ in _DATAMAP]
for keytag_ in mediadatatags_: for keytag_ in mediadatatags_:
widgetname_ = _DATAMAP[keytag_] widget = _DATAMAP[keytag_]
tagValue = self._get_value(keytag_) tag_value = self._get_value(keytag_)
if tagValue: if tag_value:
if widgetname_ in ["Description", "Artist", "Copyright"]: if widget in ["Description", "Artist", "Copyright"]:
self.exif_widgets[widgetname_].set_text(tagValue) self.exif_widgets[widget].set_text(tag_value)
# Last Changed/ Modified... # Last Changed/ Modified...
elif widgetname_ in ["Modified", "Original"]: elif widget in ["Modified", "Original"]:
use_date = _format_datetime(tagValue) use_date = _format_datetime(tag_value)
if use_date: if use_date:
self.exif_widgets[widgetname_].set_text(use_date) self.exif_widgets[widget].set_text(use_date)
self.exif_widgets["Modified"].set_editable(False) if (widget == "Modified" and tag_value):
else: self.exif_widgets[widget].set_editable(False)
self.exif_widgets["Modified"].set_editable(True)
# LatitudeRef, Latitude, LongitudeRef, Longitude... # LatitudeRef, Latitude, LongitudeRef, Longitude...
elif widgetname_ == "Latitude": elif widget == "Latitude":
latitude, longitude = tagValue, self._get_value(_DATAMAP["Longitude"]) latitude, longitude = tag_value, self._get_value(_DATAMAP["Longitude"])
# if latitude and longitude exist, display them? # if latitude and longitude exist, display them?
if (latitude and longitude): if (latitude and longitude):
@ -1441,26 +1454,24 @@ class EditExifMetadata(Gramplet):
if (not latfail and not longfail): if (not latfail and not longfail):
# Latitude Direction Reference # Latitude Direction Reference
LatRef = self._get_value(_DATAMAP["LatitudeRef"] ) latref = self._get_value(_DATAMAP["LatitudeRef"] )
# Longitude Direction Reference # Longitude Direction Reference
LongRef = self._get_value(_DATAMAP["LongitudeRef"] ) longref = self._get_value(_DATAMAP["LongitudeRef"] )
# set display for Latitude GPS coordinates # set display for Latitude GPS coordinates
latitude = """%s° %s %s%s""" % (latdeg, latmin, latsec, LatRef) latitude = """%s° %s %s%s""" % (latdeg, latmin, latsec, latref)
self.exif_widgets["Latitude"].set_text(latitude) self.exif_widgets["Latitude"].set_text(latitude)
# set display for Longitude GPS coordinates # set display for Longitude GPS coordinates
longitude = """%s° %s %s%s""" % (longdeg, longmin, longsec, LongRef) longitude = """%s° %s %s%s""" % (longdeg, longmin, longsec, longref)
self.exif_widgets["Longitude"].set_text(longitude) self.exif_widgets["Longitude"].set_text(longitude)
# latitude, longitude = self.__convert2dms(self.plugin_image)
self.exif_widgets["Latitude"].validate() self.exif_widgets["Latitude"].validate()
self.exif_widgets["Longitude"].validate() self.exif_widgets["Longitude"].validate()
elif widgetname_ == "Altitude": elif widget == "Altitude":
altitude = tagValue altitude = tag_value
AltitudeRef = self._get_value(_DATAMAP["AltitudeRef"]) AltitudeRef = self._get_value(_DATAMAP["AltitudeRef"])
if (altitude and AltitudeRef): if (altitude and AltitudeRef):
@ -1468,7 +1479,7 @@ class EditExifMetadata(Gramplet):
if altitude: if altitude:
if AltitudeRef == "1": if AltitudeRef == "1":
altitude = "-" + altitude altitude = "-" + altitude
self.exif_widgets[widgetname_].set_text(altitude) self.exif_widgets[widget].set_text(altitude)
else: else:
# set Edit Message Area to None... # set Edit Message Area to None...
@ -1592,60 +1603,56 @@ class EditExifMetadata(Gramplet):
gets the information from the plugin data fields gets the information from the plugin data fields
and sets the keytag_ = keyvalue image metadata and sets the keytag_ = keyvalue image metadata
""" """
db = self.dbstate.db db = self.dbstate.db
# get a copy of all the widgets... # get a copy of all the widgets...
datatags_ = ( (widget, self.exif_widgets[widget].get_text() ) for widget in _TOOLTIPS.keys() ) datatags_ = ( (widget, self.exif_widgets[widget].get_text() ) for widget in _TOOLTIPS.keys() )
for widgetname_, widgetvalue_ in datatags_: for widget, widgetvalu in datatags_:
# Exif Label, Description, Artist, Copyright... # Description, Artist, Copyright...
if widgetname_ in ["Description", "Artist", "Copyright"]: if widget in ["Description", "Artist", "Copyright"]:
self._set_value(_DATAMAP[widgetname_], widgetvalue_) self._set_value(_DATAMAP[widget], widgetvalu)
# Modify Date/ Time... # Modify Date/ Time...
elif widgetname_ == "Modified": elif widget == "Modified":
date1 = self.dates["Modified"] wigetvalue_ = self.dates["Modified"] if not None else datetime.datetime.now()
widgetvalue_ = date1 if date1 is not None else datetime.datetime.now() self._set_value(_DATAMAP[widget], widgetvalu)
self._set_value(_DATAMAP[widgetname_], widgetvalue_)
# display modified date in its cell... # display modified date in its cell...
displayed = _format_datetime(widgetvalue_) displayed = _format_datetime(widgetvalu)
if displayed: if displayed:
self.exif_widgets[widgetname_].set_text(displayed) self.exif_widgets[widget].set_text(displayed)
# Original Date/ Time... # Original Date/ Time...
elif widgetname_ == "Original": elif widget == "Original":
widgetvalue_ = self.dates["Original"] widgetvalu = self.dates["Original"]if not None else False
if widgetvalue_ is not None: if widgetvalu:
self._set_value(_DATAMAP[widgetname_], widgetvalue_) self._set_value(_DATAMAP[widget], widgetvalu)
# modify the media object date if it is not already set? # modify the media object date if it is not already set?
mediaobj_date = self.orig_image.get_date_object() mediaobj_dt = self.orig_image.get_date_object()
if mediaobj_date.is_empty(): if mediaobj_dt.is_empty():
objdate = gen.lib.date.Date() objdate_ = gen.lib.date.Date()
try: try:
objdate.set_yr_mon_day(widgetvalue_.get_year(), objdate_.set_yr_mon_day(widgetvalu.get_year(),
widgetvalue_.get_month(), widgetvalu.get_month(),
widgetvalue_.get_day() ) widgetvalu.get_day() )
gooddate = True gooddate = True
except ValueError: except ValueError:
gooddate = False gooddate = False
if gooddate: if gooddate:
# begin database tranaction to save media object's date... # begin database tranaction to save media object's date...
with DbTxn(_("Create Date Object"), db) as trans: with DbTxn(_("Create Date Object"), db) as trans:
self.orig_image.set_date_object(objdate) self.orig_image.set_date_object(objdate_)
db.disable_signals()
db.commit_media_object(self.orig_image, trans) db.commit_media_object(self.orig_image, trans)
db.enable_signals()
db.request_rebuild() db.request_rebuild()
# Latitude/ Longitude... # Latitude/ Longitude...
elif widgetname_ == "Latitude": elif widget == "Latitude":
latitude = self.exif_widgets["Latitude"].get_text() latitude = self.exif_widgets["Latitude"].get_text()
longitude = self.exif_widgets["Longitude"].get_text() longitude = self.exif_widgets["Longitude"].get_text()
if (latitude and longitude): if (latitude and longitude):
@ -1684,19 +1691,19 @@ class EditExifMetadata(Gramplet):
self._set_value(_DATAMAP["Longitude"], longitude) self._set_value(_DATAMAP["Longitude"], longitude)
# Altitude, and Altitude Reference... # Altitude, and Altitude Reference...
elif widgetname_ == "Altitude": elif widget == "Altitude":
if widgetvalue_: if widgetvalu:
if "-" in widgetvalue_: if "-" in widgetvalu:
widgetvalue_= widgetvalue_.replace("-", "") widgetvalu= widgetvalu.replace("-", "")
altituderef = "1" altituderef = "1"
else: else:
altituderef = "0" altituderef = "0"
# convert altitude to pyexiv2.Rational for saving... # convert altitude to pyexiv2.Rational for saving...
widgetvalue_ = altitude_to_rational(widgetvalue_) widgetvalu = altitude_to_rational(widgetvalu)
self._set_value(_DATAMAP["AltitudeRef"], altituderef) self._set_value(_DATAMAP["AltitudeRef"], altituderef)
self._set_value(_DATAMAP[widgetname_], widgetvalue_) self._set_value(_DATAMAP[widget], widgetvalu)
# writes all Exif Metadata to image even if the fields are all empty so as to remove the value... # writes all Exif Metadata to image even if the fields are all empty so as to remove the value...
self.write_metadata(self.plugin_image) self.write_metadata(self.plugin_image)