diff options
Diffstat (limited to 'src/libs/widgets/metadata/makernotewidget.cpp')
-rw-r--r-- | src/libs/widgets/metadata/makernotewidget.cpp | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/src/libs/widgets/metadata/makernotewidget.cpp b/src/libs/widgets/metadata/makernotewidget.cpp new file mode 100644 index 00000000..ddd1fe3c --- /dev/null +++ b/src/libs/widgets/metadata/makernotewidget.cpp @@ -0,0 +1,210 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2006-02-20 + * Description : a widget to display non standard Exif metadata + * used by camera makers + * + * Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com> + * + * This program is free software; you can redistribute it + * and/or modify it under the terms of the GNU General + * Public License as published by the Free Software Foundation; + * either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * ============================================================ */ + +// TQt includes. + +#include <tqmap.h> +#include <tqfile.h> + +// KDE includes. + +#include <tdelocale.h> + +// Local includes. + +#include "ddebug.h" +#include "dmetadata.h" +#include "makernotewidget.h" +#include "makernotewidget.moc" + +namespace Digikam +{ + +// This list mix differents tags name used by camera makers. +static const char* MakerNoteHumanList[] = +{ + "AFFocusPos", + "AFMode", + "AFPoint", + "AutofocusMode", + "ColorMode", + "ColorTemperature", + "Contrast", + "DigitalZoom", + "ExposureMode", + "ExposureProgram", + "ExposureCompensation", + "ExposureManualBias", + "Flash", + "FlashBias", + "FlashMode", + "FlashType", + "FlashDevice", + "FNumber", + "Focus" + "FocusDistance", + "FocusMode", + "FocusSetting", + "FocusType", + "Hue", + "HueAdjustment", + "ImageStabilizer", + "ImageStabilization", + "InternalFlash", + "ISOSelection", + "ISOSpeed", + "Lens", + "LensType", + "LensRange", + "Macro", + "MacroFocus", + "MeteringMode", + "NoiseReduction", + "OwnerName", + "Quality", + "Tone", + "ToneComp", + "Saturation", + "Sharpness", + "ShootingMode", + "ShutterSpeedValue", + "SpotMode", + "SubjectDistance", + "WhiteBalance", + "WhiteBalanceBias", + "-1" +}; + +static const char* ExifEntryListToIgnore[] = +{ + "GPSInfo", + "Iop", + "Thumbnail", + "SubImage1", + "SubImage2", + "Image", + "Photo", + "-1" +}; + +MakerNoteWidget::MakerNoteWidget(TQWidget* parent, const char* name) + : MetadataWidget(parent, name) +{ + for (int i=0 ; TQString(ExifEntryListToIgnore[i]) != TQString("-1") ; i++) + m_keysFilter << ExifEntryListToIgnore[i]; + + for (int i=0 ; TQString(MakerNoteHumanList[i]) != TQString("-1") ; i++) + m_tagsfilter << MakerNoteHumanList[i]; +} + +MakerNoteWidget::~MakerNoteWidget() +{ +} + +TQString MakerNoteWidget::getMetadataTitle() +{ + return i18n("MakerNote EXIF Tags"); +} + +bool MakerNoteWidget::loadFromURL(const KURL& url) +{ + setFileName(url.path()); + + if (url.isEmpty()) + { + setMetadata(); + return false; + } + else + { + DMetadata metadata(url.path()); + TQByteArray exifData = metadata.getExif(); + + if (exifData.isEmpty()) + { + setMetadata(); + return false; + } + else + setMetadata(exifData); + } + + return true; +} + +bool MakerNoteWidget::decodeMetadata() +{ + DMetadata metaData; + if (!metaData.setExif(getMetadata())) + return false; + + // Update all metadata contents. + setMetadataMap(metaData.getExifTagsDataList(m_keysFilter, true)); + return true; +} + +void MakerNoteWidget::buildView() +{ + if (getMode() == SIMPLE) + { + setIfdList(getMetadataMap(), m_tagsfilter); + } + else + { + setIfdList(getMetadataMap()); + } + + MetadataWidget::buildView(); +} + +TQString MakerNoteWidget::getTagTitle(const TQString& key) +{ + DMetadata meta; + TQString title = meta.getExifTagTitle(key.ascii()); + + if (title.isEmpty()) + return key.section('.', -1); + + return title; +} + +TQString MakerNoteWidget::getTagDescription(const TQString& key) +{ + DMetadata meta; + TQString desc = meta.getExifTagDescription(key.ascii()); + + if (desc.isEmpty()) + return i18n("No description available"); + + return desc; +} + +void MakerNoteWidget::slotSaveMetadataToFile() +{ + KURL url = saveMetadataToFile(i18n("EXIF File to Save"), + TQString("*.exif|"+i18n("EXIF binary Files (*.exif)"))); + storeMetadataToFile(url); +} + +} // namespace Digikam |