Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/styleeditor.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/colorfield.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/dvdialog.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/gutil.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/menubarcommand.h"
Toshihiro Shimizu 890ddd
#include "toonz/cleanupcolorstyles.h"
Toshihiro Shimizu 890ddd
#include "tconvert.h"
Toshihiro Shimizu 890ddd
#include "tcolorstyles.h"
Toshihiro Shimizu 890ddd
#include "trop.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <QLayout>
Toshihiro Shimizu 890ddd
#include <QPainter>
Toshihiro Shimizu 890ddd
#include <QMouseEvent>
Toshihiro Shimizu 890ddd
#include <QLabel>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace DVGui;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \class DVGui::StyleSample
Toshihiro Shimizu 890ddd
		\brief The StyleSample class provides to view a square color.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b QWidget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		By default square color is set to \b TPixel32(235,235,235,255), you
Toshihiro Shimizu 890ddd
		can set other color using setColor(); you can also define current color
Toshihiro Shimizu 890ddd
		with a style \b TColorStyle, \b getStyle(), using setStyle().
Toshihiro Shimizu 890ddd
		You can pass to constructor square size.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		StyleSample permit to manage click event, it's possile to enable this
Toshihiro Shimizu 890ddd
		feature setting enableClick(bool on) to true.
Toshihiro Shimizu 890ddd
		If it is enable when click in square class emit the signal
Toshihiro Shimizu 890ddd
		clicked(const TColorStyle &style).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
/*!	\fn void DVGui::StyleSample::clicked(const TColorStyle &style)
Toshihiro Shimizu 890ddd
		This signal is emitted when click event is enable and a style is set.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
/*!	\fn void DVGui::StyleSample::enableClick(bool on)
Toshihiro Shimizu 890ddd
		Set click event enable if \b is true, disable otherwise.
Toshihiro Shimizu 890ddd
		If true setStyle store current style and buttonPress emit signal
Toshihiro Shimizu 890ddd
		clicked(const TColorStyle &style).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
StyleSample::StyleSample(QWidget *parent, int sizeX, int sizeY)
Toshihiro Shimizu 890ddd
	: m_samplePixmap(sizeX, sizeY, QImage::Format_ARGB32), m_bgRas(sizeX, sizeY), m_style(0), m_clickEnabled(false), m_chessColor1(0, 0, 0), m_chessColor2(255, 255, 255), m_isEditing(false)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	setMinimumSize(sizeX, sizeY);
Toshihiro Shimizu 890ddd
	setColor(TPixel32::Transparent);
Toshihiro Shimizu 890ddd
	TRop::checkBoard(m_bgRas, m_chessColor1, m_chessColor2, TDimensionD(sizeX / 8, sizeX / 8), TPointD(0, 0));
Toshihiro Shimizu 890ddd
	setEnable(true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
StyleSample::~StyleSample()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_style)
Toshihiro Shimizu 890ddd
		delete m_style;
Toshihiro Shimizu 890ddd
	m_style = 0;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Return current StyleSample \b TColorStyle style.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
TColorStyle *StyleSample::getStyle() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_style;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Update current square colore and, if click event is enable set current
Toshihiro Shimizu 890ddd
		StyleSample \b TColorStyle style to \b style.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void StyleSample::setStyle(TColorStyle &style)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	/*-- TSolidColorStyleの場合のみ、単色塗りつぶし --*/
Toshihiro Shimizu 890ddd
	if (style.getTagId() == 3)
Toshihiro Shimizu 890ddd
		setColor(style.getMainColor());
