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.
314 lines
7.3 KiB
314 lines
7.3 KiB
/* This file is part of the KDE libraries
|
|
Copyright (C) 1997 Martin Jones (mjones@kde.org)
|
|
|
|
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.
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
// KDE color selection dialog.
|
|
//
|
|
// 1999-09-27 Espen Sand <espensa@online.no>
|
|
// KColorDialog is now subclassed from KDialogBase. I have also extended
|
|
// KColorDialog::getColor() so that in contains a parent argument. This
|
|
// improves centering capability.
|
|
//
|
|
// layout management added Oct 1997 by Mario Weilguni
|
|
// <mweilguni@sime.com>
|
|
//
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include <tqdrawutil.h>
|
|
#include <tqevent.h>
|
|
#include <tqfile.h>
|
|
#include <tqimage.h>
|
|
#include <tqlabel.h>
|
|
#include <tqlayout.h>
|
|
#include <klineedit.h>
|
|
#include <tqvalidator.h>
|
|
#include <tqpainter.h>
|
|
#include <tqpushbutton.h>
|
|
#include <tqtimer.h>
|
|
|
|
#include <kcolordialog.h>
|
|
#include <tdeconfig.h>
|
|
#include <kglobal.h>
|
|
#include <kglobalsettings.h>
|
|
#include <kiconloader.h>
|
|
#include <tdelistbox.h>
|
|
#include <klocale.h>
|
|
#include <kmessagebox.h>
|
|
#include <kseparator.h>
|
|
#include <kpalette.h>
|
|
#include <kimageeffect.h>
|
|
|
|
#include "colorcombo.h"
|
|
#include "colorcombo.moc"
|
|
|
|
// This is repeated from the KColorDlg, but I didn't
|
|
// want to make it public BL.
|
|
// We define it out when compiling with --enable-final in which case
|
|
// we use the version defined in KColorDlg
|
|
|
|
#define STANDARD_PAL_SIZE 17
|
|
|
|
ColorCombo::ColorCombo( TQWidget *parent, const char *name )
|
|
: TQComboBox( parent, name )
|
|
{
|
|
customColor.setRgb( 255, 255, 255 );
|
|
internalcolor.setRgb( 255, 255, 255 );
|
|
|
|
hascolor = false;
|
|
|
|
createStandardPalette();
|
|
|
|
addColors();
|
|
|
|
connect( this, TQT_SIGNAL( activated(int) ), TQT_SLOT( slotActivated(int) ) );
|
|
connect( this, TQT_SIGNAL( highlighted(int) ), TQT_SLOT( slotHighlighted(int) ) );
|
|
}
|
|
|
|
ColorCombo::~ColorCombo()
|
|
{
|
|
delete []standardPalette;
|
|
delete []standardPaletteNames;
|
|
}
|
|
|
|
/**
|
|
Sets the current color
|
|
*/
|
|
void ColorCombo::setColor( const TQColor &col )
|
|
{
|
|
internalcolor = col;
|
|
hascolor = true;
|
|
|
|
addColors();
|
|
}
|
|
|
|
|
|
/**
|
|
Returns the currently selected color
|
|
*/
|
|
TQColor ColorCombo::color() const {
|
|
return internalcolor;
|
|
}
|
|
|
|
|
|
bool ColorCombo::hasColor() const{
|
|
return hascolor;
|
|
}
|
|
|
|
|
|
void ColorCombo::setColorName( const TQString &color )
|
|
{
|
|
|
|
TQColor c(color);
|
|
|
|
if ( c.isValid() && !color.isEmpty() ) {
|
|
setColor( c );
|
|
}
|
|
else {
|
|
hascolor = false;
|
|
addColors();
|
|
}
|
|
|
|
}
|
|
|
|
TQString ColorCombo::colorName()
|
|
{
|
|
if ( hascolor ) {
|
|
int i;
|
|
|
|
for ( i = 0; i < STANDARD_PAL_SIZE; i++ )
|
|
if ( standardPalette[i] == internalcolor )
|
|
return standardPaletteNames[i];
|
|
|
|
return internalcolor.name();
|
|
|
|
}
|
|
else
|
|
return "";
|
|
}
|
|
|
|
|
|
void ColorCombo::resizeEvent( TQResizeEvent *re )
|
|
{
|
|
TQComboBox::resizeEvent( re );
|
|
|
|
addColors();
|
|
}
|
|
|
|
void ColorCombo::slotActivated( int index )
|
|
{
|
|
hascolor = ( index != 0);
|
|
|
|
if ( index == 1 )
|
|
{
|
|
if ( KColorDialog::getColor( customColor ) == TQDialog::Accepted )
|
|
{
|
|
TQRect rect( 0, 0, width(), 20 );
|
|
TQPixmap pixmap( rect.width(), rect.height() );
|
|
TQPainter painter;
|
|
TQPen pen;
|
|
|
|
if ( tqGray( customColor.rgb() ) < 128 )
|
|
pen.setColor( white );
|
|
else
|
|
pen.setColor( black );
|
|
|
|
painter.begin( &pixmap );
|
|
TQBrush brush( customColor );
|
|
painter.fillRect( rect, brush );
|
|
painter.setPen( pen );
|
|
painter.drawText( 2, painter.fontMetrics().height(),
|
|
i18n("Custom...") );
|
|
painter.end();
|
|
|
|
changeItem( pixmap, 1 );
|
|
pixmap.detach();
|
|
}
|
|
|
|
internalcolor = customColor;
|
|
}
|
|
else
|
|
if ( index > 1 )
|
|
internalcolor = standardPalette[ index - 2 ];
|
|
|
|
emit activated( internalcolor );
|
|
}
|
|
|
|
void ColorCombo::slotHighlighted( int index )
|
|
{
|
|
if ( index < 2 )
|
|
internalcolor = customColor;
|
|
else
|
|
internalcolor = standardPalette[ index - 2 ];
|
|
|
|
emit highlighted( internalcolor );
|
|
}
|
|
|
|
void ColorCombo::addColors()
|
|
{
|
|
TQRect rect( 0, 0, width(), 20 );
|
|
TQPixmap pixmap( rect.width(), rect.height() );
|
|
TQPainter painter;
|
|
TQPen pen;
|
|
int i;
|
|
|
|
clear();
|
|
|
|
for ( i = 0; i < STANDARD_PAL_SIZE; i++ )
|
|
if ( standardPalette[i] == internalcolor ) break;
|
|
|
|
if ( i == STANDARD_PAL_SIZE )
|
|
customColor = internalcolor;
|
|
|
|
insertItem( i18n("None") );
|
|
|
|
if ( tqGray( customColor.rgb() ) < 128 )
|
|
pen.setColor( white );
|
|
else
|
|
pen.setColor( black );
|
|
|
|
painter.begin( &pixmap );
|
|
TQBrush brush( customColor );
|
|
painter.fillRect( rect, brush );
|
|
painter.setPen( pen );
|
|
|
|
painter.drawText( 2, painter.fontMetrics().height(), i18n("Custom...") );
|
|
painter.end();
|
|
|
|
insertItem( pixmap );
|
|
pixmap.detach();
|
|
|
|
bool findColor = false;
|
|
|
|
for ( i = 0; i < STANDARD_PAL_SIZE; i++ )
|
|
{
|
|
painter.begin( &pixmap );
|
|
TQBrush brush( standardPalette[i] );
|
|
painter.fillRect( rect, brush );
|
|
painter.end();
|
|
|
|
insertItem( pixmap );
|
|
pixmap.detach();
|
|
|
|
if ( standardPalette[i] == internalcolor ) {
|
|
setCurrentItem( i + 2 );
|
|
findColor = true;
|
|
}
|
|
}
|
|
|
|
if ( !findColor )
|
|
setCurrentItem(1);
|
|
|
|
|
|
|
|
if ( !hascolor )
|
|
setCurrentItem(0);
|
|
|
|
}
|
|
|
|
void ColorCombo::createStandardPalette()
|
|
{
|
|
|
|
standardPalette = new TQColor [STANDARD_PAL_SIZE];
|
|
|
|
int i = 0;
|
|
|
|
standardPalette[i++] = TQt::red;
|
|
standardPalette[i++] = TQt::green;
|
|
standardPalette[i++] = TQt::blue;
|
|
standardPalette[i++] = TQt::cyan;
|
|
standardPalette[i++] = TQt::magenta;
|
|
standardPalette[i++] = TQt::yellow;
|
|
standardPalette[i++] = TQt::darkRed;
|
|
standardPalette[i++] = TQt::darkGreen;
|
|
standardPalette[i++] = TQt::darkBlue;
|
|
standardPalette[i++] = TQt::darkCyan;
|
|
standardPalette[i++] = TQt::darkMagenta;
|
|
standardPalette[i++] = TQt::darkYellow;
|
|
standardPalette[i++] = TQt::white;
|
|
standardPalette[i++] = TQt::lightGray;
|
|
standardPalette[i++] = TQt::gray;
|
|
standardPalette[i++] = TQt::darkGray;
|
|
standardPalette[i++] = TQt::black;
|
|
|
|
|
|
standardPaletteNames = new TQString [STANDARD_PAL_SIZE];
|
|
|
|
i = 0;
|
|
|
|
standardPaletteNames[i++] = "red";
|
|
standardPaletteNames[i++] = "green";
|
|
standardPaletteNames[i++] = "blue";
|
|
standardPaletteNames[i++] = "cyan";
|
|
standardPaletteNames[i++] = "magenta";
|
|
standardPaletteNames[i++] = "yellow";
|
|
standardPaletteNames[i++] = "darkRed";
|
|
standardPaletteNames[i++] = "darkGreen";
|
|
standardPaletteNames[i++] = "darkBlue";
|
|
standardPaletteNames[i++] = "darkCyan";
|
|
standardPaletteNames[i++] = "darkMagenta";
|
|
standardPaletteNames[i++] = "darkYellow";
|
|
standardPaletteNames[i++] = "white";
|
|
standardPaletteNames[i++] = "lightGray";
|
|
standardPaletteNames[i++] = "gray";
|
|
standardPaletteNames[i++] = "darkGray";
|
|
standardPaletteNames[i++] = "black";
|
|
}
|