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

200 lines
6.5 KiB

/* This file is part of the KDE project
Copyright (C) 2001, The Karbon Developers
Copyright (C) 2002, The Karbon Developers
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include <qgroupbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <kcolordialog.h>
#include <klocale.h>
#include <knuminput.h>
#include "vcolor.h"
#include "vfillcmd.h"
#include "vcolortab.h"
#include "vselection.h"
#include <kdebug.h>
VColorTab::VColorTab( const VColor &c, QWidget* parent, const char* name )
: QTabWidget( parent, name )
{
QGridLayout *mainLayout;
mRGBWidget = new QWidget( this );
mainLayout = new QGridLayout( mRGBWidget, 3, 3 );
mColorSelector = new KHSSelector( mRGBWidget );
mColorSelector->setMinimumHeight( 165 );
mColorSelector->setMinimumWidth( 165 );
connect( mColorSelector, SIGNAL( valueChanged( int, int ) ), this, SLOT( slotHSChanged( int, int ) ) );
mainLayout->addMultiCellWidget(mColorSelector, 0, 2, 0, 0 );
//Selector
mSelector = new KGradientSelector( KSelector::Vertical, mRGBWidget );
mSelector->setColors( QColor( "white" ), QColor( "black" ) );
mSelector->setMinimumWidth( 20 );
//TODO: Make it autochange color if the solid-filled object is selected (also for QSpinBoxes)
connect( mSelector, SIGNAL( valueChanged( int ) ), this, SLOT( slotVChanged( int ) ) );
mainLayout->addMultiCellWidget( mSelector, 0, 2, 1, 1 );
//Reference
QGroupBox* groupbox = new QGroupBox( 2, Vertical, i18n( "Reference" ), mRGBWidget );
new QLabel( i18n( "Old:" ), groupbox );
new QLabel( i18n( "New:" ), groupbox );
mOldColor = new KColorPatch( groupbox );
mColorPreview = new KColorPatch( groupbox );
QColor color( c );
mOldColor->setColor( color );
mColorPreview->setColor( color );
mainLayout->addWidget( groupbox, 0, 2 );
//Components
QGroupBox* cgroupbox = new QGroupBox( 3, Vertical, i18n( "Components" ), mRGBWidget );
//--->RGB
new QLabel( i18n( "R:" ), cgroupbox );
new QLabel( i18n( "G:" ), cgroupbox );
new QLabel( i18n( "B:" ), cgroupbox );
mRed = new KIntSpinBox( 0, 255, 1, 0, 10, cgroupbox );
mGreen = new KIntSpinBox( 0, 255, 1, 0, 10, cgroupbox );
mBlue = new KIntSpinBox( 0, 255, 1, 0, 10, cgroupbox );
connect( mRed, SIGNAL( valueChanged(int) ), this, SLOT( slotUpdateFromRGBSpinBoxes() ) );
connect( mGreen, SIGNAL( valueChanged(int) ), this, SLOT( slotUpdateFromRGBSpinBoxes() ) );
connect( mBlue, SIGNAL( valueChanged(int) ), this, SLOT( slotUpdateFromRGBSpinBoxes() ) );
//--->HSV
new QLabel( i18n( "Hue:", "H:" ), cgroupbox );
new QLabel( i18n( "Saturation:", "S:" ), cgroupbox );
new QLabel( i18n( "Value:", "V:" ), cgroupbox );
mHue = new KIntSpinBox( 0, 359, 1, 0, 10, cgroupbox );
mSaturation = new KIntSpinBox( 0, 255, 1, 0, 10, cgroupbox );
mValue = new KIntSpinBox( 0, 255, 1, 0, 10, cgroupbox );
connect( mHue, SIGNAL( valueChanged(int) ), this, SLOT( slotUpdateFromHSVSpinBoxes() ) );
connect( mSaturation, SIGNAL( valueChanged(int) ), this, SLOT( slotUpdateFromHSVSpinBoxes() ) );
connect( mValue, SIGNAL( valueChanged(int) ), this, SLOT( slotUpdateFromHSVSpinBoxes() ) );
mainLayout->addWidget( cgroupbox, 1, 2 );
//--->Opacity
QGroupBox* ogroupBox = new QGroupBox( 1, Vertical, i18n( "Opacity" ), mRGBWidget );
mOpacity = new KIntNumInput( 100, ogroupBox );
mOpacity->setRange( 0, 100, 1, true );
mOpacity->setValue( int( c.opacity() * 100.0 ) );
mainLayout->addWidget( ogroupBox, 2, 2 );
mainLayout->setSpacing( 2 );
mainLayout->setMargin( 5 );
mainLayout->activate();
addTab( mRGBWidget, i18n( "RGB" ) );
mRed->setValue( color.red() );
mGreen->setValue( color.green() );
mBlue->setValue( color.blue() );
}
void VColorTab::slotUpdateFromRGBSpinBoxes()
{
QColor color( mRed->value(), mGreen->value(), mBlue->value(), QColor::Rgb );
mColorPreview->setColor( color );
mColorPreview->update();
// set HSV
mHue->blockSignals( true );
mSaturation->blockSignals( true );
mValue->blockSignals( true );
int h, s, v;
color.hsv( &h, &s, &v );
mHue->setValue( h );
mSaturation->setValue( s );
mValue->setValue( v );
// update gradient selector
mSelector->blockSignals( true );
mColorSelector->setValues( h, s );
slotHSChanged( h, s );
mSelector->setValue( static_cast<int>( ( float( mValue->value() ) / 255.0 ) * 99.0 ) );
mSelector->blockSignals( false );
mHue->blockSignals( false );
mSaturation->blockSignals( false );
mValue->blockSignals( false );
}
void VColorTab::slotUpdateFromHSVSpinBoxes()
{
QColor color( mHue->value(), mSaturation->value(), mValue->value(), QColor::Hsv );
mColorPreview->setColor( color );
mColorPreview->update();
// update gradient selector
mSelector->blockSignals( true );
mSelector->setValue( static_cast<int>( ( float( mValue->value() ) / 255.0 ) * 99.0 ) );
mSelector->blockSignals( false );
// set RGB
mRed->blockSignals( true );
mGreen->blockSignals( true );
mBlue->blockSignals( true );
mRed->setValue( color.red() );
mGreen->setValue( color.green() );
mBlue->setValue( color.blue() );
mRed->blockSignals( false );
mGreen->blockSignals( false );
mBlue->blockSignals( false );
}
VColor VColorTab::Color()
{
kdDebug() << "VColorTab::slotApplyButtonPressed" << endl;
float r = mRed->value() / 255.0, g = mGreen->value() / 255.0, b = mBlue->value() / 255.0;
float op = mOpacity->value() / 100.0;
VColor c;
c.set( r, g, b );
c.setOpacity( op );
return c;
}
void VColorTab::slotHSChanged( int h, int s )
{
//QColor color( mHue->value(), mSaturation->value(), newVal, QColor::Hsv );
mHue->setValue( h );
mSaturation->setValue( s );
QColor color1( h, s, 255, QColor::Hsv );
QColor color2( h, s, 0, QColor::Hsv );
mSelector->setColors( color1, color2 );
}
void VColorTab::slotVChanged( int newVal )
{
//QColor color( mHue->value(), mSaturation->value(), newVal, QColor::Hsv );
mValue->setValue( static_cast<int>( float( newVal ) / 99.0 * 255.0 ) );
}
#include "vcolortab.moc"