3
3
* ----------------------------------------------------------------------
4
4
* Copyright (C) 2006,2007 Giuseppe Rota
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
19
* ----------------------------------------------------------------------
64
64
models_in_gui[0] = DEBEVEC;
65
65
models_in_gui[1] = ROBERTSON;
67
m_Ui->tableWidget->setHorizontalHeaderLabels(QStringList()<< tr("Image Filename") << tr("Exposure"));
68
m_Ui->tableWidget->resizeColumnsToContents();
67
m_Ui->tableWidget->setHorizontalHeaderLabels(QStringList()<< tr("Image Filename") << tr("Exposure"));
68
m_Ui->tableWidget->resizeColumnsToContents();
70
EVgang = new Gang(m_Ui->EVSlider, m_Ui->ImageEVdsb, NULL, NULL, NULL,NULL, -10,10,0);
72
if ( !luminance_options.isShowFirstPageWizard() )
74
m_Ui->NextFinishButton->setEnabled(false);
75
m_Ui->pagestack->setCurrentIndex(1);
78
m_Ui->progressBar->hide();
79
m_Ui->textEdit->hide();
85
m_Ui->pagestack->setCurrentIndex(1);
87
QMetaObject::invokeMethod(this, "loadInputFiles", Qt::QueuedConnection,
88
Q_ARG(QStringList, files), Q_ARG(int, files.size()));
70
EVgang = new Gang(m_Ui->EVSlider, m_Ui->ImageEVdsb, NULL, NULL, NULL,NULL, -10,10,0);
72
if ( !luminance_options.isShowFirstPageWizard() )
74
m_Ui->NextFinishButton->setEnabled(false);
75
m_Ui->pagestack->setCurrentIndex(1);
78
m_Ui->progressBar->hide();
79
m_Ui->textEdit->hide();
85
m_Ui->pagestack->setCurrentIndex(1);
87
QMetaObject::invokeMethod(this, "loadInputFiles", Qt::QueuedConnection,
88
Q_ARG(QStringList, files), Q_ARG(int, files.size()));
92
92
HdrWizard::~HdrWizard()
95
95
qDebug() << "HdrWizard::~HdrWizard()";
98
QStringList fnames = hdrCreationManager->getFileList();
99
int n = fnames.size();
101
for (int i = 0; i < n; i++)
103
QString fname = hdrCreationManager->getFileList().at(i);
104
QFileInfo qfi(fname);
105
QString thumb_name = QString(luminance_options.getTempDir() + "/"+ qfi.completeBaseName() + ".thumb.jpg");
106
QFile::remove(thumb_name);
107
thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
108
QFile::remove(thumb_name);
112
delete hdrCreationManager;
98
QStringList fnames = hdrCreationManager->getFileList();
99
int n = fnames.size();
101
for (int i = 0; i < n; i++)
103
QString fname = hdrCreationManager->getFileList().at(i);
104
QFileInfo qfi(fname);
105
QString thumb_name = QString(luminance_options.getTempDir() + "/"+ qfi.completeBaseName() + ".thumb.jpg");
106
QFile::remove(thumb_name);
107
thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
108
QFile::remove(thumb_name);
112
delete hdrCreationManager;
115
115
void HdrWizard::setupConnections()
117
117
connect(EVgang, SIGNAL(finished()), this, SLOT(editingEVfinished()));
118
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
120
connect(m_Ui->NextFinishButton,SIGNAL(clicked()),this,SLOT(NextFinishButtonClicked()));
121
connect(m_Ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
122
connect(m_Ui->pagestack,SIGNAL(currentChanged(int)),this,SLOT(currentPageChangedInto(int)));
124
connect(m_Ui->predefConfigsComboBox,SIGNAL(activated(int)),this,
118
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
120
connect(m_Ui->NextFinishButton,SIGNAL(clicked()),this,SLOT(NextFinishButtonClicked()));
121
connect(m_Ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
122
connect(m_Ui->pagestack,SIGNAL(currentChanged(int)),this,SLOT(currentPageChangedInto(int)));
124
connect(m_Ui->predefConfigsComboBox,SIGNAL(activated(int)),this,
125
125
SLOT(predefConfigsComboBoxActivated(int)));
126
connect(m_Ui->antighostRespCurveCombobox,SIGNAL(activated(int)),this,
126
connect(m_Ui->antighostRespCurveCombobox,SIGNAL(activated(int)),this,
127
127
SLOT(antighostRespCurveComboboxActivated(int)));
128
connect(m_Ui->customConfigCheckBox,SIGNAL(toggled(bool)),this,
128
connect(m_Ui->customConfigCheckBox,SIGNAL(toggled(bool)),this,
129
129
SLOT(customConfigCheckBoxToggled(bool)));
130
connect(m_Ui->triGaussPlateauComboBox,SIGNAL(activated(int)),this,
130
connect(m_Ui->triGaussPlateauComboBox,SIGNAL(activated(int)),this,
131
131
SLOT(triGaussPlateauComboBoxActivated(int)));
132
connect(m_Ui->predefRespCurveRadioButton,SIGNAL(toggled(bool)),this,
132
connect(m_Ui->predefRespCurveRadioButton,SIGNAL(toggled(bool)),this,
133
133
SLOT(predefRespCurveRadioButtonToggled(bool)));
134
connect(m_Ui->gammaLinLogComboBox,SIGNAL(activated(int)),this,
134
connect(m_Ui->gammaLinLogComboBox,SIGNAL(activated(int)),this,
135
135
SLOT(gammaLinLogComboBoxActivated(int)));
136
connect(m_Ui->loadRespCurveFromFileCheckbox,SIGNAL(toggled(bool)),this,
136
connect(m_Ui->loadRespCurveFromFileCheckbox,SIGNAL(toggled(bool)),this,
137
137
SLOT(loadRespCurveFromFileCheckboxToggled(bool)));
138
connect(m_Ui->loadRespCurveFileButton,SIGNAL(clicked()),this,
138
connect(m_Ui->loadRespCurveFileButton,SIGNAL(clicked()),this,
139
139
SLOT(loadRespCurveFileButtonClicked()));
140
connect(m_Ui->saveRespCurveToFileCheckbox,SIGNAL(toggled(bool)),this,
140
connect(m_Ui->saveRespCurveToFileCheckbox,SIGNAL(toggled(bool)),this,
141
141
SLOT(saveRespCurveToFileCheckboxToggled(bool)));
142
connect(m_Ui->saveRespCurveFileButton,SIGNAL(clicked()),this,
142
connect(m_Ui->saveRespCurveFileButton,SIGNAL(clicked()),this,
143
143
SLOT(saveRespCurveFileButtonClicked()));
144
connect(m_Ui->modelComboBox,SIGNAL(activated(int)),this,
144
connect(m_Ui->modelComboBox,SIGNAL(activated(int)),this,
145
145
SLOT(modelComboBoxActivated(int)));
146
connect(m_Ui->RespCurveFileLoadedLineEdit,SIGNAL(textChanged(const QString&)),this,
146
connect(m_Ui->RespCurveFileLoadedLineEdit,SIGNAL(textChanged(const QString&)),this,
147
147
SLOT(loadRespCurveFilename(const QString&)));
148
connect(m_Ui->loadImagesButton,SIGNAL(clicked()),this,SLOT(loadImagesButtonClicked()));
149
connect(m_Ui->removeImageButton,SIGNAL(clicked()),this,SLOT(removeImageButtonClicked()));
150
connect(m_Ui->clearListButton,SIGNAL(clicked()),this,SLOT(clearListButtonClicked()));
148
connect(m_Ui->loadImagesButton,SIGNAL(clicked()),this,SLOT(loadImagesButtonClicked()));
149
connect(m_Ui->removeImageButton,SIGNAL(clicked()),this,SLOT(removeImageButtonClicked()));
150
connect(m_Ui->clearListButton,SIGNAL(clicked()),this,SLOT(clearListButtonClicked()));
151
151
connect(hdrCreationManager, SIGNAL(fileLoaded(int,QString,float)), this, SLOT(fileLoaded(int,QString,float)));
152
152
connect(hdrCreationManager,SIGNAL(finishedLoadingInputFiles(QStringList)),this, SLOT(finishedLoadingInputFiles(QStringList)));
153
153
connect(hdrCreationManager,SIGNAL(errorWhileLoading(QString)),this, SLOT(errorWhileLoading(QString)));
154
154
connect(hdrCreationManager,SIGNAL(expotimeValueChanged(float,int)),this, SLOT(updateGraphicalEVvalue(float,int)));
155
connect(hdrCreationManager, SIGNAL(finishedAligning()), this, SLOT(finishedAligning()));
155
connect(hdrCreationManager, SIGNAL(finishedAligning(int)), this, SLOT(finishedAligning(int)));
156
156
connect(hdrCreationManager, SIGNAL(ais_failed(QProcess::ProcessError)), this, SLOT(ais_failed(QProcess::ProcessError)));
157
157
connect(hdrCreationManager, SIGNAL(aisDataReady(QByteArray)), this, SLOT(writeAisData(QByteArray)));
163
163
void HdrWizard::loadImagesButtonClicked() {
165
// when changing these filetypes, also change in DnDOption - for Drag and Drop
166
filetypes += tr("All formats (*.jpeg *.jpg *.tiff *.tif *.crw *.cr2 *.nef *.dng *.mrw *.orf *.kdc *.dcr *.arw *.raf *.ptx *.pef *.x3f *.raw *.sr2 *.rw2 *.3fr *.mef *.mos *.erf *.nrw *.srw");
167
filetypes += tr("*.JPEG *.JPG *.TIFF *.TIF *.CRW *.CR2 *.NEF *.DNG *.MRW *.ORF *.KDC *.DCR *.ARW *.RAF *.PTX *.PEF *.X3F *.RAW *.SR2 *.RW2 *.3FR *.MEF *.MOS *.ERF *.NRW *.SRW);;");
168
filetypes += tr("JPEG (*.jpeg *.jpg *.JPEG *.JPG);;");
169
filetypes += tr("TIFF Images (*.tiff *.tif *.TIFF *.TIF);;");
170
filetypes += tr("RAW Images (*.crw *.cr2 *.nef *.dng *.mrw *.orf *.kdc *.dcr *.arw *.raf *.ptx *.pef *.x3f *.raw *.sr2 *.rw2 *.3fr *.mef *.mos *.erf *.nrw *.srw");
171
filetypes += tr("*.CRW *.CR2 *.NEF *.DNG *.MRW *.ORF *.KDC *.DCR *.ARW *.RAF *.PTX *.PEF *.X3F *.RAW *.SR2 *.RW2 *.3FR *.MEF *.MOS *.ERF *.NRW *.SRW)");
173
QString RecentDirInputLDRs = luminance_options.getDefaultPathLdrIn();
175
QStringList files = QFileDialog::getOpenFileNames(this, tr("Select the input images"), RecentDirInputLDRs, filetypes );
177
if (!files.isEmpty() ) {
165
// when changing these filetypes, also change in DnDOption - for Drag and Drop
166
filetypes += tr("All formats (*.jpeg *.jpg *.tiff *.tif *.crw *.cr2 *.nef *.dng *.mrw *.orf *.kdc *.dcr *.arw *.raf *.ptx *.pef *.x3f *.raw *.sr2 *.rw2 *.3fr *.mef *.mos *.erf *.nrw *.srw");
167
filetypes += tr("*.JPEG *.JPG *.TIFF *.TIF *.CRW *.CR2 *.NEF *.DNG *.MRW *.ORF *.KDC *.DCR *.ARW *.RAF *.PTX *.PEF *.X3F *.RAW *.SR2 *.RW2 *.3FR *.MEF *.MOS *.ERF *.NRW *.SRW);;");
168
filetypes += tr("JPEG (*.jpeg *.jpg *.JPEG *.JPG);;");
169
filetypes += tr("TIFF Images (*.tiff *.tif *.TIFF *.TIF);;");
170
filetypes += tr("RAW Images (*.crw *.cr2 *.nef *.dng *.mrw *.orf *.kdc *.dcr *.arw *.raf *.ptx *.pef *.x3f *.raw *.sr2 *.rw2 *.3fr *.mef *.mos *.erf *.nrw *.srw");
171
filetypes += tr("*.CRW *.CR2 *.NEF *.DNG *.MRW *.ORF *.KDC *.DCR *.ARW *.RAF *.PTX *.PEF *.X3F *.RAW *.SR2 *.RW2 *.3FR *.MEF *.MOS *.ERF *.NRW *.SRW)");
173
QString RecentDirInputLDRs = luminance_options.getDefaultPathLdrIn();
175
QStringList files = QFileDialog::getOpenFileNames(this, tr("Select the input images"), RecentDirInputLDRs, filetypes );
177
if (!files.isEmpty() ) {
178
178
QFileInfo qfi(files.at(0));
179
// if the new dir, the one just chosen by the user, is different from the one stored in the settings, update the luminance_options.
179
// if the new dir, the one just chosen by the user, is different from the one stored in the settings, update the luminance_options.
180
180
if (RecentDirInputLDRs != qfi.path()) {
181
181
// update internal field variable
182
182
RecentDirInputLDRs = qfi.path();
183
luminance_options.setDefaultPathLdrIn(RecentDirInputLDRs);
183
luminance_options.setDefaultPathLdrIn(RecentDirInputLDRs);
185
185
//loadImagesButton->setEnabled(false);
186
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Loading...")+"</b></h3></center>");
186
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Loading...")+"</b></h3></center>");
187
187
loadInputFiles(files, files.count());
188
188
QApplication::setOverrideCursor(QCursor(Qt::BusyCursor));
189
} //if (!files.isEmpty())
189
} //if (!files.isEmpty())
192
192
void HdrWizard::removeImageButtonClicked()
194
disconnect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
195
int index = m_Ui->tableWidget->currentRow();
194
disconnect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
195
int index = m_Ui->tableWidget->currentRow();
197
if (m_Ui->tableWidget->rowCount() == 1)
197
if (m_Ui->tableWidget->rowCount() == 1)
199
199
clearListButtonClicked();
203
203
QString fname = hdrCreationManager->getFileList().at(index);
204
204
QFileInfo qfi(fname);
205
QString thumb_name = QString(luminance_options.getTempDir() + "/"+ qfi.completeBaseName() + ".thumb.jpg");
205
QString thumb_name = QString(luminance_options.getTempDir() + "/"+ qfi.completeBaseName() + ".thumb.jpg");
206
206
QFile::remove(thumb_name);
207
thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
207
thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
208
208
QFile::remove(thumb_name);
210
210
hdrCreationManager->remove(index);
211
m_Ui->tableWidget->removeRow(index);
212
inputHdrFileSelected(m_Ui->tableWidget->currentRow());
211
m_Ui->tableWidget->removeRow(index);
212
inputHdrFileSelected(m_Ui->tableWidget->currentRow());
214
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
214
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
217
217
void HdrWizard::clearListButtonClicked()
219
disconnect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
220
m_Ui->previewLabel->clear();
221
for (int i = m_Ui->tableWidget->rowCount()-1; i >= 0; --i)
222
m_Ui->tableWidget->removeRow(i);
219
disconnect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
220
m_Ui->previewLabel->clear();
221
for (int i = m_Ui->tableWidget->rowCount()-1; i >= 0; --i)
222
m_Ui->tableWidget->removeRow(i);
224
224
QStringList fnames = hdrCreationManager->getFileList();
225
225
int n = fnames.size();
227
227
for (int i = 0; i < n; i++) {
228
228
QString fname = hdrCreationManager->getFileList().at(i);
229
229
QFileInfo qfi(fname);
230
QString thumb_name = QString(luminance_options.getTempDir() + "/"+ qfi.completeBaseName() + ".thumb.jpg");
230
QString thumb_name = QString(luminance_options.getTempDir() + "/"+ qfi.completeBaseName() + ".thumb.jpg");
231
231
QFile::remove(thumb_name);
232
thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
232
thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
233
233
QFile::remove(thumb_name);
236
236
hdrCreationManager->reset();
237
m_Ui->removeImageButton->setEnabled(false);
238
m_Ui->clearListButton->setEnabled(false);
239
m_Ui->EVgroupBox->setEnabled(false);
240
m_Ui->alignGroupBox->setEnabled(false);
237
m_Ui->removeImageButton->setEnabled(false);
238
m_Ui->clearListButton->setEnabled(false);
239
m_Ui->EVgroupBox->setEnabled(false);
240
m_Ui->alignGroupBox->setEnabled(false);
241
241
//EVSlider->setValue(0);
242
m_Ui->NextFinishButton->setEnabled(false);
243
m_Ui->progressBar->setValue(0);
244
m_Ui->progressBar->hide();
245
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Start loading a set of images with different exposure")+"</b></h3></center>");
246
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
242
m_Ui->NextFinishButton->setEnabled(false);
243
m_Ui->progressBar->setValue(0);
244
m_Ui->progressBar->hide();
245
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Start loading a set of images with different exposure")+"</b></h3></center>");
246
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
249
249
void HdrWizard::dragEnterEvent(QDragEnterEvent *event) {
250
if (m_Ui->loadImagesButton->isEnabled())
250
if (m_Ui->loadImagesButton->isEnabled())
251
251
event->acceptProposedAction();
300
300
<hr><b>HINT:</b> Losing EXIF data usually happens when you preprocess your pictures.<br>\
301
301
You can perform a <b>one-to-one copy of the exif data</b> between two sets of images via the <i><b>\"Tools->Copy Exif Data...\"</b></i> menu item."))).arg(filesLackingExif.join(""));
302
302
QMessageBox::warning(this,tr("EXIF data not found"),warning_message);
303
m_Ui->confirmloadlabel->setText(QString(tr("<center><h3><b>To proceed you need to manually set the exposure values.<br><font color=\"#FF0000\">%1</font> values still required.</b></h3></center>")).arg(filesLackingExif.size()));
303
m_Ui->confirmloadlabel->setText(QString(tr("<center><h3><b>To proceed you need to manually set the exposure values.<br><font color=\"#FF0000\">%1</font> values still required.</b></h3></center>")).arg(filesLackingExif.size()));
305
305
//do not load any more images
306
306
//loadImagesButton->setEnabled(false);
308
m_Ui->tableWidget->resizeColumnsToContents();
308
m_Ui->tableWidget->resizeColumnsToContents();
309
309
//enable user EV input
310
m_Ui->EVgroupBox->setEnabled(true);
311
m_Ui->tableWidget->selectRow(0);
312
m_Ui->tableWidget->setEnabled(true);
310
m_Ui->EVgroupBox->setEnabled(true);
311
m_Ui->tableWidget->selectRow(0);
312
m_Ui->tableWidget->setEnabled(true);
314
314
//FIXME mtb doesn't work with 16bit data yet (and probably ever)
315
if ((m_Ui->tableWidget->rowCount() >= 2) && (hdrCreationManager->inputImageType() == HdrCreationManager::LDR_INPUT_TYPE)) {
316
m_Ui->alignCheckBox->setEnabled(true);
317
m_Ui->alignGroupBox->setEnabled(true);
319
else if ((m_Ui->tableWidget->rowCount() >= 2) && (hdrCreationManager->inputImageType() == HdrCreationManager::MDR_INPUT_TYPE)) {
320
m_Ui->alignCheckBox->setEnabled(true);
321
m_Ui->alignGroupBox->setEnabled(true);
322
m_Ui->mtb_radioButton->setEnabled(false);
324
m_Ui->removeImageButton->setEnabled(true);
325
m_Ui->clearListButton->setEnabled(true);
326
m_Ui->progressBar->hide();
315
if ((m_Ui->tableWidget->rowCount() >= 2) && (hdrCreationManager->inputImageType() == HdrCreationManager::LDR_INPUT_TYPE)) {
316
m_Ui->alignCheckBox->setEnabled(true);
317
m_Ui->alignGroupBox->setEnabled(true);
319
else if ((m_Ui->tableWidget->rowCount() >= 2) && (hdrCreationManager->inputImageType() == HdrCreationManager::MDR_INPUT_TYPE)) {
320
m_Ui->alignCheckBox->setEnabled(true);
321
m_Ui->alignGroupBox->setEnabled(true);
322
m_Ui->mtb_radioButton->setEnabled(false);
324
m_Ui->removeImageButton->setEnabled(true);
325
m_Ui->clearListButton->setEnabled(true);
326
m_Ui->progressBar->hide();
327
327
QApplication::restoreOverrideCursor();
330
330
void HdrWizard::errorWhileLoading(QString error) {
331
disconnect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
332
m_Ui->tableWidget->clear();
333
m_Ui->tableWidget->setRowCount(0);
334
m_Ui->tableWidget->setEnabled(true);
335
m_Ui->progressBar->setValue(0);
336
m_Ui->progressBar->hide();
337
m_Ui->previewLabel->clear();
338
m_Ui->removeImageButton->setEnabled(false);
339
m_Ui->clearListButton->setEnabled(false);
340
m_Ui->NextFinishButton->setEnabled(false);
341
m_Ui->EVgroupBox->setEnabled(false);
331
disconnect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
332
m_Ui->tableWidget->clear();
333
m_Ui->tableWidget->setRowCount(0);
334
m_Ui->tableWidget->setEnabled(true);
335
m_Ui->progressBar->setValue(0);
336
m_Ui->progressBar->hide();
337
m_Ui->previewLabel->clear();
338
m_Ui->removeImageButton->setEnabled(false);
339
m_Ui->clearListButton->setEnabled(false);
340
m_Ui->NextFinishButton->setEnabled(false);
341
m_Ui->EVgroupBox->setEnabled(false);
342
342
QMessageBox::critical(this,tr("Loading Error: "), error);
343
343
hdrCreationManager->clearlists(true);
344
344
QApplication::restoreOverrideCursor();
345
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Start loading a set of images with different exposure")+"</b></h3></center>");
346
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
345
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Start loading a set of images with different exposure")+"</b></h3></center>");
346
connect(m_Ui->tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(inputHdrFileSelected(int)));
349
349
void HdrWizard::updateGraphicalEVvalue(float expotime, int index_in_table) {
388
390
QMessageBox::warning(this,tr("Error..."),tr("An unknown error occurred while executing the \"<em>align_image_stack</em>\" application..."));
391
m_Ui->progressBar->hide();
392
m_Ui->textEdit->hide();
393
m_Ui->progressBar->hide();
394
m_Ui->textEdit->hide();
393
395
QApplication::restoreOverrideCursor();
394
m_Ui->alignGroupBox->setEnabled(true);
395
m_Ui->alignCheckBox->setChecked(false);
396
m_Ui->NextFinishButton->setEnabled(true);
397
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Now click on next button")+"</b></h3></center>");
396
m_Ui->alignGroupBox->setEnabled(true);
397
m_Ui->alignCheckBox->setChecked(false);
398
m_Ui->NextFinishButton->setEnabled(true);
399
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Now click on next button")+"</b></h3></center>");
400
402
void HdrWizard::customConfigCheckBoxToggled(bool want_custom) {
401
403
if (!want_custom) {
402
if (!m_Ui->antighostingCheckBox->isChecked()) {
403
m_Ui->label_RespCurve_Antighost->setDisabled(true);
404
m_Ui->antighostRespCurveCombobox->setDisabled(true);
405
m_Ui->label_Iterations->setDisabled(true);
406
m_Ui->spinBoxIterations->setDisabled(true);
404
if (!m_Ui->antighostingCheckBox->isChecked()) {
405
m_Ui->label_RespCurve_Antighost->setDisabled(true);
406
m_Ui->antighostRespCurveCombobox->setDisabled(true);
407
m_Ui->label_Iterations->setDisabled(true);
408
m_Ui->spinBoxIterations->setDisabled(true);
407
409
//temporary disable anti-ghosting until it's fixed
408
m_Ui->antighostingCheckBox->setDisabled(true);
410
m_Ui->antighostingCheckBox->setDisabled(true);
411
m_Ui->label_predef_configs->setDisabled(true);
412
m_Ui->predefConfigsComboBox->setDisabled(true);
413
m_Ui->label_weights->setDisabled(true);
414
m_Ui->lineEdit_showWeight->setDisabled(true);
415
m_Ui->label_resp->setDisabled(true);
416
m_Ui->lineEdit_show_resp->setDisabled(true);
417
m_Ui->label_model->setDisabled(true);
418
m_Ui->lineEdit_showmodel->setDisabled(true);
413
m_Ui->label_predef_configs->setDisabled(true);
414
m_Ui->predefConfigsComboBox->setDisabled(true);
415
m_Ui->label_weights->setDisabled(true);
416
m_Ui->lineEdit_showWeight->setDisabled(true);
417
m_Ui->label_resp->setDisabled(true);
418
m_Ui->lineEdit_show_resp->setDisabled(true);
419
m_Ui->label_model->setDisabled(true);
420
m_Ui->lineEdit_showmodel->setDisabled(true);
420
predefConfigsComboBoxActivated(m_Ui->predefConfigsComboBox->currentIndex());
421
m_Ui->NextFinishButton->setText(tr("&Finish"));
422
predefConfigsComboBoxActivated(m_Ui->predefConfigsComboBox->currentIndex());
423
m_Ui->NextFinishButton->setText(tr("&Finish"));
423
m_Ui->NextFinishButton->setText(tr("&Next >"));
425
m_Ui->NextFinishButton->setText(tr("&Next >"));
427
429
void HdrWizard::predefRespCurveRadioButtonToggled(bool want_predef_resp_curve) {
428
430
if (want_predef_resp_curve) {
429
431
//ENABLE load_curve_button and lineedit when "load from file" is checked.
430
if (!m_Ui->loadRespCurveFromFileCheckbox->isChecked()) {
431
m_Ui->loadRespCurveFileButton->setEnabled(false);
432
m_Ui->RespCurveFileLoadedLineEdit->setEnabled(false);
432
if (!m_Ui->loadRespCurveFromFileCheckbox->isChecked()) {
433
m_Ui->loadRespCurveFileButton->setEnabled(false);
434
m_Ui->RespCurveFileLoadedLineEdit->setEnabled(false);
434
loadRespCurveFromFileCheckboxToggled(m_Ui->loadRespCurveFromFileCheckbox->isChecked());
436
loadRespCurveFromFileCheckboxToggled(m_Ui->loadRespCurveFromFileCheckbox->isChecked());
435
437
} else { //want to recover response curve via robertson02
436
438
//update hdrCreationManager->chosen_config
437
439
hdrCreationManager->chosen_config.response_curve = FROM_ROBERTSON;
439
m_Ui->NextFinishButton->setEnabled(true);
440
saveRespCurveToFileCheckboxToggled(m_Ui->saveRespCurveToFileCheckbox->isChecked());
441
m_Ui->NextFinishButton->setEnabled(true);
442
saveRespCurveToFileCheckboxToggled(m_Ui->saveRespCurveToFileCheckbox->isChecked());
444
446
void HdrWizard::loadRespCurveFromFileCheckboxToggled( bool checkedfile ) {
445
//if checkbox is checked AND we have a valid filename
446
if (checkedfile && loadcurvefilename != "") {
447
//if checkbox is checked AND we have a valid filename
448
if (checkedfile && loadcurvefilename != "") {
447
449
//update chosen config
448
450
hdrCreationManager->chosen_config.response_curve = FROM_FILE;
449
451
hdrCreationManager->chosen_config.LoadCurveFromFilename = strdup(QFile::encodeName(loadcurvefilename).constData());
450
452
//and ENABLE nextbutton
451
m_Ui->NextFinishButton->setEnabled(true);
453
//if checkbox is checked AND no valid filename
454
else if (checkedfile && loadcurvefilename == "") {
453
m_Ui->NextFinishButton->setEnabled(true);
455
//if checkbox is checked AND no valid filename
456
else if (checkedfile && loadcurvefilename == "") {
455
457
// DISABLE nextbutton until situation is fixed
456
m_Ui->NextFinishButton->setEnabled(false);
457
// qDebug("Load checkbox is checked AND no valid filename");
459
//checkbox not checked
458
m_Ui->NextFinishButton->setEnabled(false);
459
// qDebug("Load checkbox is checked AND no valid filename");
461
//checkbox not checked
461
463
// update chosen config
462
hdrCreationManager->chosen_config.response_curve = responses_in_gui[m_Ui->gammaLinLogComboBox->currentIndex()];
464
hdrCreationManager->chosen_config.response_curve = responses_in_gui[m_Ui->gammaLinLogComboBox->currentIndex()];
463
465
hdrCreationManager->chosen_config.LoadCurveFromFilename = "";
464
466
//and ENABLE nextbutton
465
m_Ui->NextFinishButton->setEnabled(true);
467
m_Ui->NextFinishButton->setEnabled(true);
469
471
void HdrWizard::saveRespCurveToFileCheckboxToggled( bool checkedfile ) {
470
472
//if checkbox is checked AND we have a valid filename
471
473
if (checkedfile && savecurvefilename != "") {
472
474
hdrCreationManager->chosen_config.SaveCurveToFilename = strdup(QFile::encodeName(savecurvefilename).constData());
473
m_Ui->NextFinishButton->setEnabled(true);
475
m_Ui->NextFinishButton->setEnabled(true);
475
477
//if checkbox is checked AND no valid filename
476
478
else if (checkedfile && savecurvefilename == "") {
477
479
// DISABLE nextbutton until situation is fixed
478
m_Ui->NextFinishButton->setEnabled(false);
480
m_Ui->NextFinishButton->setEnabled(false);
480
482
//checkbox not checked
482
484
hdrCreationManager->chosen_config.SaveCurveToFilename = "";
483
485
//and ENABLE nextbutton
484
m_Ui->NextFinishButton->setEnabled(true);
486
m_Ui->NextFinishButton->setEnabled(true);
488
490
void HdrWizard::NextFinishButtonClicked() {
489
int currentpage = m_Ui->pagestack->currentIndex();
491
int currentpage = m_Ui->pagestack->currentIndex();
490
492
switch (currentpage) {
492
m_Ui->pagestack->setCurrentIndex(1);
493
m_Ui->NextFinishButton->setDisabled(true);
494
m_Ui->pagestack->setCurrentIndex(1);
495
m_Ui->NextFinishButton->setDisabled(true);
496
498
//now align, if requested
497
if (m_Ui->alignCheckBox->isChecked()) {
499
if (m_Ui->alignCheckBox->isChecked()) {
498
500
QApplication::setOverrideCursor(QCursor(Qt::BusyCursor));
499
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Aligning...")+"</b></h3></center>");
500
m_Ui->loadImagesButton->setDisabled(true);
501
m_Ui->removeImageButton->setDisabled(true);
502
m_Ui->clearListButton->setDisabled(true);
503
m_Ui->previewLabel->setDisabled(true);
504
m_Ui->NextFinishButton->setDisabled(true);
505
m_Ui->alignGroupBox->setDisabled(true);
506
m_Ui->EVgroupBox->setDisabled(true);
507
m_Ui->tableWidget->setDisabled(true);
501
m_Ui->confirmloadlabel->setText("<center><h3><b>"+tr("Aligning...")+"</b></h3></center>");
502
m_Ui->loadImagesButton->setDisabled(true);
503
m_Ui->removeImageButton->setDisabled(true);
504
m_Ui->clearListButton->setDisabled(true);
505
m_Ui->previewLabel->setDisabled(true);
506
m_Ui->NextFinishButton->setDisabled(true);
507
m_Ui->alignGroupBox->setDisabled(true);
508
m_Ui->EVgroupBox->setDisabled(true);
509
m_Ui->tableWidget->setDisabled(true);
509
m_Ui->progressBar->setMaximum(0);
510
m_Ui->progressBar->setMinimum(0);
511
m_Ui->progressBar->show();
512
if (m_Ui->ais_radioButton->isChecked()) {
513
m_Ui->textEdit->show();
511
m_Ui->progressBar->setMaximum(0);
512
m_Ui->progressBar->setMinimum(0);
513
m_Ui->progressBar->show();
514
if (m_Ui->ais_radioButton->isChecked()) {
515
m_Ui->textEdit->show();
514
516
hdrCreationManager->align_with_ais();
517
519
hdrCreationManager->align_with_mtb();
520
m_Ui->pagestack->setCurrentIndex(2);
522
m_Ui->pagestack->setCurrentIndex(2);
523
if(!m_Ui->customConfigCheckBox->isChecked()) {
525
if(!m_Ui->customConfigCheckBox->isChecked()) {
526
m_Ui->pagestack->setCurrentIndex(3);
528
m_Ui->pagestack->setCurrentIndex(3);
530
m_Ui->settings_label->setText("<center><h3><b>"+tr("Processing...")+"</b></h3></center>");
531
m_Ui->customize_label->setText("<center><h3><b>"+tr("Processing...")+"</b></h3></center>");
532
m_Ui->settings_label->setText("<center><h3><b>"+tr("Processing...")+"</b></h3></center>");
533
m_Ui->customize_label->setText("<center><h3><b>"+tr("Processing...")+"</b></h3></center>");
533
535
QApplication::setOverrideCursor(QCursor(Qt::BusyCursor));
534
PfsFrameHDR = hdrCreationManager->createHdr(m_Ui->antighostingCheckBox->isChecked(),m_Ui->spinBoxIterations->value());
536
PfsFrameHDR = hdrCreationManager->createHdr(m_Ui->antighostingCheckBox->isChecked(),m_Ui->spinBoxIterations->value());
535
537
QApplication::restoreOverrideCursor();
622
627
QString HdrWizard::getCaptionTEXT()
624
return tr("Weights: ")+getQStringFromConfig(1) + tr(" - Response curve: ") + getQStringFromConfig(2) + tr(" - Model: ") + getQStringFromConfig(3);
629
return tr("Weights: ")+getQStringFromConfig(1) + tr(" - Response curve: ") + getQStringFromConfig(2) + tr(" - Model: ") + getQStringFromConfig(3);
627
632
QString HdrWizard::getQStringFromConfig( int type ) {
628
if (type == 1) { //return String for weights
633
if (type == 1) { //return String for weights
629
634
switch (hdrCreationManager->chosen_config.weights) {
631
return tr("Triangular");
636
return tr("Triangular");
633
return tr("Plateau");
638
return tr("Plateau");
635
return tr("Gaussian");
640
return tr("Gaussian");
637
} else if (type == 2) { //return String for response curve
642
} else if (type == 2) { //return String for response curve
638
643
switch (hdrCreationManager->chosen_config.response_curve) {
644
return tr("Logarithmic");
649
return tr("Logarithmic");
645
650
case FROM_ROBERTSON:
646
return tr("From Calibration");
651
return tr("From Calibration");
648
return tr("From File");
653
return tr("From File");
650
} else if (type == 3) { //return String for model
655
} else if (type == 3) { //return String for model
651
656
switch (hdrCreationManager->chosen_config.model) {
653
return tr("Debevec");
658
return tr("Debevec");
655
return tr("Robertson");
660
return tr("Robertson");
661
666
//triggered by user interaction
662
667
void HdrWizard::editingEVfinished() {
663
668
//transform from EV value to expotime value
664
hdrCreationManager->setEV(m_Ui->ImageEVdsb->value(), m_Ui->tableWidget->currentRow());
669
hdrCreationManager->setEV(m_Ui->ImageEVdsb->value(), m_Ui->tableWidget->currentRow());
665
670
if (hdrCreationManager->getFilesLackingExif().size() == 0) {
666
m_Ui->NextFinishButton->setEnabled(true);
671
m_Ui->NextFinishButton->setEnabled(true);
667
672
//give an offset to the EV values if they are outside of the -10..10 range.
668
673
hdrCreationManager->checkEVvalues();
669
m_Ui->confirmloadlabel->setText(tr("<center><font color=\"#008400\"><h3><b>All the EV values have been set.<br>Now click on Next button.</b></h3></font></center>"));
674
m_Ui->confirmloadlabel->setText(tr("<center><font color=\"#008400\"><h3><b>All the EV values have been set.<br>Now click on Next button.</b></h3></font></center>"));
671
m_Ui->confirmloadlabel->setText( QString(tr("<center><h3><b>To proceed you need to manually set the exposure values.<br><font color=\"#FF0000\">%1</font> values still required.</b></h3></center>")).arg(hdrCreationManager->getFilesLackingExif().size()) );
676
m_Ui->confirmloadlabel->setText( QString(tr("<center><h3><b>To proceed you need to manually set the exposure values.<br><font color=\"#FF0000\">%1</font> values still required.</b></h3></center>")).arg(hdrCreationManager->getFilesLackingExif().size()) );
675
680
void HdrWizard::inputHdrFileSelected(int i) {
676
681
if (hdrCreationManager->isValidEV(i))
677
m_Ui->ImageEVdsb->setValue(hdrCreationManager->getEV(i));
682
m_Ui->ImageEVdsb->setValue(hdrCreationManager->getEV(i));
678
683
if (hdrCreationManager->inputImageType() == HdrCreationManager::LDR_INPUT_TYPE) {
679
684
QImage *image = hdrCreationManager->getLDRList().at(i);
680
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(image->scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
685
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(image->scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
682
687
else { // load preview from thumbnail previously created on disk
683
688
QString fname = hdrCreationManager->getFileList().at(i);
684
689
QFileInfo qfi(fname);
685
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.jpg");
690
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.jpg");
687
if (QFile::exists(thumb_name))
692
if (QFile::exists(thumb_name))
689
694
QImage thumb_image(thumb_name);
690
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
695
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
694
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
699
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
695
700
if ( QFile::exists(thumb_name)) {
696
701
QImage thumb_image(thumb_name);
697
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
702
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
701
m_Ui->ImageEVdsb->setFocus();
706
m_Ui->ImageEVdsb->setFocus();
704
709
void HdrWizard::resizeEvent ( QResizeEvent * )
706
711
//qDebug() << "void HdrWizard::resizeEvent ( QResizeEvent * )";
707
712
//make sure we ask for a thumbnail only when we need it
708
if ((m_Ui->pagestack->currentIndex() == 0) && (m_Ui->tableWidget->currentRow() != -1) && (hdrCreationManager->inputImageType() == HdrCreationManager::LDR_INPUT_TYPE)) {
709
QImage *image = hdrCreationManager->getLDRList().at(m_Ui->tableWidget->currentRow());
710
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(image->scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
713
if ((m_Ui->pagestack->currentIndex() == 0) && (m_Ui->tableWidget->currentRow() != -1) && (hdrCreationManager->inputImageType() == HdrCreationManager::LDR_INPUT_TYPE)) {
714
QImage *image = hdrCreationManager->getLDRList().at(m_Ui->tableWidget->currentRow());
715
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(image->scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
712
else if ((m_Ui->pagestack->currentIndex() == 0) && (m_Ui->tableWidget->currentRow() != -1) && (hdrCreationManager->inputImageType() != HdrCreationManager::LDR_INPUT_TYPE))
713
{ // load preview from thumbnail previously created on disk
714
QString fname = hdrCreationManager->getFileList().at(m_Ui->tableWidget->currentRow());
717
else if ((m_Ui->pagestack->currentIndex() == 0) && (m_Ui->tableWidget->currentRow() != -1) && (hdrCreationManager->inputImageType() != HdrCreationManager::LDR_INPUT_TYPE))
718
{ // load preview from thumbnail previously created on disk
719
QString fname = hdrCreationManager->getFileList().at(m_Ui->tableWidget->currentRow());
715
720
QFileInfo qfi(fname);
716
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.jpg");
721
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.jpg");
718
723
if ( QFile::exists(thumb_name)) {
719
724
QImage thumb_image(thumb_name);
720
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
725
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
724
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
729
QString thumb_name = QString(luminance_options.getTempDir() + "/" + qfi.completeBaseName() + ".thumb.ppm");
725
730
if ( QFile::exists(thumb_name)) {
726
731
QImage thumb_image(thumb_name);
727
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));
732
m_Ui->previewLabel->setPixmap(QPixmap::fromImage(thumb_image.scaled(m_Ui->previewLabel->size(), Qt::KeepAspectRatio)));