diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-19 18:22:05 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-19 18:22:05 +0000 |
commit | 57e10fedbcb8c3e8c6590ff0935dbf017ce5587f (patch) | |
tree | 3000a7649ca4e40e43f9e7feed963236a0b0f56b /kipi-plugins/metadataedit/exifcaption.cpp | |
download | kipi-plugins-57e10fedbcb8c3e8c6590ff0935dbf017ce5587f.tar.gz kipi-plugins-57e10fedbcb8c3e8c6590ff0935dbf017ce5587f.zip |
Import abandoned KDE3 version of kipi plugins
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/libraries/kipi-plugins@1077221 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kipi-plugins/metadataedit/exifcaption.cpp')
-rw-r--r-- | kipi-plugins/metadataedit/exifcaption.cpp | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/kipi-plugins/metadataedit/exifcaption.cpp b/kipi-plugins/metadataedit/exifcaption.cpp new file mode 100644 index 0000000..abab570 --- /dev/null +++ b/kipi-plugins/metadataedit/exifcaption.cpp @@ -0,0 +1,385 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-10-12 + * Description : EXIF caption settings page. + * + * Copyright (C) 2006-2007 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. + * + * ============================================================ */ + +// QT includes. + +#include <qlayout.h> +#include <qhgroupbox.h> +#include <qgroupbox.h> +#include <qlabel.h> +#include <qwhatsthis.h> +#include <qvalidator.h> +#include <qcheckbox.h> + +// KDE includes. + +#include <klocale.h> +#include <kdialog.h> +#include <klineedit.h> +#include <ktextedit.h> +#include <kapplication.h> +#include <kaboutdata.h> +#include <kactivelabel.h> + +// LibKExiv2 includes. + +#include <libkexiv2/kexiv2.h> + +// Local includes. + +#include "pluginsversion.h" +#include "exifcaption.h" +#include "exifcaption.moc" + +namespace KIPIMetadataEditPlugin +{ + +class EXIFCaptionPriv +{ +public: + + EXIFCaptionPriv() + { + documentNameEdit = 0; + imageDescEdit = 0; + artistEdit = 0; + copyrightEdit = 0; + userCommentEdit = 0; + userCommentCheck = 0; + documentNameCheck = 0; + imageDescCheck = 0; + artistCheck = 0; + copyrightCheck = 0; + syncJFIFCommentCheck = 0; + syncHOSTCommentCheck = 0; + syncIPTCCaptionCheck = 0; + } + + QCheckBox *documentNameCheck; + QCheckBox *imageDescCheck; + QCheckBox *artistCheck; + QCheckBox *copyrightCheck; + QCheckBox *userCommentCheck; + QCheckBox *syncJFIFCommentCheck; + QCheckBox *syncHOSTCommentCheck; + QCheckBox *syncIPTCCaptionCheck; + + KTextEdit *userCommentEdit; + + KLineEdit *documentNameEdit; + KLineEdit *imageDescEdit; + KLineEdit *artistEdit; + KLineEdit *copyrightEdit; +}; + +EXIFCaption::EXIFCaption(QWidget* parent) + : QWidget(parent) +{ + d = new EXIFCaptionPriv; + QVBoxLayout *vlay = new QVBoxLayout( parent, 0, KDialog::spacingHint() ); + + // EXIF only accept printable Ascii char. + QRegExp asciiRx("[\x20-\x7F]+$"); + QValidator *asciiValidator = new QRegExpValidator(asciiRx, this); + + // -------------------------------------------------------- + + d->documentNameCheck = new QCheckBox(i18n("Document name (*):"), parent); + d->documentNameEdit = new KLineEdit(parent); + d->documentNameEdit->setValidator(asciiValidator); + vlay->addWidget(d->documentNameCheck); + vlay->addWidget(d->documentNameEdit); + QWhatsThis::add(d->documentNameEdit, i18n("<p>Enter the name of the document from which " + "this image was been scanned. This field is limited " + "to ASCII characters.")); + + // -------------------------------------------------------- + + d->imageDescCheck = new QCheckBox(i18n("Image description (*):"), parent); + d->imageDescEdit = new KLineEdit(parent); + d->imageDescEdit->setValidator(asciiValidator); + vlay->addWidget(d->imageDescCheck); + vlay->addWidget(d->imageDescEdit); + QWhatsThis::add(d->imageDescEdit, i18n("<p>Enter the image title. This field is limited " + "to ASCII characters.")); + + // -------------------------------------------------------- + + d->artistCheck = new QCheckBox(i18n("Artist (*):"), parent); + d->artistEdit = new KLineEdit(parent); + d->artistEdit->setValidator(asciiValidator); + vlay->addWidget(d->artistCheck); + vlay->addWidget(d->artistEdit); + QWhatsThis::add(d->artistEdit, i18n("<p>Enter the image author's name. " + "This field is limited to ASCII characters.")); + + // -------------------------------------------------------- + + d->copyrightCheck = new QCheckBox(i18n("Copyright (*):"), parent); + d->copyrightEdit = new KLineEdit(parent); + d->copyrightEdit->setValidator(asciiValidator); + vlay->addWidget(d->copyrightCheck); + vlay->addWidget(d->copyrightEdit); + QWhatsThis::add(d->copyrightEdit, i18n("<p>Enter the copyright owner of the image. " + "This field is limited to ASCII characters.")); + + // -------------------------------------------------------- + + d->userCommentCheck = new QCheckBox(i18n("Caption:"), parent); + d->userCommentEdit = new KTextEdit(parent); + QWhatsThis::add(d->userCommentEdit, i18n("<p>Enter the image's caption. " + "This field is not limited. UTF8 encoding " + "will be used to save the text.")); + + d->syncHOSTCommentCheck = new QCheckBox(i18n("Sync captions entered through %1") + .arg(KApplication::kApplication()->aboutData()->appName()), + parent); + d->syncJFIFCommentCheck = new QCheckBox(i18n("Sync JFIF Comment section"), parent); + d->syncIPTCCaptionCheck = new QCheckBox(i18n("Sync IPTC caption (warning: limited to 2000 printable " + "Ascii characters set)"), parent); + + vlay->addWidget(d->userCommentCheck); + vlay->addWidget(d->userCommentEdit); + vlay->addWidget(d->syncHOSTCommentCheck); + vlay->addWidget(d->syncJFIFCommentCheck); + vlay->addWidget(d->syncIPTCCaptionCheck); + + // -------------------------------------------------------- + + KActiveLabel *note = new KActiveLabel(i18n("<b>Note: " + "<b><a href='http://en.wikipedia.org/wiki/EXIF'>EXIF</a></b> " + "text tags marked by (*) only support printable " + "<b><a href='http://en.wikipedia.org/wiki/Ascii'>ASCII</a></b> " + "characters set.</b>"), parent); + vlay->addWidget(note); + vlay->addStretch(); + + // -------------------------------------------------------- + + connect(d->documentNameCheck, SIGNAL(toggled(bool)), + d->documentNameEdit, SLOT(setEnabled(bool))); + + connect(d->imageDescCheck, SIGNAL(toggled(bool)), + d->imageDescEdit, SLOT(setEnabled(bool))); + + connect(d->artistCheck, SIGNAL(toggled(bool)), + d->artistEdit, SLOT(setEnabled(bool))); + + connect(d->copyrightCheck, SIGNAL(toggled(bool)), + d->copyrightEdit, SLOT(setEnabled(bool))); + + connect(d->userCommentCheck, SIGNAL(toggled(bool)), + d->userCommentEdit, SLOT(setEnabled(bool))); + + connect(d->userCommentCheck, SIGNAL(toggled(bool)), + d->syncJFIFCommentCheck, SLOT(setEnabled(bool))); + + connect(d->userCommentCheck, SIGNAL(toggled(bool)), + d->syncHOSTCommentCheck, SLOT(setEnabled(bool))); + + connect(d->userCommentCheck, SIGNAL(toggled(bool)), + d->syncIPTCCaptionCheck, SLOT(setEnabled(bool))); + + // -------------------------------------------------------- + + connect(d->documentNameCheck, SIGNAL(toggled(bool)), + this, SIGNAL(signalModified())); + + connect(d->imageDescCheck, SIGNAL(toggled(bool)), + this, SIGNAL(signalModified())); + + connect(d->artistCheck, SIGNAL(toggled(bool)), + this, SIGNAL(signalModified())); + + connect(d->copyrightCheck, SIGNAL(toggled(bool)), + this, SIGNAL(signalModified())); + + connect(d->userCommentCheck, SIGNAL(toggled(bool)), + this, SIGNAL(signalModified())); + + // -------------------------------------------------------- + + connect(d->userCommentEdit, SIGNAL(textChanged()), + this, SIGNAL(signalModified())); + + connect(d->documentNameEdit, SIGNAL(textChanged(const QString &)), + this, SIGNAL(signalModified())); + + connect(d->imageDescEdit, SIGNAL(textChanged(const QString &)), + this, SIGNAL(signalModified())); + + connect(d->artistEdit, SIGNAL(textChanged(const QString &)), + this, SIGNAL(signalModified())); + + connect(d->copyrightEdit, SIGNAL(textChanged(const QString &)), + this, SIGNAL(signalModified())); +} + +EXIFCaption::~EXIFCaption() +{ + delete d; +} + +bool EXIFCaption::syncJFIFCommentIsChecked() +{ + return d->syncJFIFCommentCheck->isChecked(); +} + +bool EXIFCaption::syncHOSTCommentIsChecked() +{ + return d->syncHOSTCommentCheck->isChecked(); +} + +bool EXIFCaption::syncIPTCCaptionIsChecked() +{ + return d->syncIPTCCaptionCheck->isChecked(); +} + +QString EXIFCaption::getEXIFUserComments() +{ + return d->userCommentEdit->text(); +} + +void EXIFCaption::setCheckedSyncJFIFComment(bool c) +{ + d->syncJFIFCommentCheck->setChecked(c); +} + +void EXIFCaption::setCheckedSyncHOSTComment(bool c) +{ + d->syncHOSTCommentCheck->setChecked(c); +} + +void EXIFCaption::setCheckedSyncIPTCCaption(bool c) +{ + d->syncIPTCCaptionCheck->setChecked(c); +} + +void EXIFCaption::readMetadata(QByteArray& exifData) +{ + blockSignals(true); + KExiv2Iface::KExiv2 exiv2Iface; + exiv2Iface.setExif(exifData); + QString data; + + d->documentNameEdit->clear(); + d->documentNameCheck->setChecked(false); + data = exiv2Iface.getExifTagString("Exif.Image.DocumentName", false); + if (!data.isNull()) + { + d->documentNameEdit->setText(data); + d->documentNameCheck->setChecked(true); + } + d->documentNameEdit->setEnabled(d->documentNameCheck->isChecked()); + + d->imageDescEdit->clear(); + d->imageDescCheck->setChecked(false); + data = exiv2Iface.getExifTagString("Exif.Image.ImageDescription", false); + if (!data.isNull()) + { + d->imageDescEdit->setText(data); + d->imageDescCheck->setChecked(true); + } + d->imageDescEdit->setEnabled(d->imageDescCheck->isChecked()); + + d->artistEdit->clear(); + d->artistCheck->setChecked(false); + data = exiv2Iface.getExifTagString("Exif.Image.Artist", false); + if (!data.isNull()) + { + d->artistEdit->setText(data); + d->artistCheck->setChecked(true); + } + d->artistEdit->setEnabled(d->artistCheck->isChecked()); + + d->copyrightEdit->clear(); + d->copyrightCheck->setChecked(false); + data = exiv2Iface.getExifTagString("Exif.Image.Copyright", false); + if (!data.isNull()) + { + d->copyrightEdit->setText(data); + d->copyrightCheck->setChecked(true); + } + d->copyrightEdit->setEnabled(d->copyrightCheck->isChecked()); + + d->userCommentEdit->clear(); + d->userCommentCheck->setChecked(false); + data = exiv2Iface.getExifComment(); + if (!data.isNull()) + { + d->userCommentEdit->setText(data); + d->userCommentCheck->setChecked(true); + } + d->userCommentEdit->setEnabled(d->userCommentCheck->isChecked()); + d->syncJFIFCommentCheck->setEnabled(d->userCommentCheck->isChecked()); + d->syncHOSTCommentCheck->setEnabled(d->userCommentCheck->isChecked()); + d->syncIPTCCaptionCheck->setEnabled(d->userCommentCheck->isChecked()); + + blockSignals(false); +} + +void EXIFCaption::applyMetadata(QByteArray& exifData, QByteArray& iptcData) +{ + KExiv2Iface::KExiv2 exiv2Iface; + exiv2Iface.setExif(exifData); + exiv2Iface.setIptc(iptcData); + + if (d->documentNameCheck->isChecked()) + exiv2Iface.setExifTagString("Exif.Image.DocumentName", d->documentNameEdit->text()); + else + exiv2Iface.removeExifTag("Exif.Image.DocumentName"); + + if (d->imageDescCheck->isChecked()) + exiv2Iface.setExifTagString("Exif.Image.ImageDescription", d->imageDescEdit->text()); + else + exiv2Iface.removeExifTag("Exif.Image.ImageDescription"); + + if (d->artistCheck->isChecked()) + exiv2Iface.setExifTagString("Exif.Image.Artist", d->artistEdit->text()); + else + exiv2Iface.removeExifTag("Exif.Image.Artist"); + + if (d->copyrightCheck->isChecked()) + exiv2Iface.setExifTagString("Exif.Image.Copyright", d->copyrightEdit->text()); + else + exiv2Iface.removeExifTag("Exif.Image.Copyright"); + + if (d->userCommentCheck->isChecked()) + { + exiv2Iface.setExifComment(d->userCommentEdit->text()); + + if (syncJFIFCommentIsChecked()) + exiv2Iface.setComments(d->userCommentEdit->text().utf8()); + + if (syncIPTCCaptionIsChecked()) + exiv2Iface.setIptcTagString("Iptc.Application2.Caption", d->userCommentEdit->text()); + } + else + exiv2Iface.removeExifTag("Exif.Photo.UserComment"); + + exiv2Iface.setImageProgramId(QString("Kipi-plugins"), QString(kipiplugins_version)); + + exifData = exiv2Iface.getExif(); + iptcData = exiv2Iface.getIptc(); +} + +} // namespace KIPIMetadataEditPlugin |