summaryrefslogtreecommitdiffstats
path: root/kdeui/kcolordialog.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /kdeui/kcolordialog.h
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdeui/kcolordialog.h')
-rw-r--r--kdeui/kcolordialog.h496
1 files changed, 496 insertions, 0 deletions
diff --git a/kdeui/kcolordialog.h b/kdeui/kcolordialog.h
new file mode 100644
index 000000000..357efe038
--- /dev/null
+++ b/kdeui/kcolordialog.h
@@ -0,0 +1,496 @@
+/* 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.
+
+// layout management added Oct 1997 by Mario Weilguni
+// <mweilguni@sime.com>
+
+#ifndef KDELIBS_KCOLORDIALOG_H
+#define KDELIBS_KCOLORDIALOG_H
+
+#ifdef Q_WS_QWS
+// FIXME(E): Do we need the KColorDialog extra functionality in Qt Embedded?
+#include <qcolordialog.h>
+#define KColorDialog QColorDialog
+#else //UNIX, WIN32
+#include <kdialogbase.h>
+#include <qframe.h>
+#include <qpixmap.h>
+#include <qgridview.h>
+
+#include "kselect.h"
+
+class QComboBox;
+class QLineEdit;
+class KListBox;
+class KPalette;
+class KColorCells;
+
+
+/**
+ * Widget for Hue/Saturation colour selection.
+ *
+ * The actual values can be fetched using the inherited xValue and yValue
+ * methods.
+ *
+ * \image html khsselector.png "KDE Hue/Saturation Selection Widget"
+ *
+ * @see KXYSelector, KValueSelector, KColorDialog
+ * @author Martin Jones (mjones@kde.org)
+*/
+class KDEUI_EXPORT KHSSelector : public KXYSelector
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructs a hue/saturation selection widget.
+ */
+ KHSSelector( QWidget *parent=0, const char *name=0 );
+
+protected:
+ /**
+ * Draws the contents of the widget on a pixmap,
+ * which is used for buffering.
+ */
+ virtual void drawPalette( QPixmap *pixmap );
+ virtual void resizeEvent( QResizeEvent * );
+
+ /**
+ * Reimplemented from KXYSelector. This drawing is
+ * buffered in a pixmap here. As real drawing
+ * routine, drawPalette() is used.
+ */
+ virtual void drawContents( QPainter *painter );
+
+private:
+ void updateContents();
+ QPixmap pixmap;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KHSSelectorPrivate;
+ KHSSelectorPrivate *d;
+};
+
+
+class KValueSelectorPrivate;
+/**
+ * Widget for color value selection.
+ *
+ * @see KHSSelector, KColorDialog
+ * @author Martin Jones (mjones@kde.org)
+ */
+class KDEUI_EXPORT KValueSelector : public KSelector
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructs a widget for color selection.
+ */
+ KValueSelector( QWidget *parent=0, const char *name=0 );
+ /**
+ * Constructs a widget for color selection with a given orientation
+ */
+ KValueSelector( Orientation o, QWidget *parent = 0, const char *name = 0 );
+
+ int hue() const
+ { return _hue; }
+ void setHue( int h )
+ { _hue = h; }
+ int saturation() const
+ { return _sat; }
+ void setSaturation( int s )
+ { _sat = s; }
+
+ void updateContents();
+protected:
+ /**
+ * Draws the contents of the widget on a pixmap,
+ * which is used for buffering.
+ */
+ virtual void drawPalette( QPixmap *pixmap );
+ virtual void resizeEvent( QResizeEvent * );
+
+ /**
+ * Reimplemented from KSelector. The drawing is
+ * buffered in a pixmap here. As real drawing
+ * routine, drawPalette() is used.
+ */
+ virtual void drawContents( QPainter *painter );
+
+private:
+ int _hue;
+ int _sat;
+ QPixmap pixmap;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KValueSelectorPrivate;
+ KValueSelectorPrivate *d;
+};
+
+
+/**
+ * A color class that preserves both RGB and HSV values.
+ *
+ * This is
+ * unlike QColor which only preserves RGB values and recalculates HSV
+ * values. The QColor behavior leads to an accumulation of rounding
+ * errors when working in the HSV color space.
+ *
+ * @author Waldo Bastian <bastian@kde.org>
+ **/
+class KDEUI_EXPORT KColor : public QColor
+{
+public:
+ KColor();
+ KColor( const KColor &col);
+ KColor( const QColor &col);
+
+ KColor& operator=( const KColor& col);
+
+ bool operator==( const KColor& col) const;
+
+ void setHsv(int _h, int _s, int _v);
+ void setRgb(int _r, int _g, int _b);
+
+ void rgb(int *_r, int *_g, int *_b) const;
+ void hsv(int *_h, int *_s, int *_v) const;
+protected:
+ int h;
+ int s;
+ int v;
+ int r;
+ int g;
+ int b;
+
+private:
+ class KColorPrivate;
+ KColorPrivate *d;
+};
+
+/**
+ * A color palette in table form.
+ *
+ * @author Waldo Bastian <bastian@kde.org>
+ **/
+class KDEUI_EXPORT KPaletteTable : public QWidget
+{
+ Q_OBJECT
+public:
+ KPaletteTable( QWidget *parent, int minWidth=210, int cols = 16);
+ ~KPaletteTable();
+ void addToCustomColors( const QColor &);
+ void addToRecentColors( const QColor &);
+ QString palette() const;
+public slots:
+ void setPalette(const QString &paletteName);
+signals:
+ void colorSelected( const QColor &, const QString & );
+ void colorDoubleClicked( const QColor &, const QString & );
+
+protected slots:
+ void slotColorCellSelected( int );
+ void slotColorCellDoubleClicked( int );
+ void slotColorTextSelected( const QString &colorText );
+ void slotSetPalette( const QString &_paletteName );
+ void slotShowNamedColorReadError( void );
+
+protected:
+ void readNamedColor( void );
+
+protected:
+ /// \deprecated
+ QString i18n_customColors; /// ### KDE4: remove
+ /// \deprecated
+ QString i18n_recentColors; /// ### KDE4: remove
+ QString i18n_namedColors;
+ QComboBox *combo;
+ KColorCells *cells;
+ QScrollView *sv;
+ KListBox *mNamedColorList;
+ KPalette *mPalette;
+ int mMinWidth;
+ int mCols;
+
+private:
+
+ virtual void setPalette(const QPalette& p) { QWidget::setPalette(p); }
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KPaletteTablePrivate;
+ KPaletteTablePrivate *d;
+};
+
+
+/**
+* A table of editable color cells.
+*
+* @author Martin Jones <mjones@kde.org>
+*/
+class KDEUI_EXPORT KColorCells : public QGridView
+{
+ Q_OBJECT
+public:
+ KColorCells( QWidget *parent, int rows, int cols );
+ ~KColorCells();
+
+ void setColor( int colNum, const QColor &col );
+ QColor color( int indx ) const
+ { return colors[indx]; }
+ int numCells() const
+ { return numRows() * numCols(); }
+
+ void setShading(bool _shade) { shade = _shade; }
+
+ void setAcceptDrags(bool _acceptDrags) { acceptDrags = _acceptDrags; }
+
+ int getSelected() const
+ { return selected; }
+
+ signals:
+ void colorSelected( int col );
+ void colorDoubleClicked( int col );
+
+protected:
+ virtual void paintCell( QPainter *painter, int row, int col );
+ virtual void resizeEvent( QResizeEvent * );
+ virtual void mouseReleaseEvent( QMouseEvent * );
+ virtual void mousePressEvent( QMouseEvent * );
+ virtual void mouseMoveEvent( QMouseEvent * );
+ virtual void dragEnterEvent( QDragEnterEvent *);
+ virtual void dropEvent( QDropEvent *);
+ virtual void mouseDoubleClickEvent( QMouseEvent * );
+
+ int posToCell(const QPoint &pos, bool ignoreBorders=false);
+
+ QColor *colors;
+ bool inMouse;
+ QPoint mPos;
+ int selected;
+ bool shade;
+ bool acceptDrags;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KColorCellsPrivate;
+ KColorCellsPrivate *d;
+};
+
+/**
+ * @short A color displayer.
+ *
+ * The KColorPatch widget is a (usually small) widget showing
+ * a selected color e. g. in the KColorDialog. It
+ * automatically handles drag and drop from and on the widget.
+ *
+ */
+class KDEUI_EXPORT KColorPatch : public QFrame
+{
+ Q_OBJECT
+public:
+ KColorPatch( QWidget *parent );
+ virtual ~KColorPatch();
+
+ void setColor( const QColor &col );
+
+signals:
+ void colorChanged( const QColor&);
+
+protected:
+ virtual void drawContents( QPainter *painter );
+ virtual void mouseMoveEvent( QMouseEvent * );
+ virtual void dragEnterEvent( QDragEnterEvent *);
+ virtual void dropEvent( QDropEvent *);
+
+private:
+ QColor color;
+ uint pixel;
+ int colContext;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KColorPatchPrivate;
+ KColorPatchPrivate *d;
+};
+
+/**
+ * @short A color selection dialog.
+ *
+ * <b>Features:</b>\n
+ *
+ * @li Color selection from a wide range of palettes.
+ * @li Color selection from a palette of H vs S and V selectors.
+ * @li Direct input of HSV or RGB values.
+ * @li Saving of custom colors
+ *
+ * In most cases, you will want to use the static method KColorDialog::getColor().
+ * This pops up the dialog (with an initial selection provided by you), lets the
+ * user choose a color, and returns.
+ *
+ * Example:
+ *
+ * \code
+ * QColor myColor;
+ * int result = KColorDialog::getColor( myColor );
+ * if ( result == KColorDialog::Accepted )
+ * ...
+ * \endcode
+ *
+ * @image html kcolordialog.png "KDE Color Dialog"
+ *
+ * The color dialog is really a collection of several widgets which can
+ * you can also use separately: the quadratic plane in the top left of
+ * the dialog is a KXYSelector. Right next to it is a KHSSelector
+ * for choosing hue/saturation.
+ *
+ * On the right side of the dialog you see a KPaletteTable showing
+ * up to 40 colors with a combo box which offers several predefined
+ * palettes or a palette configured by the user. The small field showing
+ * the currently selected color is a KColorPatch.
+ *
+ **/
+class KDEUI_EXPORT KColorDialog : public KDialogBase
+{
+ Q_OBJECT
+
+ public:
+ /**
+ * Constructs a color selection dialog.
+ */
+ KColorDialog( QWidget *parent = 0L, const char *name = 0L,
+ bool modal = false );
+ /**
+ * Destroys the color selection dialog.
+ */
+ ~KColorDialog();
+
+ /**
+ * Returns the currently selected color.
+ **/
+ QColor color() const;
+
+ /**
+ * Creates a modal color dialog, let the user choose a
+ * color, and returns when the dialog is closed.
+ *
+ * The selected color is returned in the argument @p theColor.
+ *
+ * @returns QDialog::result().
+ */
+ static int getColor( QColor &theColor, QWidget *parent=0L );
+
+ /**
+ * Creates a modal color dialog, lets the user choose a
+ * color, and returns when the dialog is closed.
+ *
+ * The selected color is returned in the argument @p theColor.
+ *
+ * This version takes a @p defaultColor argument, which sets the color
+ * selected by the "default color" checkbox. When this checkbox is checked,
+ * the invalid color (QColor()) is returned into @p theColor.
+ *
+ * @returns QDialog::result().
+ */
+ static int getColor( QColor &theColor, const QColor& defaultColor, QWidget *parent=0L );
+
+ /**
+ * Gets the color from the pixel at point p on the screen.
+ */
+ static QColor grabColor(const QPoint &p);
+
+ /**
+ * Call this to make the dialog show a "Default Color" checkbox.
+ * If this checkbox is selected, the dialog will return an "invalid" color (QColor()).
+ * This can be used to mean "the default text color", for instance,
+ * the one with the KDE text color on screen, but black when printing.
+ */
+ void setDefaultColor( const QColor& defaultCol );
+
+ /**
+ * @return the value passed to setDefaultColor
+ */
+ QColor defaultColor() const;
+
+ public slots:
+ /**
+ * Preselects a color.
+ */
+ void setColor( const QColor &col );
+
+ signals:
+ /**
+ * Emitted when a color is selected.
+ * Connect to this to monitor the color as it as selected if you are
+ * not running modal.
+ */
+ void colorSelected( const QColor &col );
+
+ private slots:
+ void slotRGBChanged( void );
+ void slotHSVChanged( void );
+ void slotHtmlChanged( void );
+ void slotHSChanged( int, int );
+ void slotVChanged( int );
+ void slotColorSelected( const QColor &col );
+ void slotColorSelected( const QColor &col, const QString &name );
+ void slotColorDoubleClicked( const QColor &col, const QString &name );
+ void slotColorPicker();
+ void slotAddToCustomColors();
+ void slotDefaultColorClicked();
+ /**
+ * Write the settings of the dialog to config file.
+ **/
+ void slotWriteSettings();
+
+ private:
+ /**
+ * Read the settings for the dialog from config file.
+ **/
+ void readSettings();
+
+ void setRgbEdit( const KColor &col );
+ void setHsvEdit( const KColor &col );
+ void setHtmlEdit( const KColor &col );
+ void _setColor( const KColor &col, const QString &name=QString::null );
+ void showColor( const KColor &color, const QString &name );
+
+ protected:
+ virtual void mouseReleaseEvent( QMouseEvent * );
+ virtual void keyPressEvent( QKeyEvent * );
+ virtual bool eventFilter( QObject *obj, QEvent *ev );
+
+ protected:
+ virtual void virtual_hook( int id, void* data );
+ private:
+ class KColorDialogPrivate;
+ KColorDialogPrivate *d;
+};
+
+#endif // !Q_WS_QWS
+#endif // KDELIBS_KCOLORDIALOG_H
+