libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

setup.cc (5781B)


      1 // Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 //
      3 // Use of this source code is governed by a BSD-style
      4 // license that can be found in the LICENSE file.
      5 
      6 #include "tools/flicker_test/setup.h"
      7 
      8 #include <QCompleter>
      9 #include <QFileDialog>
     10 #include <QFileSystemModel>
     11 #include <QMessageBox>
     12 #include <QPushButton>
     13 
     14 namespace jpegxl {
     15 namespace tools {
     16 
     17 FlickerTestWizard::FlickerTestWizard(QWidget* const parent)
     18     : QWizard(parent), settings_("JPEG XL project", "Flickering test") {
     19   ui_.setupUi(this);
     20 
     21   connect(ui_.grayFadingTime, SIGNAL(valueChanged(int)), this,
     22           SLOT(updateTotalGrayTime()));
     23   connect(ui_.grayTime, SIGNAL(valueChanged(int)), this,
     24           SLOT(updateTotalGrayTime()));
     25 
     26   ui_.timingButtonBox->button(QDialogButtonBox::RestoreDefaults)
     27       ->setText(tr("Restore ISO/IEC 29170-2:2015 parameters"));
     28 
     29   setButtonText(QWizard::FinishButton, tr("Start test"));
     30 
     31   QCompleter* const completer = new QCompleter(this);
     32   QFileSystemModel* const model = new QFileSystemModel(completer);
     33   model->setRootPath("/");
     34   model->setFilter(QDir::Dirs);
     35   completer->setModel(model);
     36   ui_.originalFolder->setCompleter(completer);
     37   ui_.alteredFolder->setCompleter(completer);
     38 
     39   const auto parameters = FlickerTestParameters::loadFrom(&settings_);
     40   ui_.originalFolder->setText(parameters.originalFolder);
     41   ui_.alteredFolder->setText(parameters.alteredFolder);
     42   ui_.outputFile->setText(parameters.outputFile);
     43   ui_.advanceTime->setValue(parameters.advanceTimeMSecs);
     44   ui_.viewingTime->setValue(parameters.viewingTimeSecs);
     45   ui_.blankingTime->setValue(parameters.blankingTimeMSecs);
     46   ui_.grayFlickering->setChecked(parameters.gray);
     47   ui_.grayFadingTime->setValue(parameters.grayFadingTimeMSecs);
     48   ui_.grayTime->setValue(parameters.grayTimeMSecs);
     49   ui_.intensityTarget->setValue(parameters.intensityTarget);
     50   ui_.spacing->setValue(parameters.spacing);
     51 
     52   QImage white(256, 256, QImage::Format_RGB32);
     53   white.fill(Qt::white);
     54   ui_.spacingDemo->setOriginalImage(white);
     55   ui_.spacingDemo->setAlteredImage(white);
     56 
     57   connect(this, &QDialog::accepted,
     58           [&] { this->parameters().saveTo(&settings_); });
     59 }
     60 
     61 FlickerTestParameters FlickerTestWizard::parameters() const {
     62   FlickerTestParameters result;
     63   result.originalFolder = ui_.originalFolder->text();
     64   result.alteredFolder = ui_.alteredFolder->text();
     65   result.outputFile = ui_.outputFile->text();
     66   result.advanceTimeMSecs = ui_.advanceTime->value();
     67   result.viewingTimeSecs = ui_.viewingTime->value();
     68   result.blankingTimeMSecs = ui_.blankingTime->value();
     69   result.gray = ui_.grayFlickering->isChecked();
     70   result.grayFadingTimeMSecs = ui_.grayFadingTime->value();
     71   result.grayTimeMSecs = ui_.grayTime->value();
     72   result.intensityTarget = ui_.intensityTarget->value();
     73   result.spacing = ui_.spacing->value();
     74   return result;
     75 }
     76 
     77 void FlickerTestWizard::on_originalFolderBrowseButton_clicked() {
     78   const QString path = QFileDialog::getExistingDirectory(
     79       this, tr("Folder with original images"), ui_.originalFolder->text());
     80   if (!path.isEmpty()) {
     81     ui_.originalFolder->setText(path);
     82   }
     83 }
     84 
     85 void FlickerTestWizard::on_alteredFolderBrowseButton_clicked() {
     86   const QString path = QFileDialog::getExistingDirectory(
     87       this, tr("Folder with altered images"), ui_.alteredFolder->text());
     88   if (!path.isEmpty()) {
     89     ui_.alteredFolder->setText(path);
     90   }
     91 }
     92 
     93 void FlickerTestWizard::on_outputFileBrowseButton_clicked() {
     94   // The overwrite check is disabled here because it is carried out in
     95   // `validateCurrentPage` (called when the user clicks the "Next" button) so
     96   // that it also applies to automatically-reloaded settings.
     97   const QString path = QFileDialog::getSaveFileName(
     98       this, tr("CSV file in which to save the results"), ui_.outputFile->text(),
     99       tr("CSV files (*.csv)"), /*selectedFilter=*/nullptr,
    100       QFileDialog::DontConfirmOverwrite);
    101   if (!path.isEmpty()) {
    102     ui_.outputFile->setText(path);
    103   }
    104 }
    105 
    106 void FlickerTestWizard::on_timingButtonBox_clicked(
    107     QAbstractButton* const button) {
    108   if (ui_.timingButtonBox->standardButton(button) ==
    109       QDialogButtonBox::RestoreDefaults) {
    110     ui_.advanceTime->setValue(100);
    111     ui_.viewingTime->setValue(4);
    112     ui_.blankingTime->setValue(250);
    113     ui_.grayFlickering->setChecked(false);
    114   }
    115 }
    116 
    117 void FlickerTestWizard::updateTotalGrayTime() {
    118   ui_.totalGrayTimeLabel->setText(
    119       tr("Total gray time: %L1&#8239;ms")
    120           .arg(2 * ui_.grayFadingTime->value() + ui_.grayTime->value()));
    121 }
    122 
    123 bool FlickerTestWizard::validateCurrentPage() {
    124   if (currentPage() == ui_.pathsPage && QFile::exists(ui_.outputFile->text())) {
    125     QMessageBox messageBox(this);
    126     messageBox.setIcon(QMessageBox::Warning);
    127     messageBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
    128     messageBox.setWindowTitle(tr("Output file already exists"));
    129     messageBox.setText(tr("The selected output file \"%1\" already exists.")
    130                            .arg(ui_.outputFile->text()));
    131     messageBox.setInformativeText(tr("Do you wish to overwrite it?"));
    132     if (messageBox.exec() == QMessageBox::Cancel) {
    133       return false;
    134     }
    135   } else if (currentPage() == ui_.timesPage) {
    136     if (ui_.grayFlickering->isChecked() &&
    137         2 * ui_.grayFadingTime->value() + ui_.grayTime->value() >
    138             ui_.advanceTime->value()) {
    139       QMessageBox messageBox(this);
    140       messageBox.setIcon(QMessageBox::Warning);
    141       messageBox.setStandardButtons(QMessageBox::Ok);
    142       messageBox.setWindowTitle(tr("Incompatible times selected"));
    143       messageBox.setText(
    144           tr("The total gray time is greater than the advance time."));
    145       messageBox.exec();
    146       return false;
    147     }
    148   }
    149   return QWizard::validateCurrentPage();
    150 }
    151 
    152 }  // namespace tools
    153 }  // namespace jpegxl