You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libkdcraw/libkdcraw/libkdcraw/dcrawsettingswidget.cpp

836 lines
32 KiB

/* ============================================================
*
* This file is a part of kipi-plugins project
* http://www.kipi-plugins.org
*
* Date : 2006-09-13
* Description : dcraw settings widgets
*
* Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
* Copyright (C) 2006-2008 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
* Copyright (C) 2007-2008 by Guillaume Castagnino <casta at xwing dot info>
*
* 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 <qcheckbox.h>
#include <qcombobox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qwhatsthis.h>
#include <qstring.h>
#include <qtooltip.h>
#include <qtabbar.h>
// KDE includes.
#include <kapplication.h>
#include <kdialog.h>
#include <klocale.h>
#include <knuminput.h>
#include <kurllabel.h>
// Local includes.
#include "dcrawbinary.h"
#include "dcrawsettingswidget.h"
#include "dcrawsettingswidget.moc"
namespace KDcrawIface
{
class DcrawSettingsWidgetPriv
{
public:
DcrawSettingsWidgetPriv()
{
sixteenBitsImage = 0;
fourColorCheckBox = 0;
brightnessLabel = 0;
brightnessSpinBox = 0;
blackPointCheckBox = 0;
blackPointSpinBox = 0;
whiteBalanceComboBox = 0;
whiteBalanceLabel = 0;
customWhiteBalanceSpinBox = 0;
customWhiteBalanceLabel = 0;
customWhiteBalanceGreenSpinBox = 0;
customWhiteBalanceGreenLabel = 0;
unclipColorLabel = 0;
dontStretchPixelsCheckBox = 0;
RAWQualityComboBox = 0;
RAWQualityLabel = 0;
enableNoiseReduction = 0;
NRThresholdSpinBox = 0;
NRThresholdLabel = 0;
enableCACorrection = 0;
caRedMultSpinBox = 0;
caBlueMultSpinBox = 0;
caRedMultLabel = 0;
caBlueMultLabel = 0;
unclipColorComboBox = 0;
reconstructLabel = 0;
reconstructSpinBox = 0;
outputColorSpaceLabel = 0;
outputColorSpaceComboBox = 0;
stdSettings = 0;
advSettings = 0;
}
QWidget *stdSettings;
QWidget *advSettings;
QLabel *whiteBalanceLabel;
QLabel *customWhiteBalanceLabel;
QLabel *customWhiteBalanceGreenLabel;
QLabel *brightnessLabel;
QLabel *RAWQualityLabel;
QLabel *NRThresholdLabel;
QLabel *caRedMultLabel;
QLabel *caBlueMultLabel;
QLabel *unclipColorLabel;
QLabel *reconstructLabel;
QLabel *outputColorSpaceLabel;
QComboBox *whiteBalanceComboBox;
QComboBox *RAWQualityComboBox;
QComboBox *unclipColorComboBox;
QComboBox *outputColorSpaceComboBox;
QCheckBox *blackPointCheckBox;
QCheckBox *sixteenBitsImage;
QCheckBox *fourColorCheckBox;
QCheckBox *customWhiteBalanceCheckBox;
QCheckBox *dontStretchPixelsCheckBox;
QCheckBox *enableNoiseReduction;
QCheckBox *enableCACorrection;
KIntNumInput *customWhiteBalanceSpinBox;
KIntNumInput *reconstructSpinBox;
KIntNumInput *blackPointSpinBox;
KIntNumInput *NRThresholdSpinBox;
KDoubleNumInput *customWhiteBalanceGreenSpinBox;
KDoubleNumInput *caRedMultSpinBox;
KDoubleNumInput *caBlueMultSpinBox;
KDoubleNumInput *brightnessSpinBox;
};
DcrawSettingsWidget::DcrawSettingsWidget(QWidget *parent, bool sixteenBitsOption,
bool outputColorSpaceOption, bool showAdvancedOptions)
: KTabWidget(parent)
{
d = new DcrawSettingsWidgetPriv;
setMargin(0);
d->stdSettings = new QWidget(this);
QGridLayout* settingsBoxLayout = new QGridLayout(d->stdSettings, 11, 2, KDialog::spacingHint());
// ---------------------------------------------------------------
int line = 0;
d->sixteenBitsImage = new QCheckBox(i18n("16 bits color depth"), d->stdSettings);
QWhatsThis::add( d->sixteenBitsImage, i18n("<p>If enabled, all RAW files will be decoded in 16-bit "
"color depth using a linear gamma curve. To prevent dark "
"picture rendering in the editor, it is recommended to use "
"Color Management in this mode.<p>"
"If disabled, all RAW files will be decoded in 8-bit "
"color depth with a BT.709 gamma curve and a 99th-percentile "
"white point. This mode is faster than 16-bit decoding."));
settingsBoxLayout->addMultiCellWidget(d->sixteenBitsImage, 0, 0, 0, 0);
if (sixteenBitsOption)
{
d->sixteenBitsImage->show();
line = 1;
}
else
{
d->sixteenBitsImage->hide();
}
// ---------------------------------------------------------------
d->fourColorCheckBox = new QCheckBox(i18n("Interpolate RGB as four colors"), d->stdSettings);
QWhatsThis::add(d->fourColorCheckBox, i18n("<p><b>Interpolate RGB as four colors</b><p>"
"The default is to assume that all green "
"pixels are the same. If even-row green "
"pixels are more sensitive to ultraviolet light "
"than odd-row this difference causes a mesh "
"pattern in the output; using this option solves "
"this problem with minimal loss of detail.<p>"
"To resume, this option blurs the image "
"a little, but it eliminates false 2x2 mesh patterns "
"with VNG quality method or mazes with AHD quality method."));
settingsBoxLayout->addMultiCellWidget(d->fourColorCheckBox, line, line, 0, 0);
line++;
// ---------------------------------------------------------------
KURLLabel *dcrawVersion = new KURLLabel("http://cybercom.net/~dcoffin/dcraw", i18n("dcraw %1")
.arg(DcrawBinary::internalVersion()), d->stdSettings);
dcrawVersion->setAlignment(Qt::AlignRight);
QToolTip::add(dcrawVersion, i18n("Visit dcraw project website"));
settingsBoxLayout->addMultiCellWidget(dcrawVersion, 0, 0, 2, 2);
// ---------------------------------------------------------------
d->whiteBalanceLabel = new QLabel(i18n("White Balance:"), d->stdSettings);
d->whiteBalanceComboBox = new QComboBox( false, d->stdSettings );
d->whiteBalanceComboBox->insertItem( i18n("Default D65 White Balance"), 0 );
d->whiteBalanceComboBox->insertItem( i18n("Camera White Balance"), 1 );
d->whiteBalanceComboBox->insertItem( i18n("Automatic White Balance"), 2 );
d->whiteBalanceComboBox->insertItem( i18n("Manual White balance"), 3 );
QWhatsThis::add( d->whiteBalanceComboBox, i18n("<p><b>White Balance</b><p>"
"Configure the raw white balance :<p>"
"<b>Default D65 White Balance</b>: Use a standard daylight D65 white balance (dcraw defaults)<p>"
"<b>Camera White Balance</b>: Use the white balance specified by the camera. "
"If not available, reverts to default neutral white balance<p>"
"<b>Automatic White Balance</b>: Calculates an automatic white balance "
"averaging the entire image<p>"
"<b>Manual White balance</b>: Set a custom temperature and green level values"));
settingsBoxLayout->addMultiCellWidget(d->whiteBalanceLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->whiteBalanceComboBox, line, line, 1, 2);
line++;
d->customWhiteBalanceSpinBox = new KIntNumInput(d->stdSettings);
d->customWhiteBalanceSpinBox->setRange(2000, 12000, 10, true);
d->customWhiteBalanceLabel = new QLabel(i18n("Temperature (K):"), d->stdSettings);
QWhatsThis::add( d->customWhiteBalanceSpinBox, i18n("<p><b>Temperature</b><p>"
"Set here the color temperature."));
settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceSpinBox, line, line, 1, 2);
line++;
d->customWhiteBalanceGreenSpinBox = new KDoubleNumInput(d->stdSettings);
d->customWhiteBalanceGreenSpinBox->setPrecision(2);
d->customWhiteBalanceGreenSpinBox->setRange(0.2, 2.5, 0.01, true);
d->customWhiteBalanceGreenLabel = new QLabel(i18n("Green:"), d->stdSettings);
QWhatsThis::add( d->customWhiteBalanceGreenSpinBox, i18n("<p>Set here the green component to set magenta color "
"cast removal level."));
settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceGreenLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceGreenSpinBox, line, line, 1, 2);
line++;
// ---------------------------------------------------------------
d->unclipColorLabel = new QLabel(i18n("Highlights:"), d->stdSettings);
d->unclipColorComboBox = new QComboBox( false, d->stdSettings );
d->unclipColorComboBox->insertItem( i18n("Solid white"), 0 );
d->unclipColorComboBox->insertItem( i18n("Unclip"), 1 );
d->unclipColorComboBox->insertItem( i18n("Blend"), 2 );
d->unclipColorComboBox->insertItem( i18n("Rebuild"), 3 );
QWhatsThis::add( d->unclipColorComboBox, i18n("<p><b>Highlights</b><p>"
"Select here the highlight clipping method:<p>"
"<b>Solid white</b>: clip all highlights to solid white<p>"
"<b>Unclip</b>: leave highlights unclipped in various "
"shades of pink<p>"
"<b>Blend</b>:Blend clipped and unclipped values together for a gradual fade to white<p>"
"<b>Rebuild</b>: reconstruct highlights using a "
"level value"));
settingsBoxLayout->addMultiCellWidget(d->unclipColorLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->unclipColorComboBox, line, line, 1, 2);
line++;
d->reconstructLabel = new QLabel(i18n("Level:"), d->stdSettings);
d->reconstructSpinBox = new KIntNumInput(d->stdSettings);
d->reconstructSpinBox->setRange(0, 6, 1, true);
QWhatsThis::add(d->reconstructSpinBox, i18n("<p><b>Level</b><p>"
"Specify the reconstruct highlight level. "
"Low values favor whites and high values favor colors."));
settingsBoxLayout->addMultiCellWidget(d->reconstructLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->reconstructSpinBox, line, line, 1, 2);
line++;
// ---------------------------------------------------------------
d->brightnessLabel = new QLabel(i18n("Brightness:"), d->stdSettings);
d->brightnessSpinBox = new KDoubleNumInput(d->stdSettings);
d->brightnessSpinBox->setPrecision(2);
d->brightnessSpinBox->setRange(0.0, 10.0, 0.01, true);
QWhatsThis::add(d->brightnessSpinBox, i18n("<p><b>Brighness</b><p>"
"Specify the brightness level of output image."
"The default value is 1.0 (works in 8-bit mode only).<p>"));
settingsBoxLayout->addMultiCellWidget(d->brightnessLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->brightnessSpinBox, line, line, 1, 2);
line++;
// ---------------------------------------------------------------
d->RAWQualityLabel = new QLabel(i18n("Quality (interpolation):"), d->stdSettings);
d->RAWQualityComboBox = new QComboBox( false, d->stdSettings );
d->RAWQualityComboBox->insertItem( i18n("Bilinear"), 0 );
d->RAWQualityComboBox->insertItem( i18n("VNG"), 1 );
d->RAWQualityComboBox->insertItem( i18n("PPG"), 2 );
d->RAWQualityComboBox->insertItem( i18n("AHD"), 3 );
QWhatsThis::add( d->RAWQualityComboBox, i18n("<p><b>Quality</b><p>"
"Select here the demosaicing RAW images decoding "
"interpolation method. A demosaicing algorithm is a digital image process used to "
"interpolate a complete image from the partial raw data received from the color-filtered "
"image sensor internal to many digital cameras in form of a matrix of colored pixels. "
"Also known as CFA interpolation or color reconstruction, another common spelling "
"is demosaicing. There are 3 methods to demosaicing RAW images:<p>"
"<b>Bilinear</b>: use high-speed but low-quality bilinear "
"interpolation (default - for slow computer). In this method, "
"the red value of a non-red pixel is computed as the average of "
"the adjacent red pixels, and similar for blue and green.<p>"
"<b>VNG</b>: use Variable Number of Gradients interpolation. "
"This method computes gradients near the pixel of interest and uses "
"the lower gradients (representing smoother and more similar parts "
"of the image) to make an estimate.<p>"
"<b>PPG</b>: use Patterned Pixel Grouping interpolation. "
"Pixel Grouping uses assumptions about natural scenery in making estimates. "
"It has fewer color artifacts on natural images than the Variable Number of "
"Gradients method.<p>"
"<b>AHD</b>: use Adaptive Homogeneity-Directed interpolation. "
"This method selects the direction of interpolation so as to "
"maximize a homogeneity metric, thus typically minimizing color artifacts.<p>"));
settingsBoxLayout->addMultiCellWidget(d->RAWQualityLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->RAWQualityComboBox, line, line, 1, 2);
line++;
// ---------------------------------------------------------------
d->enableNoiseReduction = new QCheckBox(i18n("Enable noise reduction"), d->stdSettings);
QWhatsThis::add( d->enableNoiseReduction, i18n("<p><b>Enable Noise Reduction</b><p>"
"Use wavelets to erase noise while preserving real detail.<p>"));
settingsBoxLayout->addMultiCellWidget(d->enableNoiseReduction, line, line, 0, 2);
line++;
d->NRThresholdSpinBox = new KIntNumInput(d->stdSettings);
d->NRThresholdSpinBox->setRange(10, 1000, 1, true);
d->NRThresholdLabel = new QLabel(i18n("Threshold:"), d->stdSettings);
QWhatsThis::add( d->NRThresholdSpinBox, i18n("<p><b>Threshold</b><p>"
"Set here the noise reduction threshold value to use."));
settingsBoxLayout->addMultiCellWidget(d->NRThresholdLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->NRThresholdSpinBox, line, line, 1, 2);
line++;
// ---------------------------------------------------------------
d->enableCACorrection = new QCheckBox(i18n("Enable Chromatic Aberration correction"), d->stdSettings);
QWhatsThis::add( d->enableCACorrection, i18n("<p><b>Enable Chromatic Aberration correction</b><p>"
"Enlarge the raw red and blue layers by the given factors, "
"typically 0.999 to 1.001, to correct chromatic aberration.<p>"));
settingsBoxLayout->addMultiCellWidget(d->enableCACorrection, line, line, 0, 2);
line++;
d->caRedMultLabel = new QLabel(i18n("Red multiplier:"), d->stdSettings);
d->caRedMultSpinBox = new KDoubleNumInput(d->stdSettings);
d->caRedMultSpinBox->setPrecision(5);
d->caRedMultSpinBox->setRange(0.00001, 2.0, 0.001, true);
QWhatsThis::add( d->caRedMultSpinBox, i18n("<p><b>Red multiplier</b><p>"
"Set here the magnification factor of the red layer"));
d->caBlueMultLabel = new QLabel(i18n("Blue multiplier:"), d->stdSettings);
d->caBlueMultSpinBox = new KDoubleNumInput(d->stdSettings);
d->caBlueMultSpinBox->setPrecision(5);
d->caBlueMultSpinBox->setRange(0.00001, 2.0, 0.001, true);
QWhatsThis::add( d->caBlueMultSpinBox, i18n("<p><b>Blue multiplier</b><p>"
"Set here the magnification factor of the blue layer"));
settingsBoxLayout->addMultiCellWidget(d->caRedMultLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->caRedMultSpinBox, line, line, 1, 2);
line++;
settingsBoxLayout->addMultiCellWidget(d->caBlueMultLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->caBlueMultSpinBox, line, line, 1, 2);
line++;
// ---------------------------------------------------------------
d->outputColorSpaceLabel = new QLabel(i18n("Color space:"), d->stdSettings);
d->outputColorSpaceComboBox = new QComboBox( false, d->stdSettings );
d->outputColorSpaceComboBox->insertItem( i18n("Raw (linear)"), 0 );
d->outputColorSpaceComboBox->insertItem( i18n("sRGB"), 1 );
d->outputColorSpaceComboBox->insertItem( i18n("Adobe RGB"), 2 );
d->outputColorSpaceComboBox->insertItem( i18n("Wide Gamut"), 3 );
d->outputColorSpaceComboBox->insertItem( i18n("Pro-Photo"), 4 );
QWhatsThis::add( d->outputColorSpaceComboBox, i18n("<p><b>Color space</b><p>"
"Select here the output color space used to decode RAW data.<p>"
"<b>Raw (linear)</b>: in this mode, no output color space is used "
"during RAW decoding.<p>"
"<b>sRGB</b>: this is a RGB color space, created "
"cooperatively by Hewlett-Packard and Microsoft. It is the "
"best choice for images destined for the Web and portrait photography.<p>"
"<b>Adobe RGB</b>: this color space is an extended RGB color space, developed by "
"Adobe. It is used for photography applications such as advertising "
"and fine art.<p>"
"<b>Wide Gamut</b>: this color space is an expanded version of the "
"Adobe RGB color space.<p>"
"<b>Pro-Photo</b>: this color space is an RGB color space, developed by "
"Kodak, that offers an especially large gamut designed for use with "
"photographic outputs in mind."));
settingsBoxLayout->addMultiCellWidget(d->outputColorSpaceLabel, line, line, 0, 0);
settingsBoxLayout->addMultiCellWidget(d->outputColorSpaceComboBox, line, line, 1, 2);
if (outputColorSpaceOption)
{
d->outputColorSpaceLabel->show();
d->outputColorSpaceComboBox->show();
}
else
{
d->outputColorSpaceLabel->hide();
d->outputColorSpaceComboBox->hide();
}
insertTab(d->stdSettings, i18n("Standard"));
// ---------------------------------------------------------------
d->advSettings = new QWidget(this);
QGridLayout* settingsBoxLayout2 = new QGridLayout(d->advSettings, 7, 2, KDialog::spacingHint());
d->dontStretchPixelsCheckBox = new QCheckBox(i18n("Do not stretch or rotate pixels"), d->advSettings);
QWhatsThis::add( d->dontStretchPixelsCheckBox, i18n("<p><b>Do not stretch or rotate pixels</b><p>"
"For Fuji Super CCD cameras, show the image tilted 45 "
"degrees. For cameras with non-square pixels, do not "
"stretch the image to its correct aspect ratio. In any "
"case, this option guarantees that each output pixel "
"corresponds to one RAW pixel.<p>"));
settingsBoxLayout2->addMultiCellWidget(d->dontStretchPixelsCheckBox, 0, 0, 0, 2);
// ---------------------------------------------------------------
d->blackPointCheckBox = new QCheckBox(i18n("Black point"), d->advSettings);
QWhatsThis::add( d->blackPointCheckBox, i18n("<p><b>Black point</b><p>"
"Use a specific black point value to decode RAW pictures. "
"If you set this option to off, the Black Point value will be "
"automatically computed.<p>"));
d->blackPointSpinBox = new KIntNumInput(d->advSettings);
d->blackPointSpinBox->setRange(0, 1000, 1, true);
QWhatsThis::add(d->blackPointSpinBox, i18n("<p><b>Black point value</b><p>"
"Specify specific black point value of the output image.<p>"));
settingsBoxLayout2->addMultiCellWidget(d->blackPointCheckBox, 1, 1, 0, 0);
settingsBoxLayout2->addMultiCellWidget(d->blackPointSpinBox, 1, 1, 1, 2);
// ---------------------------------------------------------------
settingsBoxLayout2->setRowStretch(7, 10);
insertTab(d->advSettings, i18n("Advanced"));
if (!showAdvancedOptions)
{
removePage(d->advSettings);
setTabBarHidden(true);
}
// ---------------------------------------------------------------
connect(d->unclipColorComboBox, SIGNAL(activated(int)),
this, SLOT(slotUnclipColorActivated(int)));
connect(d->whiteBalanceComboBox, SIGNAL(activated(int)),
this, SLOT(slotWhiteBalanceToggled(int)));
connect(d->enableNoiseReduction, SIGNAL(toggled(bool)),
this, SLOT(slotNoiseReductionToggled(bool)));
connect(d->enableCACorrection, SIGNAL(toggled(bool)),
this, SLOT(slotCACorrectionToggled(bool)));
connect(d->blackPointCheckBox, SIGNAL(toggled(bool)),
d->blackPointSpinBox, SLOT(setEnabled(bool)));
connect(d->sixteenBitsImage, SIGNAL(toggled(bool)),
this, SLOT(slotsixteenBitsImageToggled(bool)));
connect(dcrawVersion, SIGNAL(leftClickedURL(const QString&)),
this, SLOT(processDcrawURL(const QString&)));
}
DcrawSettingsWidget::~DcrawSettingsWidget()
{
delete d;
}
void DcrawSettingsWidget::processDcrawURL(const QString& url)
{
KApplication::kApplication()->invokeBrowser(url);
}
void DcrawSettingsWidget::setDefaultSettings()
{
setWhiteBalance(RawDecodingSettings::CAMERA);
setCustomWhiteBalance(6500);
setCustomWhiteBalanceGreen(1.0);
setFourColor(false);
setUnclipColor(0);
setDontStretchPixels(false);
setNoiseReduction(false);
setUseCACorrection(false);
setcaRedMultiplier(1.0);
setcaBlueMultiplier(1.0);
setBrightness(1.0);
setUseBlackPoint(false);
setBlackPoint(0);
setNRThreshold(100);
setQuality(RawDecodingSettings::BILINEAR);
setOutputColorSpace(RawDecodingSettings::SRGB);
}
void DcrawSettingsWidget::slotsixteenBitsImageToggled(bool b)
{
d->brightnessLabel->setDisabled(b);
d->brightnessSpinBox->setDisabled(b);
emit signalSixteenBitsImageToggled(d->sixteenBitsImage->isChecked());
}
void DcrawSettingsWidget::slotWhiteBalanceToggled(int v)
{
if (v == 3)
{
d->customWhiteBalanceSpinBox->setEnabled(true);
d->customWhiteBalanceGreenSpinBox->setEnabled(true);
d->customWhiteBalanceLabel->setEnabled(true);
d->customWhiteBalanceGreenLabel->setEnabled(true);
}
else
{
d->customWhiteBalanceSpinBox->setEnabled(false);
d->customWhiteBalanceGreenSpinBox->setEnabled(false);
d->customWhiteBalanceLabel->setEnabled(false);
d->customWhiteBalanceGreenLabel->setEnabled(false);
}
}
void DcrawSettingsWidget::slotUnclipColorActivated(int v)
{
if (v == 3) // Reconstruct Highlight method
{
d->reconstructLabel->setEnabled(true);
d->reconstructSpinBox->setEnabled(true);
}
else
{
d->reconstructLabel->setEnabled(false);
d->reconstructSpinBox->setEnabled(false);
}
}
void DcrawSettingsWidget::slotNoiseReductionToggled(bool b)
{
d->NRThresholdSpinBox->setEnabled(b);
d->NRThresholdLabel->setEnabled(b);
}
void DcrawSettingsWidget::slotCACorrectionToggled(bool b)
{
d->caRedMultSpinBox->setEnabled(b);
d->caBlueMultSpinBox->setEnabled(b);
d->caRedMultLabel->setEnabled(b);
d->caBlueMultLabel->setEnabled(b);
}
// ---------------------------------------------------------------
bool DcrawSettingsWidget::sixteenBits()
{
return d->sixteenBitsImage->isChecked();
}
void DcrawSettingsWidget::setSixteenBits(bool b)
{
d->sixteenBitsImage->setChecked(b);
}
// ---------------------------------------------------------------
RawDecodingSettings::WhiteBalance DcrawSettingsWidget::whiteBalance()
{
switch(d->whiteBalanceComboBox->currentItem())
{
case 1:
return RawDecodingSettings::CAMERA;
break;
case 2:
return RawDecodingSettings::AUTO;
break;
case 3:
return RawDecodingSettings::CUSTOM;
break;
default:
return RawDecodingSettings::NONE;
break;
}
}
void DcrawSettingsWidget::setWhiteBalance(RawDecodingSettings::WhiteBalance v)
{
switch(v)
{
case RawDecodingSettings::CAMERA:
d->whiteBalanceComboBox->setCurrentItem(1);
break;
case RawDecodingSettings::AUTO:
d->whiteBalanceComboBox->setCurrentItem(2);
break;
case RawDecodingSettings::CUSTOM:
d->whiteBalanceComboBox->setCurrentItem(3);
break;
default:
d->whiteBalanceComboBox->setCurrentItem(0);
break;
}
slotWhiteBalanceToggled(d->whiteBalanceComboBox->currentItem());
}
// ---------------------------------------------------------------
int DcrawSettingsWidget::customWhiteBalance()
{
return d->customWhiteBalanceSpinBox->value();
}
void DcrawSettingsWidget::setCustomWhiteBalance(int v)
{
d->customWhiteBalanceSpinBox->setValue(v);
}
// ---------------------------------------------------------------
double DcrawSettingsWidget::customWhiteBalanceGreen()
{
return d->customWhiteBalanceGreenSpinBox->value();
}
void DcrawSettingsWidget::setCustomWhiteBalanceGreen(double v)
{
d->customWhiteBalanceGreenSpinBox->setValue(v);
}
// ---------------------------------------------------------------
bool DcrawSettingsWidget::useFourColor()
{
return d->fourColorCheckBox->isChecked();
}
void DcrawSettingsWidget::setFourColor(bool b)
{
d->fourColorCheckBox->setChecked(b);
}
// ---------------------------------------------------------------
int DcrawSettingsWidget::unclipColor()
{
switch(d->unclipColorComboBox->currentItem())
{
case 0:
return 0;
break;
case 1:
return 1;
break;
case 2:
return 2;
break;
default: // Reconstruct Highlight method
return d->reconstructSpinBox->value()+3;
break;
}
}
void DcrawSettingsWidget::setUnclipColor(int v)
{
switch(v)
{
case 0:
d->unclipColorComboBox->setCurrentItem(0);
break;
case 1:
d->unclipColorComboBox->setCurrentItem(1);
break;
case 2:
d->unclipColorComboBox->setCurrentItem(2);
break;
default: // Reconstruct Highlight method
d->unclipColorComboBox->setCurrentItem(3);
d->reconstructSpinBox->setValue(v-3);
break;
}
slotUnclipColorActivated(d->unclipColorComboBox->currentItem());
}
// ---------------------------------------------------------------
bool DcrawSettingsWidget::useDontStretchPixels()
{
return d->dontStretchPixelsCheckBox->isChecked();
}
void DcrawSettingsWidget::setDontStretchPixels(bool b)
{
d->dontStretchPixelsCheckBox->setChecked(b);
}
// ---------------------------------------------------------------
double DcrawSettingsWidget::brightness()
{
return d->brightnessSpinBox->value();
}
void DcrawSettingsWidget::setBrightness(double b)
{
d->brightnessSpinBox->setValue(b);
}
// ---------------------------------------------------------------
bool DcrawSettingsWidget::useBlackPoint()
{
return d->blackPointCheckBox->isChecked();
}
void DcrawSettingsWidget::setUseBlackPoint(bool b)
{
d->blackPointCheckBox->setChecked(b);
d->blackPointSpinBox->setEnabled(b);
}
// ---------------------------------------------------------------
int DcrawSettingsWidget::blackPoint()
{
return d->blackPointSpinBox->value();
}
void DcrawSettingsWidget::setBlackPoint(int b)
{
d->blackPointSpinBox->setValue(b);
}
// ---------------------------------------------------------------
RawDecodingSettings::DecodingQuality DcrawSettingsWidget::quality()
{
switch(d->RAWQualityComboBox->currentItem())
{
case 1:
return RawDecodingSettings::VNG;
break;
case 2:
return RawDecodingSettings::PPG;
break;
case 3:
return RawDecodingSettings::AHD;
break;
default:
return RawDecodingSettings::BILINEAR;
break;
}
}
void DcrawSettingsWidget::setQuality(RawDecodingSettings::DecodingQuality q)
{
switch(q)
{
case RawDecodingSettings::VNG:
d->RAWQualityComboBox->setCurrentItem(1);
break;
case RawDecodingSettings::PPG:
d->RAWQualityComboBox->setCurrentItem(2);
break;
case RawDecodingSettings::AHD:
d->RAWQualityComboBox->setCurrentItem(3);
break;
default:
d->RAWQualityComboBox->setCurrentItem(0);
break;
}
}
// ---------------------------------------------------------------
RawDecodingSettings::OutputColorSpace DcrawSettingsWidget::outputColorSpace()
{
return (RawDecodingSettings::OutputColorSpace)(d->outputColorSpaceComboBox->currentItem());
}
void DcrawSettingsWidget::setOutputColorSpace(RawDecodingSettings::OutputColorSpace c)
{
d->outputColorSpaceComboBox->setCurrentItem((int)c);
}
// ---------------------------------------------------------------
bool DcrawSettingsWidget::useNoiseReduction()
{
return d->enableNoiseReduction->isChecked();
}
void DcrawSettingsWidget::setNoiseReduction(bool b)
{
d->enableNoiseReduction->setChecked(b);
slotNoiseReductionToggled(b);
}
// ---------------------------------------------------------------
int DcrawSettingsWidget::NRThreshold()
{
return d->NRThresholdSpinBox->value();
}
void DcrawSettingsWidget::setNRThreshold(int b)
{
d->NRThresholdSpinBox->setValue(b);
}
// ---------------------------------------------------------------
bool DcrawSettingsWidget::useCACorrection()
{
return d->enableCACorrection->isChecked();
}
void DcrawSettingsWidget::setUseCACorrection(bool b)
{
d->enableCACorrection->setChecked(b);
slotCACorrectionToggled(b);
}
// ---------------------------------------------------------------
double DcrawSettingsWidget::caRedMultiplier()
{
return d->caRedMultSpinBox->value();
}
void DcrawSettingsWidget::setcaRedMultiplier(double b)
{
d->caRedMultSpinBox->setValue(b);
}
// ---------------------------------------------------------------
double DcrawSettingsWidget::caBlueMultiplier()
{
return d->caBlueMultSpinBox->value();
}
void DcrawSettingsWidget::setcaBlueMultiplier(double b)
{
d->caBlueMultSpinBox->setValue(b);
}
} // NameSpace KDcrawIface