|
|
|
/* 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 <tqcolordialog.h>
|
|
|
|
#define KColorDialog QColorDialog
|
|
|
|
#else //UNIX, WIN32
|
|
|
|
#include <kdialogbase.h>
|
|
|
|
#include <tqframe.h>
|
|
|
|
#include <tqpixmap.h>
|
|
|
|
#include <tqgridview.h>
|
|
|
|
|
|
|
|
#include "kselect.h"
|
|
|
|
|
|
|
|
class TQComboBox;
|
|
|
|
class TQLineEdit;
|
|
|
|
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( TQWidget *parent=0, const char *name=0 );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/**
|
|
|
|
* Draws the contents of the widget on a pixmap,
|
|
|
|
* which is used for buffering.
|
|
|
|
*/
|
|
|
|
virtual void drawPalette( TQPixmap *pixmap );
|
|
|
|
virtual void resizeEvent( TQResizeEvent * );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reimplemented from KXYSelector. This drawing is
|
|
|
|
* buffered in a pixmap here. As real drawing
|
|
|
|
* routine, drawPalette() is used.
|
|
|
|
*/
|
|
|
|
virtual void drawContents( TQPainter *painter );
|
|
|
|
|
|
|
|
private:
|
|
|
|
void updateContents();
|
|
|
|
TQPixmap 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( TQWidget *parent=0, const char *name=0 );
|
|
|
|
/**
|
|
|
|
* Constructs a widget for color selection with a given orientation
|
|
|
|
*/
|
|
|
|
KValueSelector( Orientation o, TQWidget *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( TQPixmap *pixmap );
|
|
|
|
virtual void resizeEvent( TQResizeEvent * );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reimplemented from KSelector. The drawing is
|
|
|
|
* buffered in a pixmap here. As real drawing
|
|
|
|
* routine, drawPalette() is used.
|
|
|
|
*/
|
|
|
|
virtual void drawContents( TQPainter *painter );
|
|
|
|
|
|
|
|
private:
|
|
|
|
int _hue;
|
|
|
|
int _sat;
|
|
|
|
TQPixmap 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 TQColor which only preserves RGB values and recalculates HSV
|
|
|
|
* values. The TQColor 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 TQColor &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( TQWidget *parent, int minWidth=210, int cols = 16);
|
|
|
|
~KPaletteTable();
|
|
|
|
void addToCustomColors( const TQColor &);
|
|
|
|
void addToRecentColors( const TQColor &);
|
|
|
|
TQString palette() const;
|
|
|
|
public slots:
|
|
|
|
void setPalette(const TQString &paletteName);
|
|
|
|
signals:
|
|
|
|
void colorSelected( const TQColor &, const TQString & );
|
|
|
|
void colorDoubleClicked( const TQColor &, const TQString & );
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
void slotColorCellSelected( int );
|
|
|
|
void slotColorCellDoubleClicked( int );
|
|
|
|
void slotColorTextSelected( const TQString &colorText );
|
|
|
|
void slotSetPalette( const TQString &_paletteName );
|
|
|
|
void slotShowNamedColorReadError( void );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void readNamedColor( void );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/// \deprecated
|
|
|
|
TQString i18n_customColors; /// ### KDE4: remove
|
|
|
|
/// \deprecated
|
|
|
|
TQString i18n_recentColors; /// ### KDE4: remove
|
|
|
|
TQString i18n_namedColors;
|
|
|
|
TQComboBox *combo;
|
|
|
|
KColorCells *cells;
|
|
|
|
TQScrollView *sv;
|
|
|
|
KListBox *mNamedColorList;
|
|
|
|
KPalette *mPalette;
|
|
|
|
int mMinWidth;
|
|
|
|
int mCols;
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
virtual void setPalette(const TQPalette& p) { TQWidget::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( TQWidget *parent, int rows, int cols );
|
|
|
|
~KColorCells();
|
|
|
|
|
|
|
|
void setColor( int colNum, const TQColor &col );
|
|
|
|
TQColor 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( TQPainter *painter, int row, int col );
|
|
|
|
virtual void resizeEvent( TQResizeEvent * );
|
|
|
|
virtual void mouseReleaseEvent( TQMouseEvent * );
|
|
|
|
virtual void mousePressEvent( TQMouseEvent * );
|
|
|
|
virtual void mouseMoveEvent( TQMouseEvent * );
|
|
|
|
virtual void dragEnterEvent( TQDragEnterEvent *);
|
|
|
|
virtual void dropEvent( TQDropEvent *);
|
|
|
|
virtual void mouseDoubleClickEvent( TQMouseEvent * );
|
|
|
|
|
|
|
|
int posToCell(const TQPoint &pos, bool ignoreBorders=false);
|
|
|
|
|
|
|
|
TQColor *colors;
|
|
|
|
bool inMouse;
|
|
|
|
TQPoint 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( TQWidget *parent );
|
|
|
|
virtual ~KColorPatch();
|
|
|
|
|
|
|
|
void setColor( const TQColor &col );
|
|
|
|
|
|
|
|
signals:
|
|
|
|
void colorChanged( const TQColor&);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void drawContents( TQPainter *painter );
|
|
|
|
virtual void mouseMoveEvent( TQMouseEvent * );
|
|
|
|
virtual void dragEnterEvent( TQDragEnterEvent *);
|
|
|
|
virtual void dropEvent( TQDropEvent *);
|
|
|
|
|
|
|
|
private:
|
|
|
|
TQColor 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
|
|
|
|
* TQColor 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( TQWidget *parent = 0L, const char *name = 0L,
|
|
|
|
bool modal = false );
|
|
|
|
/**
|
|
|
|
* Destroys the color selection dialog.
|
|
|
|
*/
|
|
|
|
~KColorDialog();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the currently selected color.
|
|
|
|
**/
|
|
|
|
TQColor 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 TQDialog::result().
|
|
|
|
*/
|
|
|
|
static int getColor( TQColor &theColor, TQWidget *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 (TQColor()) is returned into @p theColor.
|
|
|
|
*
|
|
|
|
* @returns TQDialog::result().
|
|
|
|
*/
|
|
|
|
static int getColor( TQColor &theColor, const TQColor& defaultColor, TQWidget *parent=0L );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the color from the pixel at point p on the screen.
|
|
|
|
*/
|
|
|
|
static TQColor grabColor(const TQPoint &p);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Call this to make the dialog show a "Default Color" checkbox.
|
|
|
|
* If this checkbox is selected, the dialog will return an "invalid" color (TQColor()).
|
|
|
|
* 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 TQColor& defaultCol );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the value passed to setDefaultColor
|
|
|
|
*/
|
|
|
|
TQColor defaultColor() const;
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Preselects a color.
|
|
|
|
*/
|
|
|
|
void setColor( const TQColor &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 TQColor &col );
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void slotRGBChanged( void );
|
|
|
|
void slotHSVChanged( void );
|
|
|
|
void slotHtmlChanged( void );
|
|
|
|
void slotHSChanged( int, int );
|
|
|
|
void slotVChanged( int );
|
|
|
|
void slotColorSelected( const TQColor &col );
|
|
|
|
void slotColorSelected( const TQColor &col, const TQString &name );
|
|
|
|
void slotColorDoubleClicked( const TQColor &col, const TQString &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 TQString &name=TQString::null );
|
|
|
|
void showColor( const KColor &color, const TQString &name );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void mouseReleaseEvent( TQMouseEvent * );
|
|
|
|
virtual void keyPressEvent( TQKeyEvent * );
|
|
|
|
virtual bool eventFilter( TQObject *obj, TQEvent *ev );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
class KColorDialogPrivate;
|
|
|
|
KColorDialogPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // !Q_WS_QWS
|
|
|
|
#endif // KDELIBS_KCOLORDIALOG_H
|
|
|
|
|