[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [digikam] /: Add "Color Effects" (solarize, vivid, neon, find edges) to the list of batch queue mana
From: Alexander Dymo <adymo () kdevelop ! org>
Date: 2012-11-16 6:56:52
Message-ID: 20121116065652.3B3EFA6091 () git ! kde ! org
[Download RAW message or body]
Git commit 414b3341e244e8241bc02a4e6d6a09e9e43ea0d0 by Alexander Dymo.
Committed on 08/11/2012 at 14:51.
Pushed by dymo into branch 'master'.
Add "Color Effects" (solarize, vivid, neon, find edges) to the list of batch queue \
manager tools. Refactor the code to extract color effects settings widget into its \
own class and use that in both color effects tool and queuemanager filter.
M +1 -0 CMakeLists.txt
M +1 -1 imageplugins/TODO
M +21 -189 imageplugins/filters/colorfxtool.cpp
M +0 -1 imageplugins/filters/colorfxtool.h
M +13 -15 libs/dimg/filters/fx/colorfxfilter.cpp
M +25 -5 libs/dimg/filters/fx/colorfxfilter.h
A +276 -0 libs/dimg/filters/fx/colorfxsettings.cpp [License: GPL (v2+)]
A +81 -0 libs/dimg/filters/fx/colorfxsettings.h [License: GPL (v2+)]
M +1 -0 utilities/queuemanager/CMakeLists.txt
A +113 -0 utilities/queuemanager/basetools/filters/colorfx.cpp [License: GPL \
(v2+)] A +62 -0 utilities/queuemanager/basetools/filters/colorfx.h \
[License: GPL (v2+)] M +2 -0 \
utilities/queuemanager/manager/batchtoolsmanager.cpp
http://commits.kde.org/digikam/414b3341e244e8241bc02a4e6d6a09e9e43ea0d0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f13c40..3dcef22 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -861,6 +861,7 @@ IF(DIGIKAM_CAN_BE_COMPILED)
${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/blurfilter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/blurfxfilter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/colorfxfilter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/colorfxsettings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/distortionfxfilter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/charcoalfilter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/libs/dimg/filters/fx/embossfilter.cpp
diff --git a/imageplugins/TODO b/imageplugins/TODO
index e7e20a8..39b58e7 100644
--- a/imageplugins/TODO
+++ b/imageplugins/TODO
@@ -23,7 +23,7 @@ decorate
/texture DONE DONE TODO
filters
- /colorfx TODO TODO TODO
+ /colorfx TODO TODO DONE
/charcoal DONE DONE TODO
/distortionfx DONE TODO TODO
/emboss DONE DONE TODO
diff --git a/imageplugins/filters/colorfxtool.cpp \
b/imageplugins/filters/colorfxtool.cpp index 10a3d67..8f2758e 100644
--- a/imageplugins/filters/colorfxtool.cpp
+++ b/imageplugins/filters/colorfxtool.cpp
@@ -54,15 +54,11 @@
#include <kstandarddirs.h>
#include <kvbox.h>
-// LibKDcraw includes
-
-#include <libkdcraw/rcombobox.h>
-#include <libkdcraw/rnuminput.h>
-
// Local includes
#include "dimg.h"
#include "colorfxfilter.h"
+#include "colorfxsettings.h"
#include "editortoolsettings.h"
#include "histogrambox.h"
#include "histogramwidget.h"
@@ -81,42 +77,23 @@ class ColorFxTool::Private
public:
Private() :
- effectTypeLabel(0),
- levelLabel(0),
- iterationLabel(0),
- effectType(0),
- levelInput(0),
- iterationInput(0),
previewWidget(0),
- gboxSettings(0)
+ gboxSettings(0),
+ settingsView(0)
{}
static const QString configGroupName;
static const QString configHistogramChannelEntry;
static const QString configHistogramScaleEntry;
- static const QString configEffectTypeEntry;
- static const QString configLevelAdjustmentEntry;
- static const QString configIterationAdjustmentEntry;
-
- QLabel* effectTypeLabel;
- QLabel* levelLabel;
- QLabel* iterationLabel;
-
- RComboBox* effectType;
-
- RIntNumInput* levelInput;
- RIntNumInput* iterationInput;
ImageGuideWidget* previewWidget;
EditorToolSettings* gboxSettings;
+ ColorFXSettings* settingsView;
};
const QString ColorFxTool::Private::configGroupName("coloreffect Tool");
const QString ColorFxTool::Private::configHistogramChannelEntry("Histogram \
Channel"); const QString ColorFxTool::Private::configHistogramScaleEntry("Histogram \
Scale");
-const QString ColorFxTool::Private::configEffectTypeEntry("EffectType");
-const QString ColorFxTool::Private::configLevelAdjustmentEntry("LevelAdjustment");
-const QString ColorFxTool::Private::configIterationAdjustmentEntry("IterationAdjustment");
// --------------------------------------------------------
@@ -143,49 +120,7 @@ ColorFxTool::ColorFxTool(QObject* const parent)
// -------------------------------------------------------------
- d->effectTypeLabel = new QLabel(i18n("Type:"));
- d->effectType = new RComboBox();
- d->effectType->addItem(i18n("Solarize"));
- d->effectType->addItem(i18n("Vivid"));
- d->effectType->addItem(i18n("Neon"));
- d->effectType->addItem(i18n("Find Edges"));
- d->effectType->setDefaultIndex(ColorFXFilter::Solarize);
- d->effectType->setWhatsThis(i18n("<p>Select the effect type to apply to the \
image here.</p>"
- "<p><b>Solarize</b>: simulates solarization of \
photograph.</p>"
- "<p><b>Vivid</b>: simulates the Velvia(tm) \
slide film colors.</p>"
- "<p><b>Neon</b>: coloring the edges in a \
photograph to "
- "reproduce a fluorescent light effect.</p>"
- "<p><b>Find Edges</b>: detects the edges in a \
photograph "
- "and their strength.</p>"));
-
- d->levelLabel = new QLabel(i18nc("level of the effect", "Level:"));
- d->levelInput = new RIntNumInput();
- d->levelInput->setRange(0, 100, 1);
- d->levelInput->setSliderEnabled(true);
- d->levelInput->setDefaultValue(0);
- d->levelInput->setWhatsThis( i18n("Set here the level of the effect."));
-
- d->iterationLabel = new QLabel(i18n("Iteration:"));
- d->iterationInput = new RIntNumInput();
- d->iterationInput->setRange(0, 100, 1);
- d->iterationInput->setSliderEnabled(true);
- d->iterationInput->setDefaultValue(0);
- d->iterationInput->setWhatsThis( i18n("This value controls the number of \
iterations "
- "to use with the Neon and Find Edges \
effects."));
-
- // -------------------------------------------------------------
-
- QGridLayout* mainLayout = new QGridLayout();
- mainLayout->addWidget(d->effectTypeLabel, 0, 0, 1, 5);
- mainLayout->addWidget(d->effectType, 1, 0, 1, 5);
- mainLayout->addWidget(d->levelLabel, 2, 0, 1, 5);
- mainLayout->addWidget(d->levelInput, 3, 0, 1, 5);
- mainLayout->addWidget(d->iterationLabel, 4, 0, 1, 5);
- mainLayout->addWidget(d->iterationInput, 5, 0, 1, 5);
- mainLayout->setRowStretch(6, 10);
- mainLayout->setMargin(d->gboxSettings->spacingHint());
- mainLayout->setSpacing(d->gboxSettings->spacingHint());
- d->gboxSettings->plainPage()->setLayout(mainLayout);
+ d->settingsView = new ColorFXSettings(d->gboxSettings->plainPage());
// -------------------------------------------------------------
@@ -197,17 +132,13 @@ ColorFxTool::ColorFxTool(QObject* const parent)
connect(d->previewWidget, \
SIGNAL(spotPositionChangedFromTarget(Digikam::DColor,QPoint)), this, \
SLOT(slotColorSelectedFromTarget(Digikam::DColor)));
- connect(d->levelInput, SIGNAL(valueChanged(int)),
- this, SLOT(slotTimer()));
-
- connect(d->iterationInput, SIGNAL(valueChanged(int)),
- this, SLOT(slotTimer()));
-
connect(d->previewWidget, SIGNAL(signalResized()),
this, SLOT(slotPreview()));
- connect(d->effectType, SIGNAL(activated(int)),
- this, SLOT(slotEffectTypeChanged(int)));
+ connect(d->settingsView, SIGNAL(signalSettingsChanged()),
+ this, SLOT(slotPreview()));
+ connect(d->settingsView, SIGNAL(signalLevelOrIterationChanged()),
+ this, SLOT(slotTimer()));
}
ColorFxTool::~ColorFxTool()
@@ -225,10 +156,7 @@ void ColorFxTool::readSettings()
d->gboxSettings->histogramBox()->setScale((HistogramScale)group.readEntry(d->configHistogramScaleEntry,
(int)LogScaleHistogram));
- d->effectType->setCurrentIndex(group.readEntry(d->configEffectTypeEntry, \
d->effectType->defaultIndex()));
- d->levelInput->setValue(group.readEntry(d->configLevelAdjustmentEntry, \
d->levelInput->defaultValue()));
- d->iterationInput->setValue(group.readEntry(d->configIterationAdjustmentEntry, \
d->iterationInput->defaultValue()));
- slotEffectTypeChanged(d->effectType->currentIndex()); //check for \
enable/disable of iteration + d->settingsView->readSettings(group);
}
void ColorFxTool::writeSettings()
@@ -239,27 +167,14 @@ void ColorFxTool::writeSettings()
group.writeEntry(d->configHistogramChannelEntry, \
(int)d->gboxSettings->histogramBox()->channel());
group.writeEntry(d->configHistogramScaleEntry, \
(int)d->gboxSettings->histogramBox()->scale());
- group.writeEntry(d->configEffectTypeEntry, \
d->effectType->currentIndex());
- group.writeEntry(d->configLevelAdjustmentEntry, d->levelInput->value());
- group.writeEntry(d->configIterationAdjustmentEntry, d->iterationInput->value());
+ d->settingsView->writeSettings(group);
group.sync();
}
void ColorFxTool::slotResetSettings()
{
- d->effectType->blockSignals(true);
- d->levelInput->blockSignals(true);
- d->iterationInput->blockSignals(true);
-
- d->effectType->slotReset();
- d->levelInput->slotReset();
- d->iterationInput->slotReset();
-
- d->effectType->blockSignals(false);
- d->levelInput->blockSignals(false);
- d->iterationInput->blockSignals(false);
-
+ d->settingsView->resetToDefault();
slotPreview();
}
@@ -268,88 +183,25 @@ void ColorFxTool::slotColorSelectedFromTarget(const DColor& \
color)
d->gboxSettings->histogramBox()->histogram()->setHistogramGuideByColor(color);
}
-void ColorFxTool::slotEffectTypeChanged(int type)
-{
- d->levelInput->setEnabled(true);
- d->levelLabel->setEnabled(true);
-
- d->levelInput->blockSignals(true);
- d->iterationInput->blockSignals(true);
- d->levelInput->setRange(0, 100, 1);
- d->levelInput->setSliderEnabled(true);
- d->levelInput->setValue(25);
-
- switch (type)
- {
- case ColorFXFilter::Solarize:
- d->levelInput->setRange(0, 100, 1);
- d->levelInput->setSliderEnabled(true);
- d->levelInput->setValue(0);
- d->iterationInput->setEnabled(false);
- d->iterationLabel->setEnabled(false);
- break;
-
- case ColorFXFilter::Vivid:
- d->levelInput->setRange(0, 50, 1);
- d->levelInput->setSliderEnabled(true);
- d->levelInput->setValue(5);
- d->iterationInput->setEnabled(false);
- d->iterationLabel->setEnabled(false);
- break;
-
- case ColorFXFilter::Neon:
- case ColorFXFilter::FindEdges:
- d->levelInput->setRange(0, 5, 1);
- d->levelInput->setSliderEnabled(true);
- d->levelInput->setValue(3);
- d->iterationInput->setEnabled(true);
- d->iterationLabel->setEnabled(true);
- d->iterationInput->setRange(0, 5, 1);
- d->iterationInput->setSliderEnabled(true);
- d->iterationInput->setValue(2);
- break;
- }
-
- d->levelInput->blockSignals(false);
- d->iterationInput->blockSignals(false);
-
- slotPreview();
-}
-
void ColorFxTool::preparePreview()
{
- d->effectTypeLabel->setEnabled(false);
- d->effectType->setEnabled(false);
- d->levelInput->setEnabled(false);
- d->levelLabel->setEnabled(false);
- d->iterationInput->setEnabled(false);
- d->iterationLabel->setEnabled(false);
-
- int l = d->levelInput->value();
- int f = d->iterationInput->value();
- int e = d->effectType->currentIndex();
+ d->settingsView->disable();
+ ColorFXContainer prm = d->settingsView->settings();
+
ImageIface* const iface = d->previewWidget->imageIface();
DImg image = iface->preview();
- setFilter(new ColorFXFilter(&image, this, e, l, f));
+ setFilter(new ColorFXFilter(&image, this, prm));
}
void ColorFxTool::prepareFinal()
{
- d->effectTypeLabel->setEnabled(false);
- d->effectType->setEnabled(false);
- d->levelInput->setEnabled(false);
- d->levelLabel->setEnabled(false);
- d->iterationInput->setEnabled(false);
- d->iterationLabel->setEnabled(false);
-
- int l = d->levelInput->value();
- int f = d->iterationInput->value();
- int e = d->effectType->currentIndex();
+ d->settingsView->disable();
+ ColorFXContainer prm = d->settingsView->settings();
ImageIface iface;
- setFilter(new ColorFXFilter(iface.original(), this, e, l, f));
+ setFilter(new ColorFXFilter(iface.original(), this, prm));
}
void ColorFxTool::setPreviewImage()
@@ -369,7 +221,7 @@ void ColorFxTool::setFinalImage()
QString name;
- switch (d->effectType->currentIndex())
+ switch (d->settingsView->settings().colorFXType)
{
case ColorFXFilter::Solarize:
name = i18n("Solarize");
@@ -393,27 +245,7 @@ void ColorFxTool::setFinalImage()
void ColorFxTool::renderingFinished()
{
- d->effectTypeLabel->setEnabled(true);
- d->effectType->setEnabled(true);
- d->levelInput->setEnabled(true);
- d->levelLabel->setEnabled(true);
- d->iterationInput->setEnabled(true);
- d->iterationLabel->setEnabled(true);
-
- switch (d->effectType->currentIndex())
- {
- case ColorFXFilter::Solarize:
- case ColorFXFilter::Vivid:
- d->iterationInput->setEnabled(false);
- d->iterationLabel->setEnabled(false);
- break;
-
- case ColorFXFilter::Neon:
- case ColorFXFilter::FindEdges:
- d->iterationInput->setEnabled(true);
- d->iterationLabel->setEnabled(true);
- break;
- }
+ d->settingsView->enable();
}
} // namespace DigikamFxFiltersImagePlugin
diff --git a/imageplugins/filters/colorfxtool.h b/imageplugins/filters/colorfxtool.h
index 07d1e3a..768425b 100644
--- a/imageplugins/filters/colorfxtool.h
+++ b/imageplugins/filters/colorfxtool.h
@@ -61,7 +61,6 @@ private:
private Q_SLOTS:
- void slotEffectTypeChanged(int type);
void slotResetSettings();
void slotColorSelectedFromTarget(const Digikam::DColor& color);
diff --git a/libs/dimg/filters/fx/colorfxfilter.cpp \
b/libs/dimg/filters/fx/colorfxfilter.cpp index ee8dd3f..29d50ca 100644
--- a/libs/dimg/filters/fx/colorfxfilter.cpp
+++ b/libs/dimg/filters/fx/colorfxfilter.cpp
@@ -44,34 +44,32 @@ ColorFXFilter::ColorFXFilter(QObject* const parent)
initFilter();
}
-ColorFXFilter::ColorFXFilter(DImg* const orgImage, QObject* const parent, int type, \
int level, int iterations) +ColorFXFilter::ColorFXFilter(DImg* const orgImage, \
QObject* const parent, const ColorFXContainer& settings) : \
DImgThreadedFilter(orgImage, parent, "ColorFX") {
- m_colorFXType = type;
- m_level = level;
- m_iterations = iterations;
+ m_settings = settings;
initFilter();
}
void ColorFXFilter::filterImage()
{
- switch (m_colorFXType)
+ switch (m_settings.colorFXType)
{
case Solarize:
- solarize(&m_orgImage, &m_destImage, m_level);
+ solarize(&m_orgImage, &m_destImage, m_settings.level);
break;
case Vivid:
- vivid(&m_orgImage, &m_destImage, m_level);
+ vivid(&m_orgImage, &m_destImage, m_settings.level);
break;
case Neon:
- neon(&m_orgImage, &m_destImage, m_level, m_iterations);
+ neon(&m_orgImage, &m_destImage, m_settings.level, \
m_settings.iterations); break;
case FindEdges:
- findEdges(&m_orgImage, &m_destImage, m_level, m_iterations);
+ findEdges(&m_orgImage, &m_destImage, m_settings.level, \
m_settings.iterations); break;
}
}
@@ -365,18 +363,18 @@ FilterAction ColorFXFilter::filterAction()
FilterAction action(FilterIdentifier(), CurrentVersion());
action.setDisplayableName(DisplayableName());
- action.addParameter("type", m_colorFXType);
- action.addParameter("iteration", m_iterations);
- action.addParameter("level", m_level);
+ action.addParameter("type", m_settings.colorFXType);
+ action.addParameter("iteration", m_settings.iterations);
+ action.addParameter("level", m_settings.level);
return action;
}
void ColorFXFilter::readParameters(const FilterAction& action)
{
- m_colorFXType = action.parameter("type").toInt();
- m_iterations = action.parameter("iteration").toInt();
- m_level = action.parameter("level").toInt();
+ m_settings.colorFXType = action.parameter("type").toInt();
+ m_settings.iterations = action.parameter("iteration").toInt();
+ m_settings.level = action.parameter("level").toInt();
}
} // namespace DigikamFxFiltersImagePlugin
diff --git a/libs/dimg/filters/fx/colorfxfilter.h \
b/libs/dimg/filters/fx/colorfxfilter.h index 2cbd6cc..f99abd9 100644
--- a/libs/dimg/filters/fx/colorfxfilter.h
+++ b/libs/dimg/filters/fx/colorfxfilter.h
@@ -40,14 +40,36 @@ namespace Digikam
class RandomNumberGenerator;
+class DIGIKAM_EXPORT ColorFXContainer
+{
+
+public:
+
+ ColorFXContainer()
+ {
+ colorFXType = 0; // ColorFXFilter::Solarize
+ level = 0;
+ iterations = 2;
+ };
+
+ ~ColorFXContainer() {};
+
+public:
+
+ int colorFXType;
+ int level;
+ int iterations;
+};
+
+
class DIGIKAM_EXPORT ColorFXFilter : public DImgThreadedFilter
{
public:
explicit ColorFXFilter(QObject* const parent = 0);
- explicit ColorFXFilter(DImg* const orgImage, QObject* const parent,
- int colorFXType = Solarize, int level = 25, int \
iterations = 2); + explicit ColorFXFilter(DImg* const orgImage, QObject* const \
parent, const ColorFXContainer& settings=ColorFXContainer()); +
~ColorFXFilter() {};
static QString FilterIdentifier()
@@ -101,9 +123,7 @@ private:
private:
- int m_colorFXType;
- int m_level;
- int m_iterations;
+ ColorFXContainer m_settings;
};
} // namespace Digikam
diff --git a/libs/dimg/filters/fx/colorfxsettings.cpp \
b/libs/dimg/filters/fx/colorfxsettings.cpp new file mode 100644
index 0000000..e66acf0
--- /dev/null
+++ b/libs/dimg/filters/fx/colorfxsettings.cpp
@@ -0,0 +1,276 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-11-08
+ * Description : Color effects settings view.
+ *
+ * Copyright (C) 2012 by Alexander Dymo <adymo@kdevelop.org>
+ *
+ * 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.
+ *
+ * ============================================================ */
+#include "colorfxsettings.moc"
+
+// Qt includes
+
+#include <QGridLayout>
+#include <QLabel>
+
+// KDE includes
+
+#include <kdebug.h>
+#include <kdialog.h>
+
+#include <libkdcraw/rnuminput.h>
+#include <libkdcraw/rcombobox.h>
+
+namespace Digikam
+{
+
+class ColorFXSettings::ColorFXSettingsPriv
+{
+public:
+
+ ColorFXSettingsPriv() :
+ effectTypeLabel(0),
+ levelLabel(0),
+ iterationLabel(0),
+ effectType(0),
+ levelInput(0),
+ iterationInput(0)
+ {}
+
+ static const QString configEffectTypeEntry;
+ static const QString configLevelAdjustmentEntry;
+ static const QString configIterationAdjustmentEntry;
+
+ QLabel* effectTypeLabel;
+ QLabel* levelLabel;
+ QLabel* iterationLabel;
+
+ RComboBox* effectType;
+
+ RIntNumInput* levelInput;
+ RIntNumInput* iterationInput;
+};
+
+const QString ColorFXSettings::ColorFXSettingsPriv::configEffectTypeEntry("EffectType");
+const QString ColorFXSettings::ColorFXSettingsPriv::configLevelAdjustmentEntry("LevelAdjustment");
+const QString ColorFXSettings::ColorFXSettingsPriv::configIterationAdjustmentEntry("IterationAdjustment");
+
+
+// --------------------------------------------------------
+
+ColorFXSettings::ColorFXSettings(QWidget* parent)
+ : QWidget(parent),
+ d(new ColorFXSettingsPriv)
+{
+ QGridLayout* grid = new QGridLayout(parent);
+
+ d->effectTypeLabel = new QLabel(i18n("Type:"));
+ d->effectType = new RComboBox();
+ d->effectType->addItem(i18n("Solarize"));
+ d->effectType->addItem(i18n("Vivid"));
+ d->effectType->addItem(i18n("Neon"));
+ d->effectType->addItem(i18n("Find Edges"));
+ d->effectType->setDefaultIndex(ColorFXFilter::Solarize);
+ d->effectType->setWhatsThis(i18n("<p>Select the effect type to apply to the \
image here.</p>" + "<p><b>Solarize</b>: simulates \
solarization of photograph.</p>" + \
"<p><b>Vivid</b>: simulates the Velvia(tm) slide film colors.</p>" + \
"<p><b>Neon</b>: coloring the edges in a photograph to " + \
"reproduce a fluorescent light effect.</p>" + \
"<p><b>Find Edges</b>: detects the edges in a photograph " + \
"and their strength.</p>")); +
+ d->levelLabel = new QLabel(i18nc("level of the effect", "Level:"));
+ d->levelInput = new RIntNumInput();
+ d->levelInput->setRange(0, 100, 1);
+ d->levelInput->setSliderEnabled(true);
+ d->levelInput->setDefaultValue(0);
+ d->levelInput->setWhatsThis( i18n("Set here the level of the effect."));
+
+ d->iterationLabel = new QLabel(i18n("Iteration:"));
+ d->iterationInput = new RIntNumInput();
+ d->iterationInput->setRange(0, 100, 1);
+ d->iterationInput->setSliderEnabled(true);
+ d->iterationInput->setDefaultValue(0);
+ d->iterationInput->setWhatsThis( i18n("This value controls the number of \
iterations " + "to use with the Neon and \
Find Edges effects.")); +
+
+ grid->addWidget(d->effectTypeLabel, 0, 0, 1, 5);
+ grid->addWidget(d->effectType, 1, 0, 1, 5);
+ grid->addWidget(d->levelLabel, 2, 0, 1, 5);
+ grid->addWidget(d->levelInput, 3, 0, 1, 5);
+ grid->addWidget(d->iterationLabel, 4, 0, 1, 5);
+ grid->addWidget(d->iterationInput, 5, 0, 1, 5);
+ grid->setRowStretch(6, 10);
+ grid->setMargin(KDialog::spacingHint());
+ grid->setSpacing(KDialog::spacingHint());
+
+ // -------------------------------------------------------------
+
+ connect(d->levelInput, SIGNAL(valueChanged(int)),
+ this, SIGNAL(signalLevelOrIterationChanged()));
+
+ connect(d->iterationInput, SIGNAL(valueChanged(int)),
+ this, SIGNAL(signalLevelOrIterationChanged()));
+
+ connect(d->effectType, SIGNAL(activated(int)),
+ this, SLOT(slotEffectTypeChanged(int)));
+}
+
+ColorFXSettings::~ColorFXSettings()
+{
+ delete d;
+}
+
+void ColorFXSettings::slotEffectTypeChanged(int type)
+{
+ d->levelInput->setEnabled(true);
+ d->levelLabel->setEnabled(true);
+
+ d->levelInput->blockSignals(true);
+ d->iterationInput->blockSignals(true);
+ d->levelInput->setRange(0, 100, 1);
+ d->levelInput->setSliderEnabled(true);
+ d->levelInput->setValue(25);
+
+ switch (type)
+ {
+ case ColorFXFilter::Solarize:
+ d->levelInput->setRange(0, 100, 1);
+ d->levelInput->setSliderEnabled(true);
+ d->levelInput->setValue(0);
+ d->iterationInput->setEnabled(false);
+ d->iterationLabel->setEnabled(false);
+ break;
+
+ case ColorFXFilter::Vivid:
+ d->levelInput->setRange(0, 50, 1);
+ d->levelInput->setSliderEnabled(true);
+ d->levelInput->setValue(5);
+ d->iterationInput->setEnabled(false);
+ d->iterationLabel->setEnabled(false);
+ break;
+
+ case ColorFXFilter::Neon:
+ case ColorFXFilter::FindEdges:
+ d->levelInput->setRange(0, 5, 1);
+ d->levelInput->setSliderEnabled(true);
+ d->levelInput->setValue(3);
+ d->iterationInput->setEnabled(true);
+ d->iterationLabel->setEnabled(true);
+ d->iterationInput->setRange(0, 5, 1);
+ d->iterationInput->setSliderEnabled(true);
+ d->iterationInput->setValue(2);
+ break;
+ }
+
+ d->levelInput->blockSignals(false);
+ d->iterationInput->blockSignals(false);
+
+ emit signalSettingsChanged();
+}
+
+
+ColorFXContainer ColorFXSettings::settings() const
+{
+ ColorFXContainer prm;
+ prm.colorFXType = d->effectType->currentIndex();
+ prm.level = d->levelInput->value();
+ prm.iterations = d->iterationInput->value();
+ return prm;
+}
+
+void ColorFXSettings::setSettings(const ColorFXContainer& settings)
+{
+ blockSignals(true);
+
+ d->effectType->setCurrentIndex(settings.colorFXType);
+ slotEffectTypeChanged(settings.colorFXType);
+
+ d->levelInput->setValue(settings.level);
+ d->iterationInput->setValue(settings.iterations);
+
+ blockSignals(false);
+}
+
+void ColorFXSettings::resetToDefault()
+{
+ setSettings(defaultSettings());
+}
+
+ColorFXContainer ColorFXSettings::defaultSettings() const
+{
+ return ColorFXContainer();
+}
+
+void ColorFXSettings::readSettings(KConfigGroup& group)
+{
+ ColorFXContainer prm;
+ ColorFXContainer defaultPrm = defaultSettings();
+
+ d->effectType->setCurrentIndex(group.readEntry(d->configEffectTypeEntry, \
d->effectType->defaultIndex())); + \
d->levelInput->setValue(group.readEntry(d->configLevelAdjustmentEntry, \
d->levelInput->defaultValue())); + \
d->iterationInput->setValue(group.readEntry(d->configIterationAdjustmentEntry, \
d->iterationInput->defaultValue())); +
+ setSettings(prm);
+}
+
+void ColorFXSettings::writeSettings(KConfigGroup& group)
+{
+ ColorFXContainer prm = settings();
+
+ group.writeEntry(d->configEffectTypeEntry, \
d->effectType->currentIndex()); + group.writeEntry(d->configLevelAdjustmentEntry, \
d->levelInput->value()); + group.writeEntry(d->configIterationAdjustmentEntry, \
d->iterationInput->value()); +}
+
+void ColorFXSettings::enable()
+{
+ d->effectTypeLabel->setEnabled(true);
+ d->effectType->setEnabled(true);
+ d->levelInput->setEnabled(true);
+ d->levelLabel->setEnabled(true);
+ d->iterationInput->setEnabled(true);
+ d->iterationLabel->setEnabled(true);
+
+ switch (d->effectType->currentIndex())
+ {
+ case ColorFXFilter::Solarize:
+ case ColorFXFilter::Vivid:
+ d->iterationInput->setEnabled(false);
+ d->iterationLabel->setEnabled(false);
+ break;
+
+ case ColorFXFilter::Neon:
+ case ColorFXFilter::FindEdges:
+ d->iterationInput->setEnabled(true);
+ d->iterationLabel->setEnabled(true);
+ break;
+ }
+}
+
+void ColorFXSettings::disable()
+{
+ d->effectTypeLabel->setEnabled(false);
+ d->effectType->setEnabled(false);
+ d->levelInput->setEnabled(false);
+ d->levelLabel->setEnabled(false);
+ d->iterationInput->setEnabled(false);
+ d->iterationLabel->setEnabled(false);
+}
+
+} // namespace Digikam
diff --git a/libs/dimg/filters/fx/colorfxsettings.h \
b/libs/dimg/filters/fx/colorfxsettings.h new file mode 100644
index 0000000..1ccd06f
--- /dev/null
+++ b/libs/dimg/filters/fx/colorfxsettings.h
@@ -0,0 +1,81 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-11-08
+ * Description : Color effects settings view.
+ *
+ * Copyright (C) 2012 by Alexander Dymo <adymo@kdevelop.org>
+ *
+ * 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.
+ *
+ * ============================================================ */
+
+#ifndef COLORFXSETTINGS_H
+#define COLORFXSETTINGS_H
+
+// Local includes
+
+#include <QWidget>
+
+// KDE includes
+
+#include <kconfig.h>
+
+// Local includes
+
+#include "digikam_export.h"
+#include "colorfxfilter.h"
+
+namespace Digikam
+{
+
+class DIGIKAM_EXPORT ColorFXSettings : public QWidget
+{
+ Q_OBJECT
+
+public:
+
+ explicit ColorFXSettings(QWidget* parent);
+ ~ColorFXSettings();
+
+ ColorFXContainer defaultSettings() const;
+ void resetToDefault();
+
+ ColorFXContainer settings() const;
+ void setSettings(const ColorFXContainer& settings);
+
+ void readSettings(KConfigGroup& group);
+ void writeSettings(KConfigGroup& group);
+
+ void enable();
+ void disable();
+
+Q_SIGNALS:
+
+ void signalLevelOrIterationChanged();
+ void signalSettingsChanged();
+
+private Q_SLOTS:
+
+ void slotEffectTypeChanged(int type);
+
+private:
+
+ class ColorFXSettingsPriv;
+ ColorFXSettingsPriv* const d;
+};
+
+} // namespace Digikam
+
+#endif /* COLORFXSETTINGS_H */
diff --git a/utilities/queuemanager/CMakeLists.txt \
b/utilities/queuemanager/CMakeLists.txt index 8bc505d..561fa09 100644
--- a/utilities/queuemanager/CMakeLists.txt
+++ b/utilities/queuemanager/CMakeLists.txt
@@ -25,6 +25,7 @@ SET(libqueuemanager_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/basetools/enhance/restoration.cpp
${CMAKE_CURRENT_SOURCE_DIR}/basetools/enhance/sharpen.cpp
${CMAKE_CURRENT_SOURCE_DIR}/basetools/filters/filmgrain.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/basetools/filters/colorfx.cpp
${CMAKE_CURRENT_SOURCE_DIR}/basetools/metadata/assigntemplate.cpp
${CMAKE_CURRENT_SOURCE_DIR}/basetools/metadata/removemetadata.cpp
${CMAKE_CURRENT_SOURCE_DIR}/basetools/transform/flip.cpp
diff --git a/utilities/queuemanager/basetools/filters/colorfx.cpp \
b/utilities/queuemanager/basetools/filters/colorfx.cpp new file mode 100644
index 0000000..72a3b35
--- /dev/null
+++ b/utilities/queuemanager/basetools/filters/colorfx.cpp
@@ -0,0 +1,113 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-11-08
+ * Description : a batch tool to apply color effects to images.
+ *
+ * Copyright (C) 2012 by Alexander Dymo <adymo@develop.org>
+ *
+ * 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.
+ *
+ * ============================================================ */
+
+#include "colorfx.moc"
+
+// KDE includes
+
+#include <kdebug.h>
+#include <kiconloader.h>
+
+// Local includes
+
+#include "dimg.h"
+#include "colorfxfilter.h"
+#include "colorfxsettings.h"
+
+namespace Digikam
+{
+
+ColorFX::ColorFX(QObject* parent)
+ : BatchTool("ColorFX", FiltersTool, parent)
+{
+ setToolTitle(i18n("Color Effects"));
+ setToolDescription(i18n("Apply color effects"));
+ setToolIcon(KIcon(SmallIcon("colorfx")));
+
+ QWidget* box = new QWidget;
+ m_settingsView = new ColorFXSettings(box);
+ m_settingsView->resetToDefault();
+ setSettingsWidget(box);
+
+ connect(m_settingsView, SIGNAL(signalSettingsChanged()),
+ this, SLOT(slotSettingsChanged()));
+ connect(m_settingsView, SIGNAL(signalLevelOrIterationChanged()),
+ this, SLOT(slotSettingsChanged()));
+}
+
+ColorFX::~ColorFX()
+{
+}
+
+BatchToolSettings ColorFX::defaultSettings()
+{
+ BatchToolSettings prm;
+ ColorFXContainer defaultPrm = m_settingsView->defaultSettings();
+
+ prm.insert("colorFXType", (int)defaultPrm.colorFXType);
+ prm.insert("level", (int)defaultPrm.level);
+ prm.insert("iterations", (int)defaultPrm.iterations);
+
+ return prm;
+}
+
+void ColorFX::slotAssignSettings2Widget()
+{
+ ColorFXContainer prm;
+ prm.colorFXType = settings()["colorFXType"].toInt();
+ prm.level = settings()["level"].toInt();
+ prm.iterations = settings()["iterations"].toInt();
+ m_settingsView->setSettings(prm);
+}
+
+void ColorFX::slotSettingsChanged()
+{
+ BatchToolSettings prm;
+ ColorFXContainer currentPrm = m_settingsView->settings();
+
+ prm.insert("colorFXType", (int)currentPrm.colorFXType);
+ prm.insert("level", (int)currentPrm.level);
+ prm.insert("iterations", (int)currentPrm.iterations);
+
+ BatchTool::slotSettingsChanged(prm);
+}
+
+bool ColorFX::toolOperations()
+{
+ if (!loadToDImg())
+ {
+ return false;
+ }
+
+ ColorFXContainer prm;
+ prm.colorFXType = settings()["colorFXType"].toInt();
+ prm.level = settings()["level"].toInt();
+ prm.iterations = settings()["iterations"].toInt();
+
+ ColorFXFilter fg(&image(), 0L, prm);
+ applyFilter(&fg);
+
+ return savefromDImg();
+}
+
+} // namespace Digikam
diff --git a/utilities/queuemanager/basetools/filters/colorfx.h \
b/utilities/queuemanager/basetools/filters/colorfx.h new file mode 100644
index 0000000..e706a49
--- /dev/null
+++ b/utilities/queuemanager/basetools/filters/colorfx.h
@@ -0,0 +1,62 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-11-08
+ * Description : a batch tool to apply color effects to images.
+ *
+ * Copyright (C) 2012 by Alexander Dymo <adymo@develop.org>
+ *
+ * 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.
+ *
+ * ============================================================ */
+
+#ifndef COLORFX_H_
+#define COLORFX_H_
+
+#include "batchtool.h"
+
+
+namespace Digikam
+{
+
+class ColorFXSettings;
+
+class ColorFX : public BatchTool
+{
+ Q_OBJECT
+
+public:
+
+ explicit ColorFX(QObject* parent = 0);
+ ~ColorFX();
+
+ BatchToolSettings defaultSettings();
+
+private:
+
+ bool toolOperations();
+
+private Q_SLOTS:
+
+ void slotAssignSettings2Widget();
+ void slotSettingsChanged();
+
+private:
+
+ ColorFXSettings* m_settingsView;
+};
+
+} // namespace Digikam
+
+#endif /* COLORFX_H_ */
diff --git a/utilities/queuemanager/manager/batchtoolsmanager.cpp \
b/utilities/queuemanager/manager/batchtoolsmanager.cpp index 0f5ef8c..4f3c1df 100644
--- a/utilities/queuemanager/manager/batchtoolsmanager.cpp
+++ b/utilities/queuemanager/manager/batchtoolsmanager.cpp
@@ -50,6 +50,7 @@
#include "whitebalance.h"
#include "curvesadjust.h"
#include "filmgrain.h"
+#include "colorfx.h"
#include "localcontrast.h"
#include "antivignetting.h"
#include "invert.h"
@@ -124,6 +125,7 @@ BatchToolsManager::BatchToolsManager(QObject* const parent)
// Filters
registerTool(new FilmGrain(this));
+ registerTool(new ColorFX(this));
}
BatchToolsManager::~BatchToolsManager()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic