summaryrefslogtreecommitdiffstats
path: root/kdeui/kcolorcombo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/kcolorcombo.cpp')
-rw-r--r--kdeui/kcolorcombo.cpp264
1 files changed, 264 insertions, 0 deletions
diff --git a/kdeui/kcolorcombo.cpp b/kdeui/kcolorcombo.cpp
new file mode 100644
index 000000000..1e39d75cb
--- /dev/null
+++ b/kdeui/kcolorcombo.cpp
@@ -0,0 +1,264 @@
+/* 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 <qdrawutil.h>
+#include <qevent.h>
+#include <qfile.h>
+#include <qimage.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qvalidator.h>
+#include <qpainter.h>
+#include <qpushbutton.h>
+#include <qtimer.h>
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <kiconloader.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kseparator.h>
+#include <kpalette.h>
+#include <kimageeffect.h>
+
+//#include "kcolordialog.h"
+//#include "kcolordrag.h"
+#include "kcolorcombo.h"
+
+// 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
+
+#ifndef KDE_USE_FINAL
+#define STANDARD_PAL_SIZE 17
+
+static QColor *standardPalette = 0;
+
+static void createStandardPalette()
+{
+ if ( standardPalette )
+ return;
+
+ standardPalette = new QColor [STANDARD_PAL_SIZE];
+
+ int i = 0;
+
+ standardPalette[i++] = Qt::red;
+ standardPalette[i++] = Qt::green;
+ standardPalette[i++] = Qt::blue;
+ standardPalette[i++] = Qt::cyan;
+ standardPalette[i++] = Qt::magenta;
+ standardPalette[i++] = Qt::yellow;
+ standardPalette[i++] = Qt::darkRed;
+ standardPalette[i++] = Qt::darkGreen;
+ standardPalette[i++] = Qt::darkBlue;
+ standardPalette[i++] = Qt::darkCyan;
+ standardPalette[i++] = Qt::darkMagenta;
+ standardPalette[i++] = Qt::darkYellow;
+ standardPalette[i++] = Qt::white;
+ standardPalette[i++] = Qt::lightGray;
+ standardPalette[i++] = Qt::gray;
+ standardPalette[i++] = Qt::darkGray;
+ standardPalette[i++] = Qt::black;
+}
+#endif
+
+class KColorCombo::KColorComboPrivate
+{
+ protected:
+ friend class KColorCombo;
+ KColorComboPrivate(){}
+ ~KColorComboPrivate(){}
+ bool showEmptyList;
+};
+
+KColorCombo::KColorCombo( QWidget *parent, const char *name )
+ : QComboBox( parent, name )
+{
+ d=new KColorComboPrivate();
+ d->showEmptyList=false;
+
+ customColor.setRgb( 255, 255, 255 );
+ internalcolor.setRgb( 255, 255, 255 );
+
+ createStandardPalette();
+
+ addColors();
+
+ connect( this, SIGNAL( activated(int) ), SLOT( slotActivated(int) ) );
+ connect( this, SIGNAL( highlighted(int) ), SLOT( slotHighlighted(int) ) );
+}
+
+
+KColorCombo::~KColorCombo()
+{
+ delete d;
+}
+/**
+ Sets the current color
+ */
+void KColorCombo::setColor( const QColor &col )
+{
+ internalcolor = col;
+ d->showEmptyList=false;
+ addColors();
+}
+
+
+/**
+ Returns the currently selected color
+ */
+QColor KColorCombo::color() const {
+ return internalcolor;
+}
+
+void KColorCombo::resizeEvent( QResizeEvent *re )
+{
+ QComboBox::resizeEvent( re );
+
+ addColors();
+}
+
+/**
+ Show an empty list, till the next color is set with setColor
+ */
+void KColorCombo::showEmptyList()
+{
+ d->showEmptyList=true;
+ addColors();
+}
+
+void KColorCombo::slotActivated( int index )
+{
+ if ( index == 0 )
+ {
+ if ( KColorDialog::getColor( customColor, this ) == QDialog::Accepted )
+ {
+ QPainter painter;
+ QPen pen;
+ QRect rect( 0, 0, width(), QFontMetrics(painter.font()).height()+4);
+ QPixmap pixmap( rect.width(), rect.height() );
+
+ if ( qGray( customColor.rgb() ) < 128 )
+ pen.setColor( white );
+ else
+ pen.setColor( black );
+
+ painter.begin( &pixmap );
+ QBrush brush( customColor );
+ painter.fillRect( rect, brush );
+ painter.setPen( pen );
+ painter.drawText( 2, QFontMetrics(painter.font()).ascent()+2, i18n("Custom...") );
+ painter.end();
+
+ changeItem( pixmap, 0 );
+ pixmap.detach();
+ }
+
+ internalcolor = customColor;
+ }
+ else
+ internalcolor = standardPalette[ index - 1 ];
+
+ emit activated( internalcolor );
+}
+
+void KColorCombo::slotHighlighted( int index )
+{
+ if ( index == 0 )
+ internalcolor = customColor;
+ else
+ internalcolor = standardPalette[ index - 1 ];
+
+ emit highlighted( internalcolor );
+}
+
+void KColorCombo::addColors()
+{
+ QPainter painter;
+ QPen pen;
+ QRect rect( 0, 0, width(), QFontMetrics(painter.font()).height()+4 );
+ QPixmap pixmap( rect.width(), rect.height() );
+ int i;
+
+ clear();
+ if (d->showEmptyList) return;
+
+ createStandardPalette();
+
+ for ( i = 0; i < STANDARD_PAL_SIZE; i++ )
+ if ( standardPalette[i] == internalcolor ) break;
+
+ if ( i == STANDARD_PAL_SIZE )
+ customColor = internalcolor;
+
+ if ( qGray( customColor.rgb() ) < 128 )
+ pen.setColor( white );
+ else
+ pen.setColor( black );
+
+ painter.begin( &pixmap );
+ QBrush brush( customColor );
+ painter.fillRect( rect, brush );
+ painter.setPen( pen );
+ painter.drawText( 2, QFontMetrics(painter.font()).ascent()+2, i18n("Custom...") );
+ painter.end();
+
+ insertItem( pixmap );
+ pixmap.detach();
+
+ for ( i = 0; i < STANDARD_PAL_SIZE; i++ )
+ {
+ painter.begin( &pixmap );
+ QBrush brush( standardPalette[i] );
+ painter.fillRect( rect, brush );
+ painter.end();
+
+ insertItem( pixmap );
+ pixmap.detach();
+
+ if ( standardPalette[i] == internalcolor )
+ setCurrentItem( i + 1 );
+ }
+}
+
+void KColorCombo::virtual_hook( int, void* )
+{ /*BASE::virtual_hook( id, data );*/ }
+
+#include "kcolorcombo.moc"