File indexing completed on 2024-04-28 04:21:03

0001 // SPDX-FileCopyrightText: 2003-2019 The KPhotoAlbum Development Team
0002 // SPDX-FileCopyrightText: 2021 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "ReReadDialog.h"
0007 
0008 #include <kpaexif/Database.h>
0009 
0010 #include <DB/ImageDB.h>
0011 #include <kpabase/SettingsData.h>
0012 
0013 #include <KConfigGroup>
0014 #include <KLocalizedString>
0015 #include <KMessageBox>
0016 #include <KSharedConfig>
0017 #include <QCheckBox>
0018 #include <QDialogButtonBox>
0019 #include <QGroupBox>
0020 #include <QLabel>
0021 #include <QListWidget>
0022 #include <QPushButton>
0023 #include <QVBoxLayout>
0024 
0025 Exif::ReReadDialog::ReReadDialog(QWidget *parent)
0026     : QDialog(parent)
0027 {
0028     setWindowTitle(i18nc("@title:window", "Read Exif Info from Files"));
0029 
0030     QWidget *top = new QWidget;
0031     QVBoxLayout *lay1 = new QVBoxLayout(top);
0032     setLayout(lay1);
0033     lay1->addWidget(top);
0034 
0035     m_exifDB = new QCheckBox(i18n("Update Exif search database"), top);
0036     lay1->addWidget(m_exifDB);
0037     if (!DB::ImageDB::instance()->exifDB()->isUsable()) {
0038         m_exifDB->hide();
0039     }
0040 
0041     m_date = new QCheckBox(i18n("Update image date"), top);
0042     lay1->addWidget(m_date);
0043 
0044     m_force_date = new QCheckBox(i18n("Use modification date if Exif not found"), top);
0045     lay1->addWidget(m_force_date);
0046 
0047     m_orientation = new QCheckBox(i18n("Update image orientation from Exif information"), top);
0048     lay1->addWidget(m_orientation);
0049 
0050     m_description = new QCheckBox(i18n("Update image description from Exif information"), top);
0051     lay1->addWidget(m_description);
0052 
0053     QGroupBox *box = new QGroupBox(i18n("Affected Files"));
0054     lay1->addWidget(box);
0055 
0056     QHBoxLayout *boxLayout = new QHBoxLayout(box);
0057     m_fileList = new QListWidget;
0058     m_fileList->setSelectionMode(QAbstractItemView::NoSelection);
0059     boxLayout->addWidget(m_fileList);
0060 
0061     connect(m_date, &QCheckBox::toggled, m_force_date, &QCheckBox::setEnabled);
0062     connect(m_date, &QCheckBox::toggled, this, &ReReadDialog::warnAboutDates);
0063 
0064     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0065     buttonBox->button(QDialogButtonBox::Ok)->setShortcut(Qt::CTRL | Qt::Key_Return);
0066     connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
0067     connect(buttonBox, &QDialogButtonBox::accepted, this, &ReReadDialog::readInfo);
0068     lay1->addWidget(buttonBox);
0069 }
0070 
0071 int Exif::ReReadDialog::exec(const DB::FileNameList &list)
0072 {
0073     Settings::SettingsData *opt = Settings::SettingsData::instance();
0074 
0075     m_exifDB->setChecked(opt->updateExifData());
0076     m_date->setChecked(opt->updateImageDate());
0077     m_force_date->setChecked(opt->useModDateIfNoExif());
0078     m_force_date->setEnabled(opt->updateImageDate());
0079     m_orientation->setChecked(opt->updateOrientation());
0080     m_description->setChecked(opt->updateDescription());
0081 
0082     m_list = list;
0083     m_fileList->clear();
0084     m_fileList->addItems(list.toStringList(DB::RelativeToImageRoot));
0085 
0086     return QDialog::exec();
0087 }
0088 
0089 void Exif::ReReadDialog::readInfo()
0090 {
0091     Settings::SettingsData *opt = Settings::SettingsData::instance();
0092 
0093     opt->setUpdateExifData(m_exifDB->isChecked());
0094     opt->setUpdateImageDate(m_date->isChecked());
0095     opt->setUseModDateIfNoExif(m_force_date->isChecked());
0096     opt->setUpdateOrientation(m_orientation->isChecked());
0097     opt->setUpdateDescription(m_description->isChecked());
0098 
0099     KSharedConfig::openConfig()->sync();
0100 
0101     DB::ExifMode mode = DB::EXIFMODE_FORCE;
0102 
0103     if (m_exifDB->isChecked())
0104         mode |= DB::EXIFMODE_DATABASE_UPDATE;
0105 
0106     if (m_date->isChecked())
0107         mode |= DB::EXIFMODE_DATE;
0108     if (m_force_date->isChecked())
0109         mode |= DB::EXIFMODE_USE_IMAGE_DATE_IF_INVALID_EXIF_DATE;
0110     if (m_orientation->isChecked())
0111         mode |= DB::EXIFMODE_ORIENTATION;
0112     if (m_description->isChecked())
0113         mode |= DB::EXIFMODE_DESCRIPTION;
0114 
0115     accept();
0116     DB::ImageDB::instance()->slotReread(m_list, mode);
0117 }
0118 
0119 void Exif::ReReadDialog::warnAboutDates(bool b)
0120 {
0121     if (!b)
0122         return;
0123 
0124     int ret = KMessageBox::warningContinueCancel(this, i18n("<p>Be aware that setting the data from Exif may "
0125                                                             "<b>overwrite</b> data you have previously entered "
0126                                                             "manually using the image configuration dialog.</p>"),
0127                                                  i18n("Override image dates"));
0128     if (ret == KMessageBox::Cancel)
0129         m_date->setChecked(false);
0130 }
0131 
0132 // vi:expandtab:tabstop=4 shiftwidth=4:
0133 
0134 #include "moc_ReReadDialog.cpp"