Toshihiro Shimizu 890ddd
	else {
Toshihiro Shimizu 890ddd
		TRaster32P icon = style.getIcon(qsize2Dimension(m_samplePixmap.rect().size()));
Toshihiro Shimizu 890ddd
		m_samplePixmap = rasterToQImage(icon, false); //modified in 6.2
Toshihiro Shimizu 890ddd
		update();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	if (m_clickEnabled)
Toshihiro Shimizu 890ddd
		m_style = style.clone();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Update current square colore to \b TPixel32 \b color.
Toshihiro Shimizu 890ddd
		Useful for efficiency if click event is disable.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void StyleSample::setColor(const TPixel32 &pixel)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	QColor color(pixel.r, pixel.g, pixel.b, pixel.m);
Toshihiro Shimizu 890ddd
	//iwsw commented out temporarily
Toshihiro Shimizu 890ddd
	//if (Preferences::instance()->isDoColorCorrectionByUsing3DLutEnabled())
Toshihiro Shimizu 890ddd
	//	Ghibli3DLutConverter::instance()->convert(color);
Toshihiro Shimizu 890ddd
	m_samplePixmap.fill(color.rgba());
Toshihiro Shimizu 890ddd
	update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void StyleSample::setChessboardColors(const TPixel32 &col1, const TPixel32 &col2)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_chessColor1 = col1;
Toshihiro Shimizu 890ddd
	m_chessColor2 = col2;
Toshihiro Shimizu 890ddd
	TRop::checkBoard(m_bgRas, m_chessColor1, m_chessColor2, TDimensionD(m_bgRas->getLx() / 8, m_bgRas->getLy() / 8), TPointD(0, 0));
Toshihiro Shimizu 890ddd
	update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Paint square color.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void StyleSample::paintEvent(QPaintEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (!isEnable())
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	QPainter painter(this);
Toshihiro Shimizu 890ddd
	QImage img(m_bgRas->getRawData(), m_bgRas->getLx(), m_bgRas->getLy(), QImage::Format_ARGB32);
Toshihiro Shimizu 890ddd
	painter.drawImage(0, 0, img.scaled(size()));
Toshihiro Shimizu 890ddd
	painter.drawImage(0, 0, m_samplePixmap.scaled(size()));
Toshihiro Shimizu 890ddd
	if (m_isEditing) {
Toshihiro Shimizu 890ddd
		//QRect rect(0,0,m_bgRas->getLx(),m_bgRas->getLy());
Toshihiro Shimizu 890ddd
		painter.setPen(Qt::white);
Toshihiro Shimizu 890ddd
		painter.drawRect(rect().adjusted(0, 0, -1, -1));
Toshihiro Shimizu 890ddd
		painter.drawRect(rect().adjusted(2, 2, -3, -3));
Toshihiro Shimizu 890ddd
		painter.setPen(QColor(180, 210, 255));
Toshihiro Shimizu 890ddd
		painter.drawRect(rect().adjusted(1, 1, -2, -2));
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! If exist current style and event click is enable emit signal
Toshihiro Shimizu 890ddd
		clicked(const TColorStyle &style).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void StyleSample::mousePressEvent(QMouseEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_style && m_clickEnabled)
Toshihiro Shimizu 890ddd
		emit clicked(*m_style);
Toshihiro Shimizu 890ddd
	else
Toshihiro Shimizu 890ddd
		event->ignore();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void StyleSample::mouseDoubleClickEvent(QMouseEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	event->ignore();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \class DVGui::ChannelField
Toshihiro Shimizu 890ddd
		\brief The ChannelField class is used to view an object to manage a color
Toshihiro Shimizu 890ddd
					 value, red, green, blue or transparency channel.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b QWidget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		The object is composed of grid layout \b QGridLayout which contains a label
Toshihiro Shimizu 890ddd
		in first row, first column, to identify channel, a text field \b IntLineEdit
Toshihiro Shimizu 890ddd
		in first row, second column, and a slider in second row, second column.
Toshihiro Shimizu 890ddd
		Texf field and slider are connected, so if you change one the other automatically
Toshihiro Shimizu 890ddd
		change. You can set current value getChannel(), using setChannel().
Toshihiro Shimizu 890ddd
		This two object is used to manage channel value, them range is fixed to [0,255].
Toshihiro Shimizu 890ddd
		This object size is fixed, [50, 2*DVGui::WidgetHeight].
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		To know when channel parameter value change class provides a signal, valueChanged(int value);
Toshihiro Shimizu 890ddd
		class emit signal when slider value change or when text field is editing,
Toshihiro Shimizu 890ddd
		see SLOT: onSliderChanged(int value) and onEditChanged(const QString &str)
Toshihiro Shimizu 890ddd
		to know when signal is emitted.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
/*!	\fn void DVGui::ChannelField::valueChanged(int value)
Toshihiro Shimizu 890ddd
		This signal is emitted when ChannelField, slider or text field, value change;
Toshihiro Shimizu 890ddd
		if slider position change or text field is editing.
Toshihiro Shimizu 890ddd
		\sa onEditChanged(const QString &str) and onSliderChanged(int value).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
ChannelField::ChannelField(QWidget *parent,
Toshihiro Shimizu 890ddd
						   const QString &string,
Toshihiro Shimizu 890ddd
						   int value, int maxValue, bool horizontal, int labelWidth, int sliderWidth)
Toshihiro Shimizu 890ddd
	: QWidget(parent), m_maxValue(maxValue)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	assert(maxValue > 0);
Toshihiro Shimizu 890ddd
	assert(0 <= value && value <= m_maxValue);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QLabel *channelName = new QLabel(string, this);
Shinya Kitaoka bb1d04
	m_channelEdit = new DVGui::IntLineEdit(this, value, 0, maxValue);
Toshihiro Shimizu 890ddd
	m_channelSlider = new QSlider(Qt::Horizontal, this);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	channelName->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
Toshihiro Shimizu 890ddd
	channelName->setFixedWidth(labelWidth);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_channelSlider->setRange(0, maxValue);
Toshihiro Shimizu 890ddd
	m_channelSlider->setValue(value);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//----layout
Toshihiro Shimizu 890ddd
	QGridLayout *mainLayout = new QGridLayout(this);
Toshihiro Shimizu 890ddd
	mainLayout->setMargin(0);
Toshihiro Shimizu 890ddd
	mainLayout->setSpacing(3);
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		mainLayout->addWidget(channelName, 0, 0);
Toshihiro Shimizu 890ddd
		mainLayout->addWidget(m_channelEdit, 0, 1);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		mainLayout->addWidget(m_channelSlider, horizontal ? 0 : 1, horizontal ? 2 : 1);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	mainLayout->setColumnStretch(0, 0);
Toshihiro Shimizu 890ddd
	mainLayout->setColumnStretch(1, 1);
Toshihiro Shimizu 890ddd
	mainLayout->setRowStretch(2, 1);
Toshihiro Shimizu 890ddd
	setLayout(mainLayout);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//----singnal-slot connections
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool ret = connect(m_channelEdit, SIGNAL(textChanged(const QString &)),
Toshihiro Shimizu 890ddd
					   SLOT(onEditChanged(const QString &)));
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_channelSlider, SIGNAL(valueChanged(int)), SLOT(onSliderChanged(int)));
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_channelSlider, SIGNAL(sliderReleased()), SLOT(onSliderReleased()));
Toshihiro Shimizu 890ddd
	assert(ret);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Set current value to \b value.
Toshihiro Shimizu 890ddd
		\sa getChannel()
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ChannelField::setChannel(int value)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (getChannel() == value)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	assert(0 <= value && value <= m_maxValue);
Toshihiro Shimizu 890ddd
	m_channelSlider->setValue(value);
Toshihiro Shimizu 890ddd
	m_channelEdit->setValue(value);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Return current channel value.
Toshihiro Shimizu 890ddd
		\sa setChannel()
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
int ChannelField::getChannel()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	int value = m_channelEdit->getValue();
Toshihiro Shimizu 890ddd
	assert(m_channelSlider->value() == value);
Toshihiro Shimizu 890ddd
	return value;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*!	Set slider value to new string \b str value.
Toshihiro Shimizu 890ddd
		Verify if value is lower than 255 or greater than 0, range, otherwise set
Toshihiro Shimizu 890ddd
		current value to 255 or 0. If slider value is different from value in \b str
Toshihiro Shimizu 890ddd
		emit signal valueChanged(int value).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ChannelField::onEditChanged(const QString &str)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	int value = str.toInt();
Toshihiro Shimizu 890ddd
	if (value < 0)
Toshihiro Shimizu 890ddd
		value = 0;
Toshihiro Shimizu 890ddd
	if (value > m_maxValue)
Toshihiro Shimizu 890ddd
		value = m_maxValue;
Toshihiro Shimizu 890ddd
	assert(0 <= value && value <= m_maxValue);
Toshihiro Shimizu 890ddd
	if (str.toInt() != value)
Toshihiro Shimizu 890ddd
		m_channelEdit->setValue(value);
Toshihiro Shimizu 890ddd
	if (m_channelSlider->value() == value)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	m_channelSlider->setValue(value);
Toshihiro Shimizu 890ddd
	emit valueChanged(value, false);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Set text field value to \b value. If text field value is different from \b value
Toshihiro Shimizu 890ddd
		emit signal valueChanged(int value).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ChannelField::onSliderChanged(int value)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	assert(0 <= value && value <= m_maxValue);
Toshihiro Shimizu 890ddd
	if (m_channelEdit->getValue() == value)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	m_channelEdit->setText(QString(toString(value).c_str()));
Toshihiro Shimizu 890ddd
	emit valueChanged(value, true);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ChannelField::onSliderReleased()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	emit valueChanged(m_channelSlider->value(), false);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
ColorField::ColorFieldEditorController *ColorField::m_editorController = 0;
Toshihiro Shimizu 890ddd
//																							new ColorField::ColorFieldEditorController();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
/*! \class DVGui::ColorField
Toshihiro Shimizu 890ddd
		\brief The ColorField class is used to view an object to manage a color.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		Inherits \b QWidget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		The object is composed of a horizontal layout \b QHBoxLayout which contains
Toshihiro Shimizu 890ddd
		a StyleSample, and three or four ChannelField, it depend if transparency is
Toshihiro Shimizu 890ddd
		count, to manage color channel.
Toshihiro Shimizu 890ddd
		You can pass to constructor current color value, getColor(), or set it
Toshihiro Shimizu 890ddd
		calling setColor(). You can also pass to constructor a boolean to know if
Toshihiro Shimizu 890ddd
		manage transparency channel or not, and an integer for StyleSample size.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		To know when color value change class provides a signal, colorChanged(const TPixel32 &);
Toshihiro Shimizu 890ddd
		class emit signal when one ChannelField value change.
Toshihiro Shimizu 890ddd
		See SLOT: onRedChannelChanged(int value), onGreenChannelChanged(int value),
Toshihiro Shimizu 890ddd
		onBlueChannelChanged(int value) and onAlphaChannelChanged(int value) to know
Toshihiro Shimizu 890ddd
		when signal is emitted.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		\b Example: initialize a ColorField with transparency channel.
Toshihiro Shimizu 890ddd
		\code
Toshihiro Shimizu 890ddd
			ColorField* colorFld = new ColorField(0,true,TPixel32(0,0,255,255),50);
Toshihiro Shimizu 890ddd
		\endcode
Toshihiro Shimizu 890ddd
		\b Result:
Toshihiro Shimizu 890ddd
			\image html ColorField.jpg
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
/*!	\fn void DVGui::ColorField::colorChanged(const TPixel32 &)
Toshihiro Shimizu 890ddd
		This signal is emitted when a channel value of current color change.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
/*!	\fn TPixel32  DVGui::ColorField::getColor() const
Toshihiro Shimizu 890ddd
		Return ColorField current color.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
ColorField::ColorField(QWidget *parent,
Toshihiro Shimizu 890ddd
					   bool isAlphaActive,
Toshihiro Shimizu 890ddd
					   TPixel32 color,
Toshihiro Shimizu 890ddd
					   int squareSize,
Toshihiro Shimizu 890ddd
					   bool useStyleEditor)
Toshihiro Shimizu 890ddd
	: QWidget(parent), m_color(color), m_notifyEditingChange(true), m_useStyleEditor(useStyleEditor)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	setMaximumHeight(squareSize);
Toshihiro Shimizu 890ddd
	QHBoxLayout *layout = new QHBoxLayout(this);
Toshihiro Shimizu 890ddd
	layout->setMargin(0);
Toshihiro Shimizu 890ddd
	layout->setSpacing(5);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	layout->setSizeConstraint(QLayout::SetFixedSize);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int h = WidgetHeight;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_colorSample = new StyleSample(this, squareSize, squareSize);
Toshihiro Shimizu 890ddd
	m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
	m_redChannel = new ChannelField(this, QString("R:"), m_color.r);
Toshihiro Shimizu 890ddd
	connect(m_redChannel, SIGNAL(valueChanged(int, bool)), SLOT(onRedChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	m_greenChannel = new ChannelField(this, QString("G:"), m_color.g);
Toshihiro Shimizu 890ddd
	connect(m_greenChannel, SIGNAL(valueChanged(int, bool)), SLOT(onGreenChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	m_blueChannel = new ChannelField(this, QString("B:"), m_color.b);
Toshihiro Shimizu 890ddd
	connect(m_blueChannel, SIGNAL(valueChanged(int, bool)), SLOT(onBlueChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	m_alphaChannel = new ChannelField(this, QString("M:"), m_color.m);
Toshihiro Shimizu 890ddd
	connect(m_alphaChannel, SIGNAL(valueChanged(int, bool)), SLOT(onAlphaChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	layout->addWidget(m_colorSample);
Toshihiro Shimizu 890ddd
	layout->addWidget(m_redChannel);
Toshihiro Shimizu 890ddd
	layout->addWidget(m_greenChannel);
Toshihiro Shimizu 890ddd
	layout->addWidget(m_blueChannel);
Toshihiro Shimizu 890ddd
	layout->addWidget(m_alphaChannel);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	if (!isAlphaActive)
Toshihiro Shimizu 890ddd
		m_alphaChannel->hide();
Toshihiro Shimizu 890ddd
	setLayout(layout);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Set ColorField current color to \b color. Update channel value of
Toshihiro Shimizu 890ddd
		\b ChannelField and \b StyleSample color.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::setAlphaActive(bool active)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (active && !m_alphaChannel->isVisible()) {
Toshihiro Shimizu 890ddd
		m_alphaChannel->show();
Toshihiro Shimizu 890ddd
		connect(m_alphaChannel, SIGNAL(valueChanged(int, bool)), SLOT(onAlphaChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		assert(m_color.m == 255);
Toshihiro Shimizu 890ddd
		//m_color.m = m_alphaChannel->getChannel();
Toshihiro Shimizu 890ddd
		//m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
	} else if (!active && m_alphaChannel->isVisible()) {
Toshihiro Shimizu 890ddd
		m_alphaChannel->hide();
Toshihiro Shimizu 890ddd
		disconnect(m_alphaChannel, SIGNAL(valueChanged(int, bool)), this, SLOT(onAlphaChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		if (m_color.m != 255) {
Toshihiro Shimizu 890ddd
			m_alphaChannel->setChannel(255);
Toshihiro Shimizu 890ddd
			m_color.m = 255;
Toshihiro Shimizu 890ddd
			m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
			emit colorChanged(m_color, false);
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::setColor(const TPixel32 &color)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_color == color)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	m_color = color;
Toshihiro Shimizu 890ddd
	updateChannels();
Toshihiro Shimizu 890ddd
	m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Set all \b ChannelField channel value to ColorField current color.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ColorField::hideChannelsFields(bool hide)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (hide) {
Toshihiro Shimizu 890ddd
		m_redChannel->hide();
Toshihiro Shimizu 890ddd
		m_greenChannel->hide();
Toshihiro Shimizu 890ddd
		m_blueChannel->hide();
Toshihiro Shimizu 890ddd
		m_alphaChannel->hide();
Toshihiro Shimizu 890ddd
		disconnect(m_redChannel, SIGNAL(valueChanged(int, bool)), this, SLOT(onRedChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		disconnect(m_greenChannel, SIGNAL(valueChanged(int, bool)), this, SLOT(onGreenChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		disconnect(m_blueChannel, SIGNAL(valueChanged(int, bool)), this, SLOT(onBlueChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		disconnect(m_alphaChannel, SIGNAL(valueChanged(int, bool)), this, SLOT(onAlphaChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	} else {
Toshihiro Shimizu 890ddd
		m_redChannel->show();
Toshihiro Shimizu 890ddd
		m_greenChannel->show();
Toshihiro Shimizu 890ddd
		m_blueChannel->show();
Toshihiro Shimizu 890ddd
		m_alphaChannel->show();
Toshihiro Shimizu 890ddd
		;
Toshihiro Shimizu 890ddd
		connect(m_redChannel, SIGNAL(valueChanged(int, bool)), SLOT(onRedChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		connect(m_greenChannel, SIGNAL(valueChanged(int, bool)), SLOT(onGreenChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		connect(m_blueChannel, SIGNAL(valueChanged(int, bool)), SLOT(onBlueChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		connect(m_alphaChannel, SIGNAL(valueChanged(int, bool)), SLOT(onAlphaChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! Set all \b ChannelField channel value to ColorField current color.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ColorField::updateChannels()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_redChannel->setChannel(m_color.r);
Toshihiro Shimizu 890ddd
	m_greenChannel->setChannel(m_color.g);
Toshihiro Shimizu 890ddd
	m_blueChannel->setChannel(m_color.b);
Toshihiro Shimizu 890ddd
	m_alphaChannel->setChannel(m_color.m);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::mousePressEvent(QMouseEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (event->button() != Qt::LeftButton)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	QPoint p = event->pos();
Toshihiro Shimizu 890ddd
	if (!m_colorSample->visibleRegion().contains(p))
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	if (!m_useStyleEditor || !getEditorController())
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	getEditorController()->edit(this);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::mouseDoubleClickEvent(QMouseEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	QPoint p = event->pos();
Toshihiro Shimizu 890ddd
	if (!m_colorSample->visibleRegion().contains(p))
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	if (!m_useStyleEditor || !getEditorController())
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	CommandManager::instance()->execute("MI_OpenStyleControl");
Toshihiro Shimizu 890ddd
	getEditorController()->edit(this);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::hideEvent(QHideEvent *)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (!m_useStyleEditor || !getEditorController())
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	getEditorController()->hide();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! If current red channel value of color is different from \b value set it,
Toshihiro Shimizu 890ddd
		change \b StyleSample color and emit signal \b colorChanged(const TPixel32 &).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ColorField::onRedChannelChanged(int value, bool isDragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_color.r == value) {
Toshihiro Shimizu 890ddd
		if (!isDragging)
Toshihiro Shimizu 890ddd
			emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	m_color = TPixel32(value, m_color.g, m_color.b, m_color.m);
Toshihiro Shimizu 890ddd
	m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
	emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! If current green channel value of color is different from \b value set it,
Toshihiro Shimizu 890ddd
		change \b StyleSample color and emit signal \b colorChanged(const TPixel32 &).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ColorField::onGreenChannelChanged(int value, bool isDragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_color.g == value) {
Toshihiro Shimizu 890ddd
		if (!isDragging)
Toshihiro Shimizu 890ddd
			emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	m_color = TPixel32(m_color.r, value, m_color.b, m_color.m);
Toshihiro Shimizu 890ddd
	m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
	emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! If current blue channel value of color is different from \b value set it,
Toshihiro Shimizu 890ddd
		change \b StyleSample color and emit signal \b colorChanged(const TPixel32 &).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ColorField::onBlueChannelChanged(int value, bool isDragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_color.b == value) {
Toshihiro Shimizu 890ddd
		if (!isDragging)
Toshihiro Shimizu 890ddd
			emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	m_color = TPixel32(m_color.r, m_color.g, value, m_color.m);
Toshihiro Shimizu 890ddd
	m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
	emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
/*! If current alpha channel value of color is different from \b value set it,
Toshihiro Shimizu 890ddd
		change \b StyleSample color and emit signal \b colorChanged(const TPixel32 &).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
void ColorField::onAlphaChannelChanged(int value, bool isDragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_color.m == value) {
Toshihiro Shimizu 890ddd
		if (!isDragging)
Toshihiro Shimizu 890ddd
			emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	m_color = TPixel32(m_color.r, m_color.g, m_color.b, value);
Toshihiro Shimizu 890ddd
	m_colorSample->setColor(m_color);
Toshihiro Shimizu 890ddd
	emit colorChanged(m_color, isDragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::setChessboardColors(const TPixel32 &col1, const TPixel32 &col2)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_colorSample->setChessboardColors(col1, col2);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void ColorField::setEditorController(ColorFieldEditorController *editorController)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_editorController = editorController;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
ColorField::ColorFieldEditorController *ColorField::getEditorController()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_editorController;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------
Toshihiro Shimizu 890ddd
#define SQUARESIZE 50
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::onBrightnessChannelChanged(int value, bool dragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_cleanupStyle->setBrightness(value);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(dragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::onContrastChannelChanged(int value, bool dragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_cleanupStyle->setContrast(value);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(dragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::onCThresholdChannelChanged(int value, bool dragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	((TBlackCleanupStyle *)m_cleanupStyle)->setColorThreshold((double)value);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(dragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::onWThresholdChannelChanged(int value, bool dragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	((TBlackCleanupStyle *)m_cleanupStyle)->setWhiteThreshold((double)value);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(dragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::onHRangeChannelChanged(int value, bool dragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	((TColorCleanupStyle *)m_cleanupStyle)->setHRange(value);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(dragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::onLineWidthChannelChanged(int value, bool dragging)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	((TColorCleanupStyle *)m_cleanupStyle)->setLineWidth(value);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(dragging);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//---------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::mousePressEvent(QMouseEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (event->button() != Qt::LeftButton)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	emit StyleSelected(m_cleanupStyle);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	if (getEditorController())
Toshihiro Shimizu 890ddd
		getEditorController()->edit(this);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------
Toshihiro Shimizu 890ddd
CleanupColorField::CleanupColorField(QWidget *parent, TCleanupStyle *cleanupStyle,
Toshihiro Shimizu 890ddd
									 TPaletteHandle *ph, bool greyMode)
Toshihiro Shimizu 890ddd
	: QWidget(parent), m_style(cleanupStyle), m_cleanupStyle(cleanupStyle), m_ph(ph), m_greyMode(greyMode), m_notifyEditingChange(true)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TBlackCleanupStyle *bs = dynamic_cast<TBlackCleanupStyle *>(cleanupStyle);
Toshihiro Shimizu 890ddd
	TColorCleanupStyle *cs = dynamic_cast<TColorCleanupStyle *>(cleanupStyle);
Toshihiro Shimizu 890ddd
	assert(bs || cs);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_colorSample = new StyleSample(this, SQUARESIZE / 2, SQUARESIZE);
Toshihiro Shimizu 890ddd
	m_brightnessChannel = new ChannelField(this, DVGui::CleanupColorField::tr("Brightness:"), cleanupStyle->getBrightness(), 100, true, 75, -1);
Toshihiro Shimizu 890ddd
	m_contrastChannel = new ChannelField(this, DVGui::CleanupColorField::tr("Contrast:"), cleanupStyle->getContrast(), 100, true, 75, -1);
Toshihiro Shimizu 890ddd
	if (!greyMode) {
Toshihiro Shimizu 890ddd
		if (bs) {
Toshihiro Shimizu 890ddd
			m_cThresholdChannel = new ChannelField(this, DVGui::CleanupColorField::tr("Color Thres"), bs->getColorThreshold(), 100, true, 75, -1);
Toshihiro Shimizu 890ddd
			m_wThresholdChannel = new ChannelField(this, DVGui::CleanupColorField::tr("White Thres"), bs->getWhiteThreshold(), 100, true, 75, -1);
Toshihiro Shimizu 890ddd
		} else //cs
Toshihiro Shimizu 890ddd
		{
Toshihiro Shimizu 890ddd
			m_hRangeChannel = new ChannelField(this, DVGui::CleanupColorField::tr("H Range"), cs->getHRange(), 120, true, 75, -1);
Toshihiro Shimizu 890ddd
			m_lineWidthChannel = new ChannelField(this, DVGui::CleanupColorField::tr("Line Width"), cs->getLineWidth(), 100, true, 75, -1);
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_colorSample->setStyle(*cleanupStyle);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//---- layout
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QHBoxLayout *mainLay = new QHBoxLayout();
Toshihiro Shimizu 890ddd
	mainLay->setMargin(8);
Toshihiro Shimizu 890ddd
	mainLay->setSpacing(5);
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		mainLay->addWidget(m_colorSample, 0);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		QVBoxLayout *paramLay = new QVBoxLayout();
Toshihiro Shimizu 890ddd
		paramLay->setMargin(0);
Toshihiro Shimizu 890ddd
		paramLay->setSpacing(3);
Toshihiro Shimizu 890ddd
		{
Toshihiro Shimizu 890ddd
			paramLay->addWidget(m_brightnessChannel);
Toshihiro Shimizu 890ddd
			paramLay->addWidget(m_contrastChannel);
Toshihiro Shimizu 890ddd
			if (!greyMode) {
Toshihiro Shimizu 890ddd
				if (bs) {
Toshihiro Shimizu 890ddd
					paramLay->addWidget(m_cThresholdChannel);
Toshihiro Shimizu 890ddd
					paramLay->addWidget(m_wThresholdChannel);
Toshihiro Shimizu 890ddd
				} else {
Toshihiro Shimizu 890ddd
					paramLay->addWidget(m_hRangeChannel);
Toshihiro Shimizu 890ddd
					paramLay->addWidget(m_lineWidthChannel);
Toshihiro Shimizu 890ddd
				}
Toshihiro Shimizu 890ddd
			}
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
		mainLay->addLayout(paramLay, 1);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	setLayout(mainLay);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//---- signal-slot connections
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool ret = true;
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_brightnessChannel, SIGNAL(valueChanged(int, bool)), SLOT(onBrightnessChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_contrastChannel, SIGNAL(valueChanged(int, bool)), SLOT(onContrastChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
	if (!greyMode) {
Toshihiro Shimizu 890ddd
		if (bs) {
Toshihiro Shimizu 890ddd
			ret = ret && connect(m_cThresholdChannel, SIGNAL(valueChanged(int, bool)), SLOT(onCThresholdChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
			ret = ret && connect(m_wThresholdChannel, SIGNAL(valueChanged(int, bool)), SLOT(onWThresholdChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		} else {
Toshihiro Shimizu 890ddd
			ret = ret && connect(m_hRangeChannel, SIGNAL(valueChanged(int, bool)), SLOT(onHRangeChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
			ret = ret && connect(m_lineWidthChannel, SIGNAL(valueChanged(int, bool)), SLOT(onLineWidthChannelChanged(int, bool)));
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::updateColor()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_cleanupStyle->canUpdate()) {
Toshihiro Shimizu 890ddd
		m_cleanupStyle->invalidateIcon();
Toshihiro Shimizu 890ddd
		m_colorSample->setStyle(*m_cleanupStyle);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		m_brightnessChannel->setChannel(m_cleanupStyle->getBrightness());
Toshihiro Shimizu 890ddd
		if (m_cleanupStyle->isContrastEnabled())
Toshihiro Shimizu 890ddd
			m_contrastChannel->setChannel(m_cleanupStyle->getContrast());
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		TBlackCleanupStyle *bs;
Toshihiro Shimizu 890ddd
		TColorCleanupStyle *cs;
Toshihiro Shimizu 890ddd
		if ((bs = dynamic_cast<TBlackCleanupStyle *>(m_cleanupStyle)) && !m_greyMode) {
Toshihiro Shimizu 890ddd
			m_cThresholdChannel->setChannel(bs->getColorThreshold());
Toshihiro Shimizu 890ddd
			m_wThresholdChannel->setChannel(bs->getWhiteThreshold());
Toshihiro Shimizu 890ddd
		} else if (cs = dynamic_cast<TColorCleanupStyle *>(m_cleanupStyle)) {
Toshihiro Shimizu 890ddd
			m_hRangeChannel->setChannel(cs->getHRange());
Toshihiro Shimizu 890ddd
			m_lineWidthChannel->setChannel(cs->getLineWidth());
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TPixel32 CleanupColorField::getColor() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_cleanupStyle->getMainColor();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::setColor(const TPixel32 &color)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_cleanupStyle->getMainColor() == color)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_cleanupStyle->setMainColor(color);
Toshihiro Shimizu 890ddd
	m_cleanupStyle->invalidateIcon();
Toshihiro Shimizu 890ddd
	m_colorSample->setStyle(*m_cleanupStyle);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged(false);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TPixel32 CleanupColorField::getOutputColor() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_cleanupStyle->getColorParamValue(1);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::setOutputColor(const TPixel32 &color)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (getOutputColor() == color)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_cleanupStyle->setColorParamValue(1, color);
Toshihiro Shimizu 890ddd
	m_cleanupStyle->invalidateIcon();
Toshihiro Shimizu 890ddd
	m_colorSample->setStyle(*m_cleanupStyle);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::setStyle(TColorStyle *style)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (getColor() == style->getMainColor() &&
Toshihiro Shimizu 890ddd
		getOutputColor() == style->getColorParamValue(1))
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_cleanupStyle->setMainColor(style->getMainColor());
Toshihiro Shimizu 890ddd
	m_cleanupStyle->setColorParamValue(1, style->getColorParamValue(1));
Toshihiro Shimizu 890ddd
	m_cleanupStyle->invalidateIcon();
Toshihiro Shimizu 890ddd
	m_colorSample->setStyle(*m_cleanupStyle);
Toshihiro Shimizu 890ddd
	m_ph->notifyColorStyleChanged();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
CleanupColorField::CleanupColorFieldEditorController *CleanupColorField::m_editorController = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
CleanupColorField::CleanupColorFieldEditorController *CleanupColorField::getEditorController()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_editorController;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::setEditorController(CleanupColorFieldEditorController *editorController)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_editorController = editorController;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::mouseDoubleClickEvent(QMouseEvent *event)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	QPoint p = event->pos();
Toshihiro Shimizu 890ddd
	if (!m_colorSample->visibleRegion().contains(p))
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	emit StyleSelected(m_cleanupStyle);
Toshihiro Shimizu 890ddd
	if (!getEditorController())
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	CommandManager::instance()->execute("MI_OpenStyleControl");
Toshihiro Shimizu 890ddd
	getEditorController()->edit(this);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::hideEvent(QHideEvent *)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (!getEditorController())
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	getEditorController()->edit(0);
Toshihiro Shimizu 890ddd
	getEditorController()->hide();
Toshihiro Shimizu 890ddd
	//setEditorController(0);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void CleanupColorField::setContrastEnabled(bool enable)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_contrastChannel->setEnabled(enable);
Toshihiro Shimizu 890ddd
	m_cleanupStyle->enableContrast(enable);
Toshihiro Shimizu 890ddd
}