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"