2
* Copyright (c) 2009 Cyrille Berger <cberger@cberger.net>
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; version 2 of the License.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program; if not, write to the Free Software
15
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
#include "digitalmixer_dock.h"
20
#include <QGridLayout>
21
#include <QToolButton>
22
#include <QSignalMapper>
26
#include <KoColorPatch.h>
27
#include <KoColorSlider.h>
28
#include <KoColorPopupAction.h>
29
#include <KoColorSpaceRegistry.h>
30
#include <KoResourceManager.h>
31
#include <KoCanvasBase.h>
33
class DigitalMixerPatch : public KoColorPatch {
35
DigitalMixerPatch(QWidget* parent) : KoColorPatch(parent) {}
36
QSize sizeHint() const
42
DigitalMixerDock::DigitalMixerDock( ) : QDockWidget(i18n("Digital Colors Mixer")), m_canvas(0), m_tellCanvas(true)
44
QColor initColors[6] = { Qt::black, Qt::white, Qt::red, Qt::green, Qt::blue, Qt::yellow };
46
QWidget* widget = new QWidget(this);
47
QGridLayout* layout = new QGridLayout( widget );
50
m_currentColorPatch = new KoColorPatch(this);
51
m_currentColorPatch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
52
m_currentColorPatch->setMinimumWidth(12);
53
layout->addWidget(m_currentColorPatch, 0, 0,3,1);
57
QSignalMapper* signalMapperSelectColor = new QSignalMapper(this);
58
connect(signalMapperSelectColor, SIGNAL(mapped(int)), SLOT(popupColorChanged(int)));
60
QSignalMapper* signalMapperColorSlider = new QSignalMapper(this);
61
connect(signalMapperColorSlider, SIGNAL(mapped(int)), SLOT(colorSliderChanged(int)));
63
QSignalMapper* signalMapperTargetColor = new QSignalMapper(this);
64
connect(signalMapperTargetColor, SIGNAL(mapped(int)), SLOT(targetColorChanged(int)));
66
for(int i = 0; i < 6; ++i)
69
mixer.targetColor = new DigitalMixerPatch(this);
70
layout->addWidget(mixer.targetColor, 0, i + 1);
71
mixer.targetSlider = new KoColorSlider(Qt::Vertical, this);
72
layout->addWidget(mixer.targetSlider, 1, i + 1);
73
QToolButton* colorSelector = new QToolButton( this );
74
mixer.actionColor = new KoColorPopupAction(this);
75
mixer.actionColor->setCurrentColor(initColors[i]);
76
colorSelector->setDefaultAction(mixer.actionColor);
77
layout->addWidget(colorSelector, 2, i + 1);
79
m_mixers.push_back(mixer);
81
connect(mixer.actionColor, SIGNAL(colorChanged(KoColor)), signalMapperSelectColor, SLOT(map()));
82
signalMapperSelectColor->setMapping(mixer.actionColor, i);
84
connect(mixer.targetSlider, SIGNAL(valueChanged(int)), signalMapperColorSlider, SLOT(map()));
85
signalMapperColorSlider->setMapping(mixer.targetSlider, i);
86
mixer.targetSlider->setValue(125);
88
connect(mixer.targetColor, SIGNAL(triggered(KoColorPatch*)), signalMapperTargetColor, SLOT(map()));
89
signalMapperTargetColor->setMapping(mixer.targetColor, i);
91
setCurrentColor(KoColor(Qt::black, KoColorSpaceRegistry::instance()->rgb8()));
95
void DigitalMixerDock::setCanvas(KoCanvasBase * canvas)
98
connect(m_canvas->resourceManager(), SIGNAL(resourceChanged(int, const QVariant&)),
99
this, SLOT(resourceChanged(int, const QVariant&)));
100
setCurrentColor(m_canvas->resourceManager()->foregroundColor());
103
void DigitalMixerDock::popupColorChanged(int i)
105
KoColor color = m_mixers[i].actionColor->currentKoColor();
106
color.convertTo(m_currentColor.colorSpace());
107
m_mixers[i].targetSlider->setColors( color, m_currentColor);
108
colorSliderChanged(i);
111
void DigitalMixerDock::colorSliderChanged(int i)
113
m_mixers[i].targetColor->setColor(m_mixers[i].targetSlider->currentColor());
116
void DigitalMixerDock::targetColorChanged(int i)
118
setCurrentColor(m_mixers[i].targetColor->color());
121
void DigitalMixerDock::setCurrentColor(const KoColor& color)
123
m_currentColor = color;
124
m_currentColorPatch->setColor(color);
125
for(int i = 0; i < m_mixers.size(); ++i)
127
popupColorChanged(i);
128
colorSliderChanged(i);
130
if (m_canvas && m_tellCanvas)
132
m_canvas->resourceManager()->setForegroundColor(m_currentColor);
136
void DigitalMixerDock::resourceChanged(int key, const QVariant& v)
138
m_tellCanvas = false;
139
if (key == KoCanvasResource::ForegroundColor)
140
setCurrentColor(v.value<KoColor>());
144
#include "digitalmixer_dock.moc"