• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeui
 

tdeui

  • tdeui
kdualcolorbutton.cpp
1/* This file is part of the KDE libraries
2 Copyright (C) 1999 Daniel M. Duley <mosfet@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17*/
18
19#include "kdualcolorbutton.h"
20#include "kcolordialog.h"
21#include "kcolordrag.h"
22#include "dcolorarrow.xbm"
23#include "dcolorreset.xpm"
24#include <tdeglobalsettings.h>
25#include <tqpainter.h>
26#include <tqbitmap.h>
27#include <tqdrawutil.h>
28
29class KDualColorButton::KDualColorPrivate
30{
31public:
32 TQWidget* dialogParent;
33};
34
35KDualColorButton::KDualColorButton(TQWidget *parent, const char *name, TQWidget* dialogParent)
36 : TQWidget(parent, name),
37 d (new KDualColorPrivate)
38{
39 if (!dialogParent && parent) {
40 d->dialogParent = parent;
41 } else {
42 d->dialogParent = dialogParent;
43 }
44
45 arrowBitmap = new TQBitmap(dcolorarrow_width, dcolorarrow_height,
46 (const unsigned char *)dcolorarrow_bits, true);
47 arrowBitmap->setMask(*arrowBitmap); // heh
48 resetPixmap = new TQPixmap((const char **)dcolorreset_xpm);
49 fg = TQBrush(TQt::black, TQt::SolidPattern);
50 bg = TQBrush(TQt::white, TQt::SolidPattern);
51 curColor = Foreground;
52 dragFlag = false;
53 miniCtlFlag = false;
54 if(sizeHint().isValid())
55 setMinimumSize(sizeHint());
56 setAcceptDrops(true);
57}
58
59KDualColorButton::KDualColorButton(const TQColor &fgColor, const TQColor &bgColor,
60 TQWidget *parent, const char *name, TQWidget* dialogParent)
61 : TQWidget(parent, name),
62 d (new KDualColorPrivate)
63{
64 d->dialogParent = dialogParent;
65
66 arrowBitmap = new TQBitmap(dcolorarrow_width, dcolorarrow_height,
67 (const unsigned char *)dcolorarrow_bits, true);
68 arrowBitmap->setMask(*arrowBitmap);
69 resetPixmap = new TQPixmap((const char **)dcolorreset_xpm);
70 fg = TQBrush(fgColor, TQt::SolidPattern);
71 bg = TQBrush(bgColor, TQt::SolidPattern);
72 curColor = Foreground;
73 dragFlag = false;
74 miniCtlFlag = false;
75 if(sizeHint().isValid())
76 setMinimumSize(sizeHint());
77 setAcceptDrops(true);
78}
79
80KDualColorButton::~KDualColorButton()
81{
82 delete d;
83 delete arrowBitmap;
84 delete resetPixmap;
85}
86
87TQColor KDualColorButton::foreground() const
88{
89 return fg.color();
90}
91
92TQColor KDualColorButton::background() const
93{
94 return bg.color();
95}
96
97KDualColorButton::DualColor KDualColorButton::current() const
98{
99 return curColor;
100}
101
102TQColor KDualColorButton::currentColor() const
103{
104 return (curColor == Background ? bg.color() : fg.color());
105}
106
107TQSize KDualColorButton::sizeHint() const
108{
109 return TQSize(34, 34);
110}
111
112void KDualColorButton::setForeground(const TQColor &c)
113{
114 fg = TQBrush(c, TQt::SolidPattern);
115 repaint(false);
116
117 emit fgChanged(fg.color());
118}
119
120void KDualColorButton::setBackground(const TQColor &c)
121{
122 bg = TQBrush(c, TQt::SolidPattern);
123 repaint(false);
124
125 emit bgChanged(bg.color());
126}
127
128void KDualColorButton::setCurrentColor(const TQColor &c)
129{
130 if(curColor == Background)
131 bg = TQBrush(c, TQt::SolidPattern);
132 else
133 fg = TQBrush(c, TQt::SolidPattern);
134 repaint(false);
135}
136
137void KDualColorButton::setCurrent(DualColor s)
138{
139 curColor = s;
140 repaint(false);
141}
142
143void KDualColorButton::metrics(TQRect &fgRect, TQRect &bgRect)
144{
145 fgRect = TQRect(0, 0, width()-14, height()-14);
146 bgRect = TQRect(14, 14, width()-14, height()-14);
147}
148
149void KDualColorButton::paintEvent(TQPaintEvent *)
150{
151 TQRect fgRect, bgRect;
152 TQPainter p(this);
153
154 metrics(fgRect, bgRect);
155 TQBrush defBrush = colorGroup().brush(TQColorGroup::Button);
156
157 qDrawShadeRect(&p, bgRect, colorGroup(), curColor == Background, 2, 0,
158 isEnabled() ? &bg : &defBrush);
159 qDrawShadeRect(&p, fgRect, colorGroup(), curColor == Foreground, 2, 0,
160 isEnabled() ? &fg : &defBrush);
161 p.setPen(colorGroup().shadow());
162 p.drawPixmap(fgRect.right()+2, 0, *arrowBitmap);
163 p.drawPixmap(0, fgRect.bottom()+2, *resetPixmap);
164
165}
166
167void KDualColorButton::dragEnterEvent(TQDragEnterEvent *ev)
168{
169 ev->accept(isEnabled() && KColorDrag::canDecode(ev));
170}
171
172void KDualColorButton::dropEvent(TQDropEvent *ev)
173{
174 TQColor c;
175 if(KColorDrag::decode(ev, c)){
176 if(curColor == Foreground){
177 fg.setColor(c);
178 emit fgChanged(c);
179 }
180 else{
181 bg.setColor(c);
182 emit(bgChanged(c));
183 }
184 repaint(false);
185 }
186}
187
188void KDualColorButton::mousePressEvent(TQMouseEvent *ev)
189{
190 TQRect fgRect, bgRect;
191 metrics(fgRect, bgRect);
192 mPos = ev->pos();
193 tmpColor = curColor;
194 dragFlag = false;
195 if(fgRect.contains(mPos)){
196 curColor = Foreground;
197 miniCtlFlag = false;
198 }
199 else if(bgRect.contains(mPos)){
200 curColor = Background;
201 miniCtlFlag = false;
202 }
203 else if(ev->pos().x() > fgRect.width()){
204 // We handle the swap and reset controls as soon as the mouse is
205 // is pressed and ignore further events on this click (mosfet).
206 TQBrush c = fg;
207 fg = bg;
208 bg = c;
209 emit fgChanged(fg.color());
210 emit bgChanged(bg.color());
211 miniCtlFlag = true;
212 }
213 else if(ev->pos().x() < bgRect.x()){
214 fg.setColor(TQt::black);
215 bg.setColor(TQt::white);
216 emit fgChanged(fg.color());
217 emit bgChanged(bg.color());
218 miniCtlFlag = true;
219 }
220 repaint(false);
221}
222
223
224void KDualColorButton::mouseMoveEvent(TQMouseEvent *ev)
225{
226 if(!miniCtlFlag){
227 int delay = TDEGlobalSettings::dndEventDelay();
228 if(ev->x() >= mPos.x()+delay || ev->x() <= mPos.x()-delay ||
229 ev->y() >= mPos.y()+delay || ev->y() <= mPos.y()-delay) {
230 KColorDrag *d = new KColorDrag( curColor == Foreground ?
231 fg.color() : bg.color(),
232 this);
233 d->dragCopy();
234 dragFlag = true;
235 }
236 }
237}
238
239void KDualColorButton::mouseReleaseEvent(TQMouseEvent *ev)
240{
241 if(!miniCtlFlag){
242 TQRect fgRect, bgRect;
243
244 metrics(fgRect, bgRect);
245 if(dragFlag)
246 curColor = tmpColor;
247 else if(fgRect.contains(ev->pos()) && curColor == Foreground){
248 if(tmpColor == Background){
249 curColor = Foreground;
250 emit currentChanged(Foreground);
251 }
252 else{
253 TQColor newColor = fg.color();
254 if(KColorDialog::getColor(newColor, d->dialogParent) != TQDialog::Rejected){
255 fg.setColor(newColor);
256 emit fgChanged(newColor);
257 }
258 }
259 }
260 else if(bgRect.contains(ev->pos()) && curColor == Background){
261 if(tmpColor == Foreground){
262 curColor = Background;
263 emit currentChanged(Background);
264 }
265 else{
266 TQColor newColor = bg.color();
267 if(KColorDialog::getColor(newColor, d->dialogParent) != TQDialog::Rejected){
268 bg.setColor(newColor);
269 emit bgChanged(newColor);
270 }
271 }
272 }
273 repaint(false);
274 dragFlag = false;
275 }
276 else
277 miniCtlFlag = false;
278}
279
280void KDualColorButton::virtual_hook( int, void* )
281{ /*BASE::virtual_hook( id, data );*/ }
282
283#include "kdualcolorbutton.moc"
KColorDialog::getColor
static int getColor(TQColor &theColor, TQWidget *parent=0L)
Creates a modal color dialog, let the user choose a color, and returns when the dialog is closed.
Definition: kcolordialog.cpp:1298
KColorDrag
A drag-and-drop object for colors.
Definition: kcolordrag.h:36
KColorDrag::decode
static bool decode(TQMimeSource *e, TQColor &col)
Decodes the MIME source e and puts the resulting color into col.
Definition: kcolordrag.cpp:89
KColorDrag::canDecode
static bool canDecode(TQMimeSource *e)
Returns true if the MIME source e contains a color object.
Definition: kcolordrag.cpp:76
KDualColorButton::setCurrent
void setCurrent(DualColor s)
Sets the current selected color item.
Definition: kdualcolorbutton.cpp:137
KDualColorButton::background
TQColor background() const
Returns the current background color.
Definition: kdualcolorbutton.cpp:92
KDualColorButton::setForeground
void setForeground(const TQColor &c)
Sets the foreground color.
Definition: kdualcolorbutton.cpp:112
KDualColorButton::currentChanged
void currentChanged(KDualColorButton::DualColor s)
Emitted when the user changes the current color selection.
KDualColorButton::setCurrentColor
void setCurrentColor(const TQColor &c)
Sets the color of the selected item.
Definition: kdualcolorbutton.cpp:128
KDualColorButton::sizeHint
virtual TQSize sizeHint() const
Returns the minimum size needed to display the widget and all its controls.
Definition: kdualcolorbutton.cpp:107
KDualColorButton::fgChanged
void fgChanged(const TQColor &c)
Emitted when the foreground color is changed.
KDualColorButton::foreground
TQColor foreground() const
Returns the current foreground color.
Definition: kdualcolorbutton.cpp:87
KDualColorButton::current
DualColor current() const
Returns the current color item selected by the user.
Definition: kdualcolorbutton.cpp:97
KDualColorButton::KDualColorButton
KDualColorButton(TQWidget *parent=0, const char *name=0, TQWidget *dialogParent=0)
Constructs a new KDualColorButton using the default black and white colors.
Definition: kdualcolorbutton.cpp:35
KDualColorButton::metrics
virtual void metrics(TQRect &fgRect, TQRect &bgRect)
Sets the supplied rectangles to the proper size and position for the current widget size.
Definition: kdualcolorbutton.cpp:143
KDualColorButton::setBackground
void setBackground(const TQColor &c)
Sets the background color.
Definition: kdualcolorbutton.cpp:120
KDualColorButton::currentColor
TQColor currentColor() const
Returns the color of the selected item.
Definition: kdualcolorbutton.cpp:102
KDualColorButton::bgChanged
void bgChanged(const TQColor &c)
Emitted when the background color is changed.
TDEGlobalSettings::dndEventDelay
static int dndEventDelay()

tdeui

Skip menu "tdeui"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdeui

Skip menu "tdeui"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeui by doxygen 1.9.4
This website is maintained by Timothy Pearson.