summaryrefslogtreecommitdiffstats
path: root/src/libs/widgets/metadata/iptcwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/widgets/metadata/iptcwidget.cpp')
-rw-r--r--src/libs/widgets/metadata/iptcwidget.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/libs/widgets/metadata/iptcwidget.cpp b/src/libs/widgets/metadata/iptcwidget.cpp
new file mode 100644
index 00000000..b0bcb009
--- /dev/null
+++ b/src/libs/widgets/metadata/iptcwidget.cpp
@@ -0,0 +1,167 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2006-02-20
+ * Description : A widget to display IPTC metadata
+ *
+ * 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 "iptcwidget.h"
+#include "iptcwidget.moc"
+
+namespace Digikam
+{
+
+static const char* IptcHumanList[] =
+{
+ "Caption",
+ "City",
+ "Contact",
+ "Copyright",
+ "Credit",
+ "DateCreated",
+ "Headline",
+ "Keywords",
+ "ProvinceState",
+ "Source",
+ "Urgency",
+ "Writer",
+ "-1"
+};
+
+static const char* StandardIptcEntryList[] =
+{
+ "Envelope",
+ "Application2",
+ "-1"
+};
+
+IptcWidget::IptcWidget(TQWidget* parent, const char* name)
+ : MetadataWidget(parent, name)
+{
+ for (int i=0 ; TQString(StandardIptcEntryList[i]) != TQString("-1") ; i++)
+ m_keysFilter << StandardIptcEntryList[i];
+
+ for (int i=0 ; TQString(IptcHumanList[i]) != TQString("-1") ; i++)
+ m_tagsfilter << IptcHumanList[i];
+}
+
+IptcWidget::~IptcWidget()
+{
+}
+
+TQString IptcWidget::getMetadataTitle()
+{
+ return i18n("IPTC Records");
+}
+
+bool IptcWidget::loadFromURL(const KURL& url)
+{
+ setFileName(url.filename());
+
+ if (url.isEmpty())
+ {
+ setMetadata();
+ return false;
+ }
+ else
+ {
+ DMetadata metadata(url.path());
+ TQByteArray iptcData = metadata.getIptc();
+
+ if (iptcData.isEmpty())
+ {
+ setMetadata();
+ return false;
+ }
+ else
+ setMetadata(iptcData);
+ }
+
+ return true;
+}
+
+bool IptcWidget::decodeMetadata()
+{
+ DMetadata metaData;
+ if (!metaData.setIptc(getMetadata()))
+ return false;
+
+ // Update all metadata contents.
+ setMetadataMap(metaData.getIptcTagsDataList(m_keysFilter));
+ return true;
+}
+
+void IptcWidget::buildView()
+{
+ if (getMode() == SIMPLE)
+ {
+ setIfdList(getMetadataMap(), m_tagsfilter);
+ }
+ else
+ {
+ setIfdList(getMetadataMap());
+ }
+
+ MetadataWidget::buildView();
+}
+
+TQString IptcWidget::getTagTitle(const TQString& key)
+{
+ DMetadata meta;
+ TQString title = meta.getIptcTagTitle(key.ascii());
+
+ if (title.isEmpty())
+ return key.section('.', -1);
+
+ return title;
+}
+
+TQString IptcWidget::getTagDescription(const TQString& key)
+{
+ DMetadata meta;
+ TQString desc = meta.getIptcTagDescription(key.ascii());
+
+ if (desc.isEmpty())
+ return i18n("No description available");
+
+ return desc;
+}
+
+void IptcWidget::slotSaveMetadataToFile()
+{
+ KURL url = saveMetadataToFile(i18n("IPTC File to Save"),
+ TQString("*.iptc|"+i18n("IPTC binary Files (*.iptc)")));
+ storeMetadataToFile(url);
+}
+
+} // namespace Digikam
+