You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
digikam/digikam/libs/widgets/metadata/makernotewidget.cpp

211 lines
4.5 KiB

/* ============================================================
*
* 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