• 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 
29 class KDualColorButton::KDualColorPrivate
30 {
31 public:
32  TQWidget* dialogParent;
33 };
34 
35 KDualColorButton::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 
59 KDualColorButton::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 
80 KDualColorButton::~KDualColorButton()
81 {
82  delete d;
83  delete arrowBitmap;
84  delete resetPixmap;
85 }
86 
87 TQColor KDualColorButton::foreground() const
88 {
89  return fg.color();
90 }
91 
92 TQColor KDualColorButton::background() const
93 {
94  return bg.color();
95 }
96 
97 KDualColorButton::DualColor KDualColorButton::current() const
98 {
99  return curColor;
100 }
101 
102 TQColor KDualColorButton::currentColor() const
103 {
104  return (curColor == Background ? bg.color() : fg.color());
105 }
106 
107 TQSize KDualColorButton::sizeHint() const
108 {
109  return TQSize(34, 34);
110 }
111 
112 void KDualColorButton::setForeground(const TQColor &c)
113 {
114  fg = TQBrush(c, TQt::SolidPattern);
115  repaint(false);
116 
117  emit fgChanged(fg.color());
118 }
119 
120 void KDualColorButton::setBackground(const TQColor &c)
121 {
122  bg = TQBrush(c, TQt::SolidPattern);
123  repaint(false);
124 
125  emit bgChanged(bg.color());
126 }
127 
128 void 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 
137 void KDualColorButton::setCurrent(DualColor s)
138 {
139  curColor = s;
140  repaint(false);
141 }
142 
143 void 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 
149 void 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 
167 void KDualColorButton::dragEnterEvent(TQDragEnterEvent *ev)
168 {
169  ev->accept(isEnabled() && KColorDrag::canDecode(ev));
170 }
171 
172 void 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 
188 void 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 
224 void 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 
239 void 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 
280 void 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.1
This website is maintained by Timothy Pearson.