|
|
|
/* This file is part of the KDE libraries
|
|
|
|
Copyright (C) 1999 Daniel M. Duley <mosfet@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 version 2 as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
#ifndef __KDUALCOLORBTN_H
|
|
|
|
#define __KDUALCOLORBTN_H
|
|
|
|
|
|
|
|
class TQBitmap;
|
|
|
|
#include <tqbrush.h>
|
|
|
|
#include <tqwidget.h>
|
|
|
|
|
|
|
|
#include <kdelibs_export.h>
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @short A widget for selecting two related colors.
|
|
|
|
*
|
|
|
|
* KDualColorButton allows the user to select two cascaded colors (usually a
|
|
|
|
* foreground and background color). Other features include drag and drop
|
|
|
|
* from other KDE color widgets, a reset to black and white control, and a
|
|
|
|
* swap colors control.
|
|
|
|
*
|
|
|
|
* When the user clicks on the foreground or background rectangle the
|
|
|
|
* rectangle is first sunken and the currentChanged() signal is emitted.
|
|
|
|
* Further clicks will present a color dialog and emit either the fgChanged()
|
|
|
|
* or bgChanged() if a new color is selected.
|
|
|
|
*
|
|
|
|
* Note: With drag and drop when dropping a color the current selected color
|
|
|
|
* will be set, while when dragging a color it will use whatever color
|
|
|
|
* rectangle the mouse was pressed inside.
|
|
|
|
*
|
|
|
|
* \image html kdualcolorbutton.png "KDE Dual Color Button"
|
|
|
|
*
|
|
|
|
* @author Daniel M. Duley <mosfet@kde.org>
|
|
|
|
*/
|
|
|
|
class KDEUI_EXPORT KDualColorButton : public QWidget
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_ENUMS( DualColor )
|
|
|
|
Q_PROPERTY( TQColor foreground READ foreground WRITE setForeground )
|
|
|
|
Q_PROPERTY( TQColor background READ background WRITE setBackground )
|
|
|
|
Q_PROPERTY( TQColor currentColor READ currentColor WRITE setCurrentColor STORED false DESIGNABLE false )
|
|
|
|
Q_PROPERTY( DualColor current READ current WRITE setCurrent )
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
enum DualColor { Foreground, Background };
|
|
|
|
/**
|
|
|
|
* Constructs a new KDualColorButton using the default black and white
|
|
|
|
* colors.
|
|
|
|
*
|
|
|
|
* As of KDE 3.5.1, sets the dialog parent to the same as "parent" if that
|
|
|
|
* argument is non-null and the dialogParent argument is null.
|
|
|
|
*/
|
|
|
|
KDualColorButton(TQWidget *parent=0, const char *name=0, TQWidget* dialogParent=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructs a new KDualColorButton with the supplied foreground and
|
|
|
|
* background colors.
|
|
|
|
*/
|
|
|
|
KDualColorButton(const TQColor &fgColor, const TQColor &bgColor,
|
|
|
|
TQWidget *parent=0, const char *name=0, TQWidget* dialogParent=0);
|
|
|
|
|
|
|
|
~KDualColorButton();
|
|
|
|
/**
|
|
|
|
* Returns the current foreground color.
|
|
|
|
*/
|
|
|
|
TQColor foreground() const;
|
|
|
|
/**
|
|
|
|
* Returns the current background color.
|
|
|
|
*/
|
|
|
|
TQColor background() const;
|
|
|
|
/**
|
|
|
|
* Returns the current color item selected by the user.
|
|
|
|
*/
|
|
|
|
DualColor current() const;
|
|
|
|
/**
|
|
|
|
* Returns the color of the selected item.
|
|
|
|
*/
|
|
|
|
TQColor currentColor() const;
|
|
|
|
/**
|
|
|
|
* Returns the minimum size needed to display the widget and all its
|
|
|
|
* controls.
|
|
|
|
*/
|
|
|
|
virtual TQSize tqsizeHint() const;
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Sets the foreground color.
|
|
|
|
*/
|
|
|
|
void setForeground(const TQColor &c);
|
|
|
|
/**
|
|
|
|
* Sets the background color.
|
|
|
|
*/
|
|
|
|
void setBackground(const TQColor &c);
|
|
|
|
/**
|
|
|
|
* Sets the current selected color item.
|
|
|
|
*/
|
|
|
|
void setCurrent(DualColor s);
|
|
|
|
/**
|
|
|
|
* Sets the color of the selected item.
|
|
|
|
*/
|
|
|
|
void setCurrentColor(const TQColor &c);
|
|
|
|
signals:
|
|
|
|
/**
|
|
|
|
* Emitted when the foreground color is changed.
|
|
|
|
*/
|
|
|
|
void fgChanged(const TQColor &c);
|
|
|
|
/**
|
|
|
|
* Emitted when the background color is changed.
|
|
|
|
*/
|
|
|
|
void bgChanged(const TQColor &c);
|
|
|
|
/**
|
|
|
|
* Emitted when the user changes the current color selection.
|
|
|
|
*/
|
|
|
|
void currentChanged(KDualColorButton::DualColor s);
|
|
|
|
protected:
|
|
|
|
/**
|
|
|
|
* Sets the supplied rectangles to the proper size and position for the
|
|
|
|
* current widget size. You can reimplement this to change the tqlayout
|
|
|
|
* of the widget. Restrictions are that the swap control will always
|
|
|
|
* be at the top right, the reset control will always be at the bottom
|
|
|
|
* left, and you must leave at least a 14x14 space in those corners.
|
|
|
|
*/
|
|
|
|
virtual void metrics(TQRect &fgRect, TQRect &bgRect);
|
|
|
|
virtual void paintEvent(TQPaintEvent *ev);
|
|
|
|
virtual void mousePressEvent(TQMouseEvent *ev);
|
|
|
|
virtual void mouseMoveEvent(TQMouseEvent *ev);
|
|
|
|
virtual void mouseReleaseEvent(TQMouseEvent *ev);
|
|
|
|
// Dnd
|
|
|
|
virtual void dragEnterEvent(TQDragEnterEvent *ev);
|
|
|
|
virtual void dropEvent(TQDropEvent *ev);
|
|
|
|
private:
|
|
|
|
TQBitmap *arrowBitmap;
|
|
|
|
TQPixmap *resetPixmap;
|
|
|
|
TQBrush fg, bg;
|
|
|
|
TQPoint mPos;
|
|
|
|
bool dragFlag, miniCtlFlag;
|
|
|
|
DualColor curColor, tmpColor;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void virtual_hook( int id, void* data );
|
|
|
|
private:
|
|
|
|
class KDualColorPrivate;
|
|
|
|
KDualColorPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|