summaryrefslogtreecommitdiffstats
path: root/src/gui/colorcombo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/colorcombo.cpp')
-rw-r--r--src/gui/colorcombo.cpp194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/gui/colorcombo.cpp b/src/gui/colorcombo.cpp
new file mode 100644
index 0000000..aec39ae
--- /dev/null
+++ b/src/gui/colorcombo.cpp
@@ -0,0 +1,194 @@
+/***************************************************************************
+ * Copyright (C) 2005 by David Saxton *
+ * david@bluehaze.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+#include "colorcombo.h"
+
+#include <kcolordialog.h>
+#include <klocale.h>
+#include <qpainter.h>
+
+bool ColorCombo::createdPalettes = false;
+QColor * ColorCombo::palette[ NumberOfSchemes ];
+int ColorCombo::paletteSize[ NumberOfSchemes ];
+
+ColorCombo::ColorCombo( ColorScheme colorScheme, QWidget *parent, const char *name )
+ : QComboBox( parent, name )
+{
+ m_colorScheme = colorScheme;
+
+ customColor.setRgb( 255, 255, 255 );
+ internalColor.setRgb( 255, 255, 255 );
+
+ createPalettes();
+
+ addColors();
+
+ connect( this, SIGNAL( activated(int) ), SLOT( slotActivated(int) ) );
+ connect( this, SIGNAL( highlighted(int) ), SLOT( slotHighlighted(int) ) );
+}
+
+
+ColorCombo::~ColorCombo()
+{
+}
+
+
+void ColorCombo::createPalettes()
+{
+ if ( createdPalettes )
+ return;
+ createdPalettes = true;
+
+ paletteSize[ QtStandard ] = 17;
+ palette[ QtStandard ] = new QColor[ paletteSize[ QtStandard ] ];
+
+ int i = 0;
+
+ palette[ QtStandard ][i++] = Qt::red;
+ palette[ QtStandard ][i++] = Qt::green;
+ palette[ QtStandard ][i++] = Qt::blue;
+ palette[ QtStandard ][i++] = Qt::cyan;
+ palette[ QtStandard ][i++] = Qt::magenta;
+ palette[ QtStandard ][i++] = Qt::yellow;
+ palette[ QtStandard ][i++] = Qt::darkRed;
+ palette[ QtStandard ][i++] = Qt::darkGreen;
+ palette[ QtStandard ][i++] = Qt::darkBlue;
+ palette[ QtStandard ][i++] = Qt::darkCyan;
+ palette[ QtStandard ][i++] = Qt::darkMagenta;
+ palette[ QtStandard ][i++] = Qt::darkYellow;
+ palette[ QtStandard ][i++] = Qt::white;
+ palette[ QtStandard ][i++] = Qt::lightGray;
+ palette[ QtStandard ][i++] = Qt::gray;
+ palette[ QtStandard ][i++] = Qt::darkGray;
+ palette[ QtStandard ][i++] = Qt::black;
+
+
+ paletteSize[ LED ] = 6;
+ palette[ LED ] = new QColor[ paletteSize[ LED ] ];
+
+ i = 0;
+ palette[ LED ][i++] = "#f62a2a";
+ palette[ LED ][i++] = "#ff7733";
+ palette[ LED ][i++] = "#ffbb33";
+ palette[ LED ][i++] = "#eeee22";
+ palette[ LED ][i++] = "#4cc308";
+ palette[ LED ][i++] = "#22aaee";
+}
+
+
+void ColorCombo::setColor( const QColor &col )
+{
+ internalColor = col;
+ addColors();
+}
+
+
+void ColorCombo::resizeEvent( QResizeEvent *re )
+{
+ QComboBox::resizeEvent( re );
+ addColors();
+}
+
+
+void ColorCombo::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 = palette[ m_colorScheme ][ index - 1 ];
+
+ emit activated( internalColor );
+}
+
+void ColorCombo::slotHighlighted( int index )
+{
+ if ( index == 0 )
+ internalColor = customColor;
+ else
+ internalColor = palette[ m_colorScheme ][ index - 1 ];
+
+ emit highlighted( internalColor );
+}
+
+void ColorCombo::addColors()
+{
+ QPainter painter;
+ QPen pen;
+ QRect rect( 0, 0, width(), QFontMetrics(painter.font()).height()+4 );
+ QPixmap pixmap( rect.width(), rect.height() );
+ int i;
+
+ clear();
+
+ createPalettes();
+
+ for ( i = 0; i < paletteSize[ m_colorScheme ]; i++ )
+ if ( palette[ m_colorScheme ][i] == internalColor ) break;
+
+ if ( i == paletteSize[ m_colorScheme ] )
+ 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 < paletteSize[ m_colorScheme ]; i++ )
+ {
+ painter.begin( &pixmap );
+ QBrush brush( palette[ m_colorScheme ][i] );
+ painter.fillRect( rect, brush );
+ painter.end();
+
+ insertItem( pixmap );
+ pixmap.detach();
+
+ if ( palette[ m_colorScheme ][i] == internalColor )
+ setCurrentItem( i + 1 );
+ }
+}
+
+
+#include "colorcombo.moc"