Subversion Repositories Scribus

Rev

Rev 22652 | Rev 22998 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/

#include "effectsdialog.h"
#include <QHBoxLayout>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QSpacerItem>
#include <QPixmap>
#include <QLabel>
#include <QPushButton>
#include <QToolButton>
#include <QListWidget>
#include <QListWidgetItem>
#include <QToolTip>
#include <QSlider>
#include <QImage>
#include <QWidget>
#include <QMenu>
#include <QWidgetAction>
#include <QTime>
#include <QStackedWidget>

#include "cmsettings.h"
#include "colorcombo.h"
#include "curvewidget.h"
#include "iconmanager.h"
#include "scclocale.h"
#include "sccombobox.h"
#include "scpage.h"
#include "scribusdoc.h"
#include "scrspinbox.h"
#include "sctextstream.h"
#include "shadebutton.h"
#include "util.h"
#include "util_color.h"



EffectsDialog::EffectsDialog( QWidget* parent, PageItem* item, ScribusDoc* docc ) : QDialog( parent )
{
        setModal(true);
        setWindowTitle( tr( "Image Effects" ) );
        setWindowIcon(IconManager::instance()->loadIcon("AppIcon.png"));
        m_item = item;
        effectsList = m_item->effectsInUse;
        m_doc = docc;
        currentOptions = nullptr;

//      CMSettings cms(docc, "", Intent_Perceptual);
//      cms.allowColorManagement(false);
        bool mode = false;
        CMSettings cms(m_doc, m_item->IProfile, m_item->IRender);
        cms.setUseEmbeddedProfile(m_item->UseEmbedded);
        cms.allowSoftProofing(true);
        m_image.loadPicture(m_item->Pfile, m_item->pixm.imgInfo.actualPageNumber, cms, ScImage::RGBData, 72, &mode);
        int ix = m_image.width();
        int iy = m_image.height();
        m_imageScale = 1.0;
        if ((ix > 220) || (iy > 220))
        {
                double sx = ix / 220.0;
                double sy = iy / 220.0;
                if (sy < sx)
                        m_image.createLowRes(sx);
                else
                        m_image.createLowRes(sy);
                m_imageScale = qMin(sx, sy);
        }
        EffectsDialogLayout = new QHBoxLayout( this );
        EffectsDialogLayout->setMargin(10);
        EffectsDialogLayout->setSpacing(5);
        layout16 = new QVBoxLayout;
        layout16->setMargin(0);
        layout16->setSpacing(5);
        pixmapLabel1 = new QLabel( this );
        pixmapLabel1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        pixmapLabel1->setMinimumSize( QSize( 220, 220 ) );
        pixmapLabel1->setMaximumSize( QSize( 220, 220 ) );
        pixmapLabel1->setFrameShape( QLabel::StyledPanel );
        pixmapLabel1->setFrameShadow( QLabel::Sunken );
        pixmapLabel1->setScaledContents( false );
        layout16->addWidget( pixmapLabel1 );
        textLabel5 = new QLabel( this );
        textLabel5->setText( tr( "Options:" ) );
        layout16->addWidget( textLabel5 );
        optionStack = new QStackedWidget( this );
//      optionStack->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, optionStack->sizePolicy().hasHeightForWidth() ) );
        optionStack->setMinimumSize( QSize( 220, 180 ) );
        optionStack->setFrameShape( QFrame::Box );
        WStackPage = new QWidget( optionStack );
        optionStack->addWidget( WStackPage );

        WStackPage_2 = new QWidget( optionStack );
        WStackPageLayout = new QVBoxLayout( WStackPage_2 );
        WStackPageLayout->setMargin(5);
        WStackPageLayout->setSpacing(5);
        WStackPageLayout->setAlignment( Qt::AlignTop );
        layout17 = new QHBoxLayout;
        layout17->setMargin(0);
        layout17->setSpacing(5);
        textLabel3 = new QLabel( tr( "Color:" ), WStackPage_2 );
        layout17->addWidget( textLabel3 );

        colData = new ColorCombo(false, WStackPage_2);
        colData->setPixmapType(ColorCombo::fancyPixmaps);
        colData->setColors(m_doc->PageColors, false);
        layout17->addWidget( colData );
        WStackPageLayout->addLayout( layout17 );

        layout19 = new QHBoxLayout;
        layout19->setMargin(0);
        layout19->setSpacing(5);
        textLabel4 = new QLabel( tr( "Shade:" ), WStackPage_2 );
        layout19->addWidget( textLabel4 );
        shade = new ShadeButton(WStackPage_2);
        shade->setValue(100);
        layout19->addWidget( shade );
        WStackPageLayout->addLayout( layout19 );
        optionStack->addWidget( WStackPage_2 );

        WStackPage_3 = new QWidget( optionStack );
        WStackPage3Layout = new QVBoxLayout( WStackPage_3 );
        WStackPage3Layout->setMargin(5);
        WStackPage3Layout->setSpacing(5);
        WStackPage3Layout->setAlignment( Qt::AlignTop );
        layout20 = new QHBoxLayout;
        layout20->setMargin(0);
        layout20->setSpacing(5);
        textLabel6 = new QLabel( tr( "Brightness:" ), WStackPage_3 );
        layout20->addWidget( textLabel6, Qt::AlignLeft );
        textLabel7 = new QLabel( "0", WStackPage_3 );
        layout20->addWidget( textLabel7, Qt::AlignRight );
        WStackPage3Layout->addLayout( layout20 );
        brightnessSlider = new QSlider( WStackPage_3 );
        brightnessSlider->setMinimum(-255);
        brightnessSlider->setMaximum(255);
        brightnessSlider->setValue(0);
        brightnessSlider->setOrientation( Qt::Horizontal );
        brightnessSlider->setTickPosition( QSlider::TicksBelow );
        WStackPage3Layout->addWidget( brightnessSlider );
        optionStack->addWidget( WStackPage_3 );

        WStackPage_4 = new QWidget( optionStack );
        WStackPage4Layout = new QVBoxLayout( WStackPage_4 );
        WStackPage4Layout->setMargin(5);
        WStackPage4Layout->setSpacing(5);
        WStackPage4Layout->setAlignment( Qt::AlignTop );
        layout21 = new QHBoxLayout;
        layout21->setMargin(0);
        layout21->setSpacing(5);
        textLabel8 = new QLabel( tr( "Contrast:" ), WStackPage_4 );
        layout21->addWidget( textLabel8, Qt::AlignLeft );
        textLabel9 = new QLabel( "0", WStackPage_4 );
        layout21->addWidget( textLabel9, Qt::AlignRight );
        WStackPage4Layout->addLayout( layout21 );
        contrastSlider = new QSlider( WStackPage_4 );
        contrastSlider->setMinimum(-127);
        contrastSlider->setMaximum(127);
        contrastSlider->setValue(0);
        contrastSlider->setOrientation( Qt::Horizontal );
        contrastSlider->setTickPosition( QSlider::TicksBelow );
        WStackPage4Layout->addWidget( contrastSlider );
        optionStack->addWidget( WStackPage_4 );

        WStackPage_5 = new QWidget( optionStack );
        WStackPage5Layout = new QVBoxLayout( WStackPage_5 );
        WStackPage5Layout->setMargin(5);
        WStackPage5Layout->setSpacing(5);
        WStackPage5Layout->setAlignment( Qt::AlignTop );
        layout22 = new QHBoxLayout;
        layout22->setMargin(0);
        layout22->setSpacing(5);
        textLabel10 = new QLabel( tr( "Radius:" ), WStackPage_5 );
        layout22->addWidget( textLabel10 );
        shRadius = new ScrSpinBox( 0.0, 10.0, WStackPage_5, 1 );
        shRadius->setDecimals(1);
        shRadius->setSuffix("");
        shRadius->setValue(0);
        layout22->addWidget( shRadius );
        WStackPage5Layout->addLayout( layout22 );
        layout23 = new QHBoxLayout;
        layout23->setMargin(0);
        layout23->setSpacing(5);
        textLabel11 = new QLabel( tr("Value:"), WStackPage_5 );
        layout23->addWidget( textLabel11 );
        shValue = new ScrSpinBox( 0.0, 5.0, WStackPage_5, 1 );
        shValue->setDecimals(1);
        shValue->setSuffix("");
        shValue->setValue(1.0);
        layout23->addWidget( shValue );
        WStackPage5Layout->addLayout( layout23 );
        optionStack->addWidget( WStackPage_5 );

        WStackPage_6 = new QWidget( optionStack );
        WStackPage6Layout = new QVBoxLayout( WStackPage_6 );
        WStackPage6Layout->setMargin(5);
        WStackPage6Layout->setSpacing(5);
        WStackPage6Layout->setAlignment( Qt::AlignTop );
        layout24 = new QHBoxLayout;
        layout24->setMargin(0);
        layout24->setSpacing(5);
        textLabel12 = new QLabel( tr( "Radius:" ), WStackPage_6 );
        layout24->addWidget( textLabel12 );
        blRadius = new ScrSpinBox( 0.0, 30.0, WStackPage_6, 1 );
        blRadius->setDecimals(1);
        blRadius->setSuffix("");
        blRadius->setValue(0);
        layout24->addWidget( blRadius );
        WStackPage6Layout->addLayout( layout24 );
        optionStack->addWidget( WStackPage_6 );

        WStackPage_7 = new QWidget( optionStack );
        WStackPage7Layout = new QVBoxLayout( WStackPage_7 );
        WStackPage7Layout->setMargin(5);
        WStackPage7Layout->setSpacing(5);
        WStackPage7Layout->setAlignment( Qt::AlignTop );
        layout26 = new QHBoxLayout;
        layout26->setMargin(0);
        layout26->setSpacing(5);
        textLabel14 = new QLabel( tr( "Posterize:" ), WStackPage_7 );
        layout26->addWidget( textLabel14, Qt::AlignLeft );
        textLabel15 = new QLabel( "0", WStackPage_7 );
        layout26->addWidget( textLabel15, Qt::AlignRight );
        WStackPage7Layout->addLayout( layout26 );
        solarizeSlider = new QSlider( WStackPage_7 );
        solarizeSlider->setMinimum(1);
        solarizeSlider->setMaximum(255);
        solarizeSlider->setValue(255);
        solarizeSlider->setOrientation( Qt::Horizontal );
        solarizeSlider->setTickPosition( QSlider::TicksBelow );
        WStackPage7Layout->addWidget( solarizeSlider );
        optionStack->addWidget( WStackPage_7 );

        WStackPage_8 = new QWidget( optionStack );
        WStackPage8Layout = new QGridLayout( WStackPage_8 );
        WStackPage8Layout->setMargin(4);
        WStackPage8Layout->setSpacing(5);
        WStackPage8Layout->setAlignment( Qt::AlignTop );
        textLabel1d = new QLabel( tr( "Color 1:" ), WStackPage_8 );
        WStackPage8Layout->addWidget( textLabel1d, 0, 0 );
        colData1 = new ColorCombo(false, WStackPage_8);
        colData1->setPixmapType(ColorCombo::fancyPixmaps);
        colData1->setColors(m_doc->PageColors, false);
        WStackPage8Layout->addWidget( colData1, 0, 1, 1, 2);
        shade1 = new ShadeButton(WStackPage_8);
        shade1->setValue(100);
        WStackPage8Layout->addWidget( shade1, 1, 1 );
        CurveD1 = new CurveWidget( nullptr );
        CurveD1Pop = new QMenu();
        CurveD1Act = new QWidgetAction(this);
        CurveD1Act->setDefaultWidget(CurveD1);
        CurveD1Pop->addAction(CurveD1Act);
        CurveD1Button = new QToolButton( WStackPage_8 );
        CurveD1Button->setText( "" );
        CurveD1Button->setMaximumSize( QSize( 22, 22 ) );
        CurveD1Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveD1Button->setMenu(CurveD1Pop);
        CurveD1Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage8Layout->addWidget( CurveD1Button, 1, 2 );

        textLabel2d = new QLabel( tr( "Color 2:" ), WStackPage_8 );
        WStackPage8Layout->addWidget( textLabel2d, 2, 0 );
        colData2 = new ColorCombo(false, WStackPage_8);
        colData2->setPixmapType(ColorCombo::fancyPixmaps);
        colData2->setColors(m_doc->PageColors, false);
        WStackPage8Layout->addWidget( colData2, 2, 1, 1, 2);
        shade2 = new ShadeButton(WStackPage_8);
        shade2->setValue(100);
        WStackPage8Layout->addWidget( shade2, 3, 1 );
        CurveD2 = new CurveWidget( nullptr );
        CurveD2Pop = new QMenu();
        CurveD2Act = new QWidgetAction(this);
        CurveD2Act->setDefaultWidget(CurveD2);
        CurveD2Pop->addAction(CurveD2Act);
        CurveD2Button = new QToolButton( WStackPage_8 );
        CurveD2Button->setText( "" );
        CurveD2Button->setMaximumSize( QSize( 22, 22 ) );
        CurveD2Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveD2Button->setMenu(CurveD2Pop);
        CurveD2Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage8Layout->addWidget( CurveD2Button, 3, 2 );
        auto *spacerD1 = new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding );
        WStackPage8Layout->addItem( spacerD1, 4, 0 );
        optionStack->addWidget( WStackPage_8 );

        WStackPage_9 = new QWidget( optionStack );
        WStackPage9Layout = new QGridLayout( WStackPage_9 );
        WStackPage9Layout->setMargin(4);
        WStackPage9Layout->setSpacing(5);
        WStackPage9Layout->setAlignment( Qt::AlignTop );
        textLabel1t = new QLabel( tr( "Color 1:" ), WStackPage_9 );
        WStackPage9Layout->addWidget( textLabel1t, 0, 0 );
        colDatat1 = new ColorCombo(false, WStackPage_9);
        colDatat1->setPixmapType(ColorCombo::fancyPixmaps);
        colDatat1->setColors(m_doc->PageColors, false);
        WStackPage9Layout->addWidget( colDatat1, 0, 1, 1, 2 );
        shadet1 = new ShadeButton(WStackPage_9);
        shadet1->setValue(100);
        WStackPage9Layout->addWidget( shadet1, 1, 1 );
        CurveT1 = new CurveWidget( nullptr );
        CurveT1Pop = new QMenu();
        CurveT1Act = new QWidgetAction(this);
        CurveT1Act->setDefaultWidget(CurveT1);
        CurveT1Pop->addAction(CurveT1Act);
        CurveT1Button = new QToolButton( WStackPage_9 );
        CurveT1Button->setText( "" );
        CurveT1Button->setMaximumSize( QSize( 22, 22 ) );
        CurveT1Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveT1Button->setMenu(CurveT1Pop);
        CurveT1Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage9Layout->addWidget( CurveT1Button, 1, 2 );
        textLabel2t = new QLabel( tr( "Color 2:" ), WStackPage_9 );
        WStackPage9Layout->addWidget( textLabel2t, 2, 0 );
        colDatat2 = new ColorCombo(false, WStackPage_9);
        colDatat2->setPixmapType(ColorCombo::fancyPixmaps);
        colDatat2->setColors(m_doc->PageColors, false);
        WStackPage9Layout->addWidget( colDatat2, 2, 1, 1, 2 );
        shadet2 = new ShadeButton(WStackPage_9);
        shadet2->setValue(100);
        WStackPage9Layout->addWidget( shadet2, 3, 1 );
        CurveT2 = new CurveWidget( nullptr );
        CurveT2Pop = new QMenu();
        CurveT2Act = new QWidgetAction(this);
        CurveT2Act->setDefaultWidget(CurveT2);
        CurveT2Pop->addAction(CurveT2Act);
        CurveT2Button = new QToolButton( WStackPage_9 );
        CurveT2Button->setText( "" );
        CurveT2Button->setMaximumSize( QSize( 22, 22 ) );
        CurveT2Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveT2Button->setMenu(CurveT2Pop);
        CurveT2Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage9Layout->addWidget( CurveT2Button, 3, 2 );
        textLabel3t = new QLabel( tr( "Color 3:" ), WStackPage_9 );
        WStackPage9Layout->addWidget( textLabel3t, 4, 0 );
        colDatat3 = new ColorCombo(false, WStackPage_9);
        colDatat3->setPixmapType(ColorCombo::fancyPixmaps);
        colDatat3->setColors(m_doc->PageColors, false);
        WStackPage9Layout->addWidget( colDatat3, 4, 1, 1, 2 );
        shadet3 = new ShadeButton(WStackPage_9);
        shadet3->setValue(100);
        WStackPage9Layout->addWidget( shadet3, 5, 1 );
        CurveT3 = new CurveWidget( nullptr );
        CurveT3Act = new QWidgetAction(this);
        CurveT3Pop = new QMenu();
        CurveT3Act->setDefaultWidget(CurveT3);
        CurveT3Pop->addAction(CurveT3Act);
        CurveT3Button = new QToolButton( WStackPage_9 );
        CurveT3Button->setText( "" );
        CurveT3Button->setMaximumSize( QSize( 22, 22 ) );
        CurveT3Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveT3Button->setMenu(CurveT3Pop);
        CurveT3Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage9Layout->addWidget( CurveT3Button, 5, 2 );
        optionStack->addWidget( WStackPage_9 );

        WStackPage_10 = new QWidget( optionStack );
        WStackPage10Layout = new QGridLayout( WStackPage_10 );
        WStackPage10Layout->setMargin(4);
        WStackPage10Layout->setSpacing(5);
        textLabel1q = new QLabel( tr( "Color 1:" ), WStackPage_10 );
        WStackPage10Layout->addWidget( textLabel1q, 0, 0 );
        colDataq1 = new ColorCombo(false, WStackPage_10);
        colDataq1->setPixmapType(ColorCombo::fancyPixmaps);
        colDataq1->setColors(m_doc->PageColors, false);
        WStackPage10Layout->addWidget( colDataq1, 0, 1, 1, 2 );
        shadeq1 = new ShadeButton(WStackPage_10);
        shadeq1->setValue(100);
        WStackPage10Layout->addWidget( shadeq1, 1, 1 );
        CurveQ1 = new CurveWidget( nullptr );
        CurveQ1Pop = new QMenu();
        CurveQ1Act = new QWidgetAction(this);
        CurveQ1Act->setDefaultWidget(CurveQ1);
        CurveQ1Pop->addAction(CurveQ1Act);
        CurveQ1Button = new QToolButton( WStackPage_10 );
        CurveQ1Button->setText( "" );
        CurveQ1Button->setMaximumSize( QSize( 22, 22 ) );
        CurveQ1Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveQ1Button->setMenu(CurveQ1Pop);
        CurveQ1Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage10Layout->addWidget( CurveQ1Button, 1, 2 );
        textLabel2q = new QLabel( tr( "Color 2:" ), WStackPage_10 );
        WStackPage10Layout->addWidget( textLabel2q, 2, 0 );
        colDataq2 = new ColorCombo(false, WStackPage_10);
        colDataq2->setPixmapType(ColorCombo::fancyPixmaps);
        colDataq2->setColors(m_doc->PageColors, false);
        WStackPage10Layout->addWidget( colDataq2, 2, 1, 1, 2 );
        shadeq2 = new ShadeButton(WStackPage_10);
        shadeq2->setValue(100);
        WStackPage10Layout->addWidget( shadeq2, 3, 1 );
        CurveQ2 = new CurveWidget( nullptr );
        CurveQ2Pop = new QMenu();
        CurveQ2Act = new QWidgetAction(this);
        CurveQ2Act->setDefaultWidget(CurveQ2);
        CurveQ2Pop->addAction(CurveQ2Act);
        CurveQ2Button = new QToolButton( WStackPage_10 );
        CurveQ2Button->setText( "" );
        CurveQ2Button->setMaximumSize( QSize( 22, 22 ) );
        CurveQ2Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveQ2Button->setMenu(CurveQ2Pop);
        CurveQ2Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage10Layout->addWidget( CurveQ2Button, 3, 2 );
        textLabel3q = new QLabel( tr( "Color 3:" ), WStackPage_10 );
        WStackPage10Layout->addWidget( textLabel3q, 4, 0 );
        colDataqc3 = new ColorCombo(false, WStackPage_10);
        colDataqc3->setPixmapType(ColorCombo::fancyPixmaps);
        colDataqc3->setColors(m_doc->PageColors, false);
        WStackPage10Layout->addWidget( colDataqc3, 4, 1, 1, 2 );
        shadeqc3 = new ShadeButton(WStackPage_10);
        shadeqc3->setValue(100);
        WStackPage10Layout->addWidget( shadeqc3, 5, 1 );
        CurveQc3 = new CurveWidget( nullptr );
        CurveQc3Pop = new QMenu();
        CurveQc3Act = new QWidgetAction(this);
        CurveQc3Act->setDefaultWidget(CurveQc3);
        CurveQc3Pop->addAction(CurveQc3Act);
        CurveQc3Button = new QToolButton( WStackPage_10 );
        CurveQc3Button->setText( "" );
        CurveQc3Button->setMaximumSize( QSize( 22, 22 ) );
        CurveQc3Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveQc3Button->setMenu(CurveQc3Pop);
        CurveQc3Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage10Layout->addWidget( CurveQc3Button, 5, 2 );
        textLabel4q = new QLabel( tr( "Color 4:" ), WStackPage_10 );
        WStackPage10Layout->addWidget( textLabel4q, 6, 0 );
        colDataq4 = new ColorCombo(false, WStackPage_10);
        colDataq4->setPixmapType(ColorCombo::fancyPixmaps);
        colDataq4->setColors(m_doc->PageColors, false);
        WStackPage10Layout->addWidget( colDataq4, 6, 1, 1, 2 );
        shadeq4 = new ShadeButton(WStackPage_10);
        shadeq4->setValue(100);
        WStackPage10Layout->addWidget( shadeq4, 7, 1 );
        CurveQ4 = new CurveWidget( nullptr );
        CurveQ4Pop = new QMenu();
        CurveQ4Act = new QWidgetAction(this);
        CurveQ4Act->setDefaultWidget(CurveQ4);
        CurveQ4Pop->addAction(CurveQ4Act);
        CurveQ4Button = new QToolButton( WStackPage_10 );
        CurveQ4Button->setText( "" );
        CurveQ4Button->setMaximumSize( QSize( 22, 22 ) );
        CurveQ4Button->setIcon(IconManager::instance()->loadIcon("curve.png"));
        CurveQ4Button->setMenu(CurveQ4Pop);
        CurveQ4Button->setPopupMode(QToolButton::InstantPopup);
        WStackPage10Layout->addWidget( CurveQ4Button, 7, 2 );
        optionStack->addWidget( WStackPage_10 );

        WStackPage_11 = new QWidget( optionStack );
        WStackPage11Layout = new QVBoxLayout( WStackPage_11 );
        WStackPage11Layout->setMargin(5);
        WStackPage11Layout->setSpacing(5);
        WStackPage11Layout->setAlignment( Qt::AlignTop );
        Kdisplay = new CurveWidget(WStackPage_11);
        WStackPage11Layout->addWidget( Kdisplay );
        optionStack->addWidget( WStackPage_11 );

        layout16->addWidget( optionStack );
        EffectsDialogLayout->addLayout( layout16 );

        layout18 = new QVBoxLayout;
        layout18->setMargin(0);
        layout18->setSpacing(5);
        layout10 = new QGridLayout;
        layout10->setMargin(0);
        layout10->setSpacing(5);
        layout2 = new QVBoxLayout;
        layout2->setMargin(0);
        layout2->setSpacing(5);
        textLabel1 = new QLabel( this );
        textLabel1->setText( tr( "Available Effects" ) );
        layout2->addWidget( textLabel1 );
        availableEffects = new QListWidget( this );
        availableEffects->clear();
        availableEffects->addItem( tr("Blur"));
        availableEffects->addItem( tr("Brightness"));
        availableEffects->addItem( tr("Colorize"));
        availableEffects->addItem( tr("Duotone"));
        availableEffects->addItem( tr("Tritone"));
        availableEffects->addItem( tr("Quadtone"));
        availableEffects->addItem( tr("Contrast"));
        availableEffects->addItem( tr("Grayscale"));
        availableEffects->addItem( tr("Curves"));
        availableEffects->addItem( tr("Invert"));
        availableEffects->addItem( tr("Posterize"));
        availableEffects->addItem( tr("Sharpen"));

        availableEffects->setMinimumSize(fontMetrics().width( tr( "Available Effects" ))+40, 180);
        layout2->addWidget( availableEffects );
        layout10->addLayout( layout2, 0, 0 );

        layout1 = new QVBoxLayout;
        layout1->setMargin(0);
        layout1->setSpacing(5);
        auto* spacer1 = new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding );
        layout1->addItem( spacer1 );
        toEffects = new QPushButton( this );
        toEffects->setText( tr( ">>" ) );
        toEffects->setEnabled(false);
        layout1->addWidget( toEffects );
        fromEffects = new QPushButton( this );
        fromEffects->setText( tr( "<<" ) );
        fromEffects->setEnabled(false);
        layout1->addWidget( fromEffects );
        auto* spacer2 = new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding );
        layout1->addItem( spacer2 );
        layout10->addLayout( layout1, 0, 1 );

        layout8 = new QVBoxLayout;
        layout8->setMargin(0);
        layout8->setSpacing(5);
        textLabel2 = new QLabel( this );
        textLabel2->setText( tr( "Applied Effects" ) );
        layout8->addWidget( textLabel2 );
        usedEffects = new QListWidget( this );
        usedEffects->setMinimumSize(fontMetrics().width( tr( "Available Effects" ))+40, 180);
        usedEffects->clear();
        m_effectValMap.clear();
        for (int a = 0; a < effectsList.count(); ++a)
        {
                if (effectsList.at(a).effectCode == ScImage::EF_INVERT)
                {
                        usedEffects->addItem( tr("Invert"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
                }
                if (effectsList.at(a).effectCode == ScImage::EF_GRAYSCALE)
                {
                        usedEffects->addItem( tr("Grayscale"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
                }
                if (effectsList.at(a).effectCode == ScImage::EF_COLORIZE)
                {
                        usedEffects->addItem( tr("Colorize"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                        setItemSelectable(availableEffects, 2, false);
                        setItemSelectable(availableEffects, 3, false);
                        setItemSelectable(availableEffects, 4, false);
                        setItemSelectable(availableEffects, 5, false);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_BRIGHTNESS)
                {
                        usedEffects->addItem( tr("Brightness"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_CONTRAST)
                {
                        usedEffects->addItem( tr("Contrast"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_SHARPEN)
                {
                        usedEffects->addItem( tr("Sharpen"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_BLUR)
                {
                        usedEffects->addItem( tr("Blur"));
                        QString tmpstr = effectsList.at(a).effectParameters;
                        double radius;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        fp >> radius; // has to be read from stream, as two numbers are stored in effectParameters
                        blRadius->setValue(radius / m_imageScale);
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), QString("%1 1.0").arg(radius / m_imageScale));
                }
                if (effectsList.at(a).effectCode == ScImage::EF_SOLARIZE)
                {
                        usedEffects->addItem( tr("Posterize"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_DUOTONE)
                {
                        usedEffects->addItem( tr("Duotone"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                        setItemSelectable(availableEffects, 2, false);
                        setItemSelectable(availableEffects, 3, false);
                        setItemSelectable(availableEffects, 4, false);
                        setItemSelectable(availableEffects, 5, false);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_TRITONE)
                {
                        usedEffects->addItem( tr("Tritone"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                        setItemSelectable(availableEffects, 2, false);
                        setItemSelectable(availableEffects, 3, false);
                        setItemSelectable(availableEffects, 4, false);
                        setItemSelectable(availableEffects, 5, false);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_QUADTONE)
                {
                        usedEffects->addItem( tr("Quadtone"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                        setItemSelectable(availableEffects, 2, false);
                        setItemSelectable(availableEffects, 3, false);
                        setItemSelectable(availableEffects, 4, false);
                        setItemSelectable(availableEffects, 5, false);
                }
                if (effectsList.at(a).effectCode == ScImage::EF_GRADUATE)
                {
                        usedEffects->addItem( tr("Curves"));
                        m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(a).effectParameters);
                }
        }
        layout8->addWidget( usedEffects );
        layout7 = new QHBoxLayout;
        layout7->setMargin(0);
        layout7->setSpacing(5);
        QSpacerItem* spacer4 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
        layout7->addItem( spacer4 );
        effectUp = new QPushButton( this );
        effectUp->setText( "" );
        effectUp->setIcon(IconManager::instance()->loadIcon("16/go-up.png"));
        effectUp->setEnabled(false);
        layout7->addWidget( effectUp );
        effectDown = new QPushButton( this );
        effectDown->setText( "" );
        effectDown->setIcon(IconManager::instance()->loadIcon("16/go-down.png"));
        effectDown->setEnabled(false);
        layout7->addWidget( effectDown );
        QSpacerItem* spacer5 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
        layout7->addItem( spacer5 );
        layout8->addLayout( layout7 );
        layout10->addLayout( layout8, 0, 2 );
        layout18->addLayout( layout10 );

        layout9 = new QHBoxLayout;
        layout9->setMargin(0);
        layout9->setSpacing(5);
        QSpacerItem* spacer3 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
        layout9->addItem( spacer3 );

        okButton = new QPushButton( this );
        okButton->setText( tr( "OK" ) );
        layout9->addWidget( okButton );

        cancelButton = new QPushButton( this );
        cancelButton->setText( tr( "Cancel" ) );
        layout9->addWidget( cancelButton );
        layout18->addLayout( layout9 );
        EffectsDialogLayout->addLayout( layout18 );
        optionStack->setCurrentIndex(0);
        usedEffects->clearSelection();
        availableEffects->clearSelection();
        resize( minimumSizeHint() );
        ScImage im(m_image);
        saveValues(false);
        im.applyEffect(effectsList, m_doc->PageColors, false);
        QPixmap Bild = QPixmap(pixmapLabel1->width(), pixmapLabel1->height());
        int x = (pixmapLabel1->width() - im.qImage().width()) / 2;
        int y = (pixmapLabel1->height() - im.qImage().height()) / 2;
        QPainter p;
        QBrush b(QColor(205,205,205), IconManager::instance()->loadPixmap("testfill.png"));
        p.begin(&Bild);
        p.fillRect(0, 0, pixmapLabel1->width(), pixmapLabel1->height(), b);
        p.drawImage(x, y, im.qImage());
        p.end();
        pixmapLabel1->setPixmap( Bild );

        // signals and slots connections
        connect( okButton, SIGNAL( clicked() ), this, SLOT( leaveOK() ) );
        connect( cancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) );
        connect( usedEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        connect( usedEffects, SIGNAL( itemDoubleClicked(QListWidgetItem*) ), this, SLOT( moveFromEffects() ) );
        connect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
        connect( availableEffects, SIGNAL( itemDoubleClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffectDbl(QListWidgetItem*) ) );
        connect( toEffects, SIGNAL( clicked() ), this, SLOT( moveToEffects() ) );
        connect( fromEffects, SIGNAL( clicked() ), this, SLOT( moveFromEffects() ) );
        connect( effectUp, SIGNAL( clicked() ), this, SLOT( moveEffectUp() ) );
        connect( effectDown, SIGNAL( clicked() ), this, SLOT( moveEffectDown() ) );
        connect( colData, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shade, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colData1, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shade1, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colData2, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shade2, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDatat1, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadet1, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDatat2, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadet2, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDatat3, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadet3, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDataq1, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadeq1, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDataq2, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadeq2, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDataqc3, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadeqc3, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( colDataq4, SIGNAL(activated(int)), this, SLOT( createPreview()));
        connect( shadeq4, SIGNAL(clicked()), this, SLOT(createPreview()));
        connect( brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(updateBright(int)));
        connect( brightnessSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
        connect( contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(updateContrast(int)));
        connect( contrastSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
        connect( shRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
        connect( shValue, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
        connect( blRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
        connect( solarizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSolarize(int)));
        connect( solarizeSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
        connect( Kdisplay->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveD1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveD2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveT1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveT2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveT3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveQ1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveQ2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveQc3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        connect( CurveQ4->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
        m_time.start();
}

void EffectsDialog::setItemSelectable(QListWidget* widget, int itemNr, bool enable)
{
        if (enable)
                widget->item(itemNr)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
        else
                widget->item(itemNr)->setFlags(Qt::NoItemFlags);
}

void EffectsDialog::leaveOK()
{
        saveValues(true);
        accept();
}

void EffectsDialog::updateSolarize(int val)
{
        QString tmp;
        tmp.setNum(val);
        textLabel15->setText(tmp);
        createPreview();
}

void EffectsDialog::updateContrast(int val)
{
        QString tmp;
        tmp.setNum(val);
        textLabel9->setText(tmp);
        createPreview();
}

void EffectsDialog::updateBright(int val)
{
        QString tmp;
        tmp.setNum(val);
        textLabel7->setText(tmp);
        createPreview();
}

void EffectsDialog::createPreview()
{
        if (m_time.elapsed() < 50)
                return;
        ScImage im(m_image);
        saveValues(false);
        im.applyEffect(effectsList, m_doc->PageColors, false);
        QPixmap Bild = QPixmap(pixmapLabel1->width(), pixmapLabel1->height());
        int x = (pixmapLabel1->width() - im.qImage().width()) / 2;
        int y = (pixmapLabel1->height() - im.qImage().height()) / 2;
        QPainter p;
        QBrush b(QColor(205,205,205), IconManager::instance()->loadPixmap("testfill.png"));
        p.begin(&Bild);
        p.fillRect(0, 0, pixmapLabel1->width(), pixmapLabel1->height(), b);
        p.drawImage(x, y, im.qImage());
        p.end();
        pixmapLabel1->setPixmap( Bild );
        m_time.start();
}

void EffectsDialog::saveValues(bool final)
{
        selectEffectHelper(final);
        effectsList.clear();
        struct ImageEffect ef;
        for (int e = 0; e < usedEffects->count(); ++e)
        {
                if (usedEffects->item(e)->text() == tr("Invert"))
                {
                        ef.effectCode = ScImage::EF_INVERT;
                        ef.effectParameters = "";
                }
                if (usedEffects->item(e)->text() == tr("Grayscale"))
                {
                        ef.effectCode = ScImage::EF_GRAYSCALE;
                        ef.effectParameters = "";
                }
                if (usedEffects->item(e)->text() == tr("Colorize"))
                {
                        ef.effectCode = ScImage::EF_COLORIZE;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Brightness"))
                {
                        ef.effectCode = ScImage::EF_BRIGHTNESS;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Contrast"))
                {
                        ef.effectCode = ScImage::EF_CONTRAST;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Sharpen"))
                {
                        ef.effectCode = ScImage::EF_SHARPEN;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Blur"))
                {
                        ef.effectCode = ScImage::EF_BLUR;
                        if (final)
                                ef.effectParameters = QString("%1 1.0").arg(blRadius->value() * m_imageScale);
                        else
                                ef.effectParameters = QString("%1 1.0").arg(blRadius->value());
                }
                if (usedEffects->item(e)->text() == tr("Posterize"))
                {
                        ef.effectCode = ScImage::EF_SOLARIZE;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Duotone"))
                {
                        ef.effectCode = ScImage::EF_DUOTONE;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Tritone"))
                {
                        ef.effectCode = ScImage::EF_TRITONE;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Quadtone"))
                {
                        ef.effectCode = ScImage::EF_QUADTONE;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                if (usedEffects->item(e)->text() == tr("Curves"))
                {
                        ef.effectCode = ScImage::EF_GRADUATE;
                        ef.effectParameters = m_effectValMap[usedEffects->item(e)];
                }
                effectsList.append(ef);
        }
}

void EffectsDialog::selectAvailEffectDbl(QListWidgetItem* c)
{
        if (!c)
                return;
        if (!(c->flags() & Qt::ItemIsSelectable))
                return;
        moveToEffects();
}

void EffectsDialog::moveToEffects()
{
        disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        usedEffects->addItem(availableEffects->currentItem()->text());
        if (availableEffects->currentItem()->text() == tr("Invert"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
        if (availableEffects->currentItem()->text() == tr("Grayscale"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
        if (availableEffects->currentItem()->text() == tr("Brightness"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0");
        if (availableEffects->currentItem()->text() == tr("Contrast"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0");
        if (availableEffects->currentItem()->text() == tr("Sharpen"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0 1");
        if (availableEffects->currentItem()->text() == tr("Blur"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0 1");
        if (availableEffects->currentItem()->text() == tr("Posterize"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "255");
        if (availableEffects->currentItem()->text() == tr("Colorize"))
        {
                ColorList::Iterator it;
                it = m_doc->PageColors.begin();
                QString efval = it.key()+"\n100";
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
                setItemSelectable(availableEffects, 2, false);
                setItemSelectable(availableEffects, 3, false);
                setItemSelectable(availableEffects, 4, false);
                setItemSelectable(availableEffects, 5, false);
        }
        if (availableEffects->currentItem()->text() == tr("Duotone"))
        {
                ColorList::Iterator it;
                it = m_doc->PageColors.begin();
                QString efval = it.key()+"\n"+it.key()+"\n100 100 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0";
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
                setItemSelectable(availableEffects, 2, false);
                setItemSelectable(availableEffects, 3, false);
                setItemSelectable(availableEffects, 4, false);
                setItemSelectable(availableEffects, 5, false);
        }
        if (availableEffects->currentItem()->text() == tr("Tritone"))
        {
                ColorList::Iterator it;
                it = m_doc->PageColors.begin();
                QString efval = it.key()+"\n"+it.key()+"\n"+it.key()+"\n100 100 100 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0";
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
                setItemSelectable(availableEffects, 2, false);
                setItemSelectable(availableEffects, 3, false);
                setItemSelectable(availableEffects, 4, false);
                setItemSelectable(availableEffects, 5, false);
        }
        if (availableEffects->currentItem()->text() == tr("Quadtone"))
        {
                ColorList::Iterator it;
                it = m_doc->PageColors.begin();
                QString efval = it.key()+"\n"+it.key()+"\n"+it.key()+"\n"+it.key()+"\n100 100 100 100 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0";
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
                setItemSelectable(availableEffects, 2, false);
                setItemSelectable(availableEffects, 3, false);
                setItemSelectable(availableEffects, 4, false);
                setItemSelectable(availableEffects, 5, false);
        }
        if (availableEffects->currentItem()->text() == tr("Curves"))
                m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "2 0.0 0.0 1.0 1.0 0");
        usedEffects->setCurrentItem(usedEffects->item(usedEffects->count()-1));
        selectEffect(usedEffects->item(usedEffects->count()-1));
        connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        createPreview();
}

void EffectsDialog::moveFromEffects()
{
        disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        if ((usedEffects->currentItem()->text() == tr("Colorize")) || (usedEffects->currentItem()->text() == tr("Duotone")) || (usedEffects->currentItem()->text() == tr("Tritone")) || (usedEffects->currentItem()->text() == tr("Quadtone")))
        {
                setItemSelectable(availableEffects, 2, true);
                setItemSelectable(availableEffects, 3, true);
                setItemSelectable(availableEffects, 4, true);
                setItemSelectable(availableEffects, 5, true);
        }
        m_effectValMap.remove(usedEffects->currentItem());
        int curr = usedEffects->currentRow();
        QListWidgetItem *it = usedEffects->takeItem(curr);
        delete it;
        currentOptions = nullptr;
        usedEffects->clearSelection();
        if (usedEffects->count() == 0)
        {
                fromEffects->setEnabled(false);
                toEffects->setEnabled(false);
                selectEffectHelper();
                optionStack->setCurrentIndex(0);
                disconnect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
                availableEffects->clearSelection();
                connect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
        }
        else
        {
                usedEffects->setCurrentItem(usedEffects->item(qMax(curr-1, 0)));
                usedEffects->currentItem()->setSelected(true);
                selectEffect(usedEffects->currentItem());
        }
        if (usedEffects->count() < 2)
        {
                effectUp->setEnabled(false);
                effectDown->setEnabled(false);
        }
        createPreview();
        connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
}

void EffectsDialog::moveEffectUp()
{
        int curr = usedEffects->currentRow();
        if (curr == 0)
                return;
        disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        QListWidgetItem *it = usedEffects->takeItem(curr);
        usedEffects->insertItem(curr-1, it);
        usedEffects->setCurrentItem(it);
        selectEffect(usedEffects->currentItem());
        createPreview();
        connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
}

void EffectsDialog::moveEffectDown()
{
        int curr = usedEffects->currentRow();
        if (curr == static_cast<int>(usedEffects->count())-1)
                return;
        disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        QListWidgetItem *it = usedEffects->takeItem(curr);
        usedEffects->insertItem(curr+1, it);
        usedEffects->setCurrentItem(it);
        selectEffect(usedEffects->currentItem());
        createPreview();
        connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
}

void EffectsDialog::selectEffect(QListWidgetItem* c)
{
        QString s;
        toEffects->setEnabled(false);
        selectEffectHelper();
        if (c)
        {
                fromEffects->setEnabled(true);
                if (usedEffects->count() > 1)
                {
                        effectUp->setEnabled(true);
                        effectDown->setEnabled(true);
                        if (usedEffects->currentItem() == nullptr)
                                effectUp->setEnabled(false);
                        if (usedEffects->currentRow() == static_cast<int>(usedEffects->count())-1)
                                effectDown->setEnabled(false);
                }
                if (c->text() == tr("Grayscale"))
                        optionStack->setCurrentIndex(0);
                else if (c->text() == tr("Invert"))
                        optionStack->setCurrentIndex(0);
                else if (c->text() == tr("Colorize"))
                {
                        disconnect( colData, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shade, SIGNAL(clicked()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        QString col;
                        int shading;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                //      fp >> col;
                        col = fp.readLine();
                        fp >> shading;
                        setCurrentComboItem(colData, col);
                        shade->setValue(shading);
                        optionStack->setCurrentIndex(1);
                        connect( colData, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shade, SIGNAL(clicked()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Duotone"))
                {
                        disconnect( colData1, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shade1, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( colData2, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shade2, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( CurveD1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        disconnect( CurveD2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        QString col1, col2;
                        int shading1, shading2;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        col1 = fp.readLine();
                        col2 = fp.readLine();
                        fp >> shading1;
                        fp >> shading2;
                        setCurrentComboItem(colData1, col1);
                        shade1->setValue(shading1);
                        setCurrentComboItem(colData2, col2);
                        shade2->setValue(shading2);
                        int numVals;
                        double xval, yval;
                        FPointArray curve;
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveD1->cDisplay->setCurve(curve);
                        int lin;
                        fp >> lin;
                        CurveD1->setLinear(lin);
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveD2->cDisplay->setCurve(curve);
                        fp >> lin;
                        CurveD2->setLinear(lin);
                        optionStack->setCurrentIndex(7);
                        connect( colData1, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shade1, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( colData2, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shade2, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( CurveD1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        connect( CurveD2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Tritone"))
                {
                        disconnect( colDatat1, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadet1, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( colDatat2, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadet2, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( colDatat3, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadet3, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( CurveT1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        disconnect( CurveT2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        disconnect( CurveT3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        QString col1, col2, col3;
                        int shading1, shading2, shading3;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        col1 = fp.readLine();
                        col2 = fp.readLine();
                        col3 = fp.readLine();
                        fp >> shading1;
                        fp >> shading2;
                        fp >> shading3;
                        setCurrentComboItem(colDatat1, col1);
                        shadet1->setValue(shading1);
                        setCurrentComboItem(colDatat2, col2);
                        shadet2->setValue(shading2);
                        setCurrentComboItem(colDatat3, col3);
                        shadet3->setValue(shading3);
                        int numVals;
                        double xval, yval;
                        FPointArray curve;
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveT1->cDisplay->setCurve(curve);
                        int lin;
                        fp >> lin;
                        CurveT1->setLinear(lin);
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveT2->cDisplay->setCurve(curve);
                        fp >> lin;
                        CurveT2->setLinear(lin);
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveT3->cDisplay->setCurve(curve);
                        fp >> lin;
                        CurveT3->setLinear(lin);
                        optionStack->setCurrentIndex(8);
                        connect( colDatat1, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadet1, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( colDatat2, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadet2, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( colDatat3, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadet3, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( CurveT1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        connect( CurveT2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        connect( CurveT3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Quadtone"))
                {
                        disconnect( colDataq1, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadeq1, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( colDataq2, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadeq2, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( colDataqc3, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadeqc3, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( colDataq4, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        disconnect( shadeq4, SIGNAL(clicked()), this, SLOT(createPreview()));
                        disconnect( CurveQ1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        disconnect( CurveQ2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        disconnect( CurveQc3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        disconnect( CurveQ4->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        QString col1, col2, col3, col4;
                        int shading1, shading2, shading3, shading4;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        col1 = fp.readLine();
                        col2 = fp.readLine();
                        col3 = fp.readLine();
                        col4 = fp.readLine();
                        fp >> shading1;
                        fp >> shading2;
                        fp >> shading3;
                        fp >> shading4;
                        setCurrentComboItem(colDataq1, col1);
                        shadeq1->setValue(shading1);
                        setCurrentComboItem(colDataq2, col2);
                        shadeq2->setValue(shading2);
                        setCurrentComboItem(colDataqc3, col3);
                        shadeqc3->setValue(shading3);
                        setCurrentComboItem(colDataq4, col4);
                        shadeq4->setValue(shading4);
                        int numVals;
                        double xval, yval;
                        FPointArray curve;
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveQ1->cDisplay->setCurve(curve);
                        int lin;
                        fp >> lin;
                        CurveQ1->setLinear(lin);
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveQ2->cDisplay->setCurve(curve);
                        fp >> lin;
                        CurveQ2->setLinear(lin);
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveQc3->cDisplay->setCurve(curve);
                        fp >> lin;
                        CurveQc3->setLinear(lin);
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        CurveQ4->cDisplay->setCurve(curve);
                        fp >> lin;
                        CurveQ4->setLinear(lin);
                        optionStack->setCurrentIndex(9);
                        connect( colDataq1, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadeq1, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( colDataq2, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadeq2, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( colDataqc3, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadeqc3, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( colDataq4, SIGNAL(activated(int)), this, SLOT( createPreview()));
                        connect( shadeq4, SIGNAL(clicked()), this, SLOT(createPreview()));
                        connect( CurveQ1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        connect( CurveQ2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        connect( CurveQc3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        connect( CurveQ4->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Brightness"))
                {
                        disconnect( brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(updateBright(int)));
                        disconnect( brightnessSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        int brightness;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        fp >> brightness;
                        brightnessSlider->setValue(brightness);
                        QString tmp;
                        tmp.setNum(brightness);
                        textLabel7->setText(tmp);
                        optionStack->setCurrentIndex(2);
                        connect( brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(updateBright(int)));
                        connect( brightnessSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Contrast"))
                {
                        disconnect( contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(updateContrast(int)));
                        disconnect( contrastSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        int contrast;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        fp >> contrast;
                        contrastSlider->setValue(contrast);
                        QString tmp;
                        tmp.setNum(contrast);
                        textLabel9->setText(tmp);
                        optionStack->setCurrentIndex(3);
                        connect( contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(updateContrast(int)));
                        connect( contrastSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Sharpen"))
                {
                        disconnect( shRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
                        disconnect( shValue, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        double radius, sigma;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        fp >> s;
                        radius = ScCLocale::toDoubleC(s);
                        fp >> s;
                        sigma = ScCLocale::toDoubleC(s);
                        shRadius->setValue(radius);
                        shValue->setValue(sigma);
                        optionStack->setCurrentIndex(4);
                        connect( shRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
                        connect( shValue, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Blur"))
                {
                        disconnect( blRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        double radius;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        fp >> s;
                        radius = ScCLocale::toDoubleC(s);
                        blRadius->setValue(radius);
                        optionStack->setCurrentIndex(5);
                        connect( blRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Posterize"))
                {
                        disconnect( solarizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSolarize(int)));
                        disconnect( solarizeSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        int solarize;
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        fp >> solarize;
                        solarizeSlider->setValue(solarize);
                        QString tmp;
                        tmp.setNum(solarize);
                        textLabel15->setText(tmp);
                        optionStack->setCurrentIndex(6);
                        connect( solarizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSolarize(int)));
                        connect( solarizeSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
                }
                else if (c->text() == tr("Curves"))
                {
                        disconnect( Kdisplay->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                        QString tmpstr = m_effectValMap[c];
                        ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
                        int numVals;
                        double xval, yval;
                        FPointArray curve;
                        curve.resize(0);
                        fp >> numVals;
                        for (int nv = 0; nv < numVals; nv++)
                        {
                                fp >> s;
                                xval = ScCLocale::toDoubleC(s);
                                fp >> s;
                                yval = ScCLocale::toDoubleC(s);
                                curve.addPoint(xval, yval);
                        }
                        Kdisplay->cDisplay->setCurve(curve);
                        int lin;
                        fp >> lin;
                        if (lin == 1)
                                Kdisplay->setLinear(true);
                        else
                                Kdisplay->setLinear(false);
                        optionStack->setCurrentIndex(10);
                        connect( Kdisplay->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
                }
                else
                        optionStack->setCurrentIndex(0);
                currentOptions = c;
        }
        else
                optionStack->setCurrentIndex(0);
        disconnect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
        availableEffects->clearSelection();
        connect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
}

void EffectsDialog::selectAvailEffect(QListWidgetItem* c)
{
        if (c)
        {
                if (!(c->flags() & Qt::ItemIsSelectable))
                        toEffects->setEnabled(false);
                else
                        toEffects->setEnabled(true);
        }
        fromEffects->setEnabled(false);
        effectUp->setEnabled(false);
        effectDown->setEnabled(false);
        disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
        selectEffectHelper();
        currentOptions = nullptr;
        usedEffects->clearSelection();
        optionStack->setCurrentIndex(0);
        connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
}

void EffectsDialog::selectEffectHelper(bool final)
{
        if (currentOptions != nullptr)
        {
                if (currentOptions->text() == tr("Colorize"))
                {
                        QString efval = "";
                        efval = colData->currentText();
                        QString tmp;
                        tmp.setNum(shade->getValue());
                        efval += "\n"+tmp;
                        m_effectValMap[currentOptions] = efval;
                }
                if (currentOptions->text() == tr("Brightness"))
                {
                        QString tmp;
                        tmp.setNum(brightnessSlider->value());
                        m_effectValMap[currentOptions] = tmp;
                }
                if (currentOptions->text() == tr("Contrast"))
                {
                        QString tmp;
                        tmp.setNum(contrastSlider->value());
                        m_effectValMap[currentOptions] = tmp;
                }
                if (currentOptions->text() == tr("Sharpen"))
                {
                        QString efval = "";
                        QString tmp;
                        tmp.setNum(shRadius->value());
                        efval += tmp;
                        tmp.setNum(shValue->value());
                        efval += " "+tmp;
                        m_effectValMap[currentOptions] = efval;
                }
                if (currentOptions->text() == tr("Blur"))
                {
                        QString efval = "";
                        QString tmp;
                        if (!final)
                                tmp.setNum(blRadius->value());
                        else
                                tmp.setNum(blRadius->value()*m_imageScale);
                        efval += tmp;
                        tmp.setNum(1.0);
                        efval += " "+tmp;
                        m_effectValMap[currentOptions] = efval;
                }
                if (currentOptions->text() == tr("Posterize"))
                {
                        QString tmp;
                        tmp.setNum(solarizeSlider->value());
                        m_effectValMap[currentOptions] = tmp;
                }
                if (currentOptions->text() == tr("Duotone"))
                {
                        QString efval = "";
                        efval = colData1->currentText()+"\n";
                        efval += colData2->currentText()+"\n";
                        QString tmp;
                        tmp.setNum(shade1->getValue());
                        efval += tmp;
                        tmp.setNum(shade2->getValue());
                        efval += " "+tmp;
                        FPointArray Vals = CurveD1->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveD1->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        Vals = CurveD2->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveD2->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        m_effectValMap[currentOptions] = efval;
                }
                if (currentOptions->text() == tr("Tritone"))
                {
                        QString efval = "";
                        efval = colDatat1->currentText()+"\n";
                        efval += colDatat2->currentText()+"\n";
                        efval += colDatat3->currentText()+"\n";
                        QString tmp;
                        tmp.setNum(shadet1->getValue());
                        efval += tmp;
                        tmp.setNum(shadet2->getValue());
                        efval += " "+tmp;
                        tmp.setNum(shadet3->getValue());
                        efval += " "+tmp;
                        FPointArray Vals = CurveT1->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveT1->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        Vals = CurveT2->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveT2->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        Vals = CurveT3->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveT3->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        m_effectValMap[currentOptions] = efval;
                }
                if (currentOptions->text() == tr("Quadtone"))
                {
                        QString efval = "";
                        efval = colDataq1->currentText()+"\n";
                        efval += colDataq2->currentText()+"\n";
                        efval += colDataqc3->currentText()+"\n";
                        efval += colDataq4->currentText()+"\n";
                        QString tmp;
                        tmp.setNum(shadeq1->getValue());
                        efval += tmp;
                        tmp.setNum(shadeq2->getValue());
                        efval += " "+tmp;
                        tmp.setNum(shadeqc3->getValue());
                        efval += " "+tmp;
                        tmp.setNum(shadeq4->getValue());
                        efval += " "+tmp;
                        FPointArray Vals = CurveQ1->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveQ1->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        Vals = CurveQ2->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveQ2->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        Vals = CurveQc3->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveQc3->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        Vals = CurveQ4->cDisplay->getCurve();
                        tmp.setNum(Vals.size());
                        efval += " "+tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (CurveQ4->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        m_effectValMap[currentOptions] = efval;
                }
                if (currentOptions->text() == tr("Curves"))
                {
                        QString efval = "";
                        FPointArray Vals = Kdisplay->cDisplay->getCurve();
                        QString tmp;
                        tmp.setNum(Vals.size());
                        efval += tmp;
                        for (int p = 0; p < Vals.size(); p++)
                        {
                                const FPoint& pv = Vals.point(p);
                                efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
                        }
                        if (Kdisplay->cDisplay->isLinear())
                                efval += " 1";
                        else
                                efval += " 0";
                        m_effectValMap[currentOptions] = efval;
                }
        }
}