ko_gray_widget.cpp
1/*
2 * Copyright (c) 1999 Matthias Elter (me@kde.org)
3 * Copyright (c) 2001-2002 Igor Jansen (rm@kde.org)
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18*/
19
20#include "ko_gray_widget.h"
21
22#include <tqlayout.h>
23#include <tqhbox.h>
24#include <tqlabel.h>
25#include <tqspinbox.h>
26#include <tqcolor.h>
27
28#include <kdebug.h>
29
30#include <koFrameButton.h>
31#include <koColorSlider.h>
32#include <kcolordialog.h>
33
34KoGrayWidget::KoGrayWidget(TQWidget *parent, const char *name) : super(parent, name)
35{
36 m_ColorButton = new KDualColorButton(this);
37 TQ_CHECK_PTR(m_ColorButton);
38
39 m_ColorButton -> setFixedSize(m_ColorButton->sizeHint());
40 TQGridLayout *mGrid = new TQGridLayout(this, 3, 5, 5, 2);
41
42 /* setup color sliders */
43 mSlider = new KoColorSlider(this);
44 mSlider->setFocusPolicy( TQWidget::ClickFocus );
45 mSlider->setMaximumHeight(20);
46 mSlider->slotSetRange(0, 255);
47 mSlider->slotSetColor1(TQColor(255, 255, 255));
48 mSlider->slotSetColor2(TQColor(0, 0, 0));
49
50 /* setup slider labels */
51 mLabel = new TQLabel("K:", this);
52 mLabel->setFixedWidth(12);
53 mLabel->setFixedHeight(20);
54
55 /* setup spin box */
56 mIn = new TQSpinBox(0, 255, 1, this);
57 mIn->setFixedWidth(50);
58 mIn->setFixedHeight(20);
59 mIn->setFocusPolicy( TQWidget::ClickFocus );
60
61 mGrid->addMultiCellWidget(m_ColorButton, 0, 3, 0, 0, TQt::AlignTop);
62 mGrid->addWidget(mLabel, 0, 1);
63 mGrid->addMultiCellWidget(mSlider, 0, 0, 2, 3);
64 mGrid->addWidget(mIn, 0, 4);
65
66 connect(m_ColorButton, TQ_SIGNAL(fgChanged(const TQColor &)), this, TQ_SLOT(slotFGColorSelected(const TQColor &)));
67 connect(m_ColorButton, TQ_SIGNAL(bgChanged(const TQColor &)), this, TQ_SLOT(slotBGColorSelected(const TQColor &)));
68
69 /* connect color slider */
70 connect(mSlider, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(slotChanged(int)));
71
72 /* connect spin box */
73 connect(mIn, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(slotChanged(int)));
74}
75
76void KoGrayWidget::slotChanged(int v)
77{
78 v = 255 - v;
79
80 if (m_ColorButton->current() == KDualColorButton::Foreground){
81 slotFGColorSelected( TQColor( v, v, v));
82 }
83 else{
84 slotBGColorSelected( TQColor( v, v, v));
85 }
86}
87
88void KoGrayWidget::setFgColor(const TQColor & c)
89{
90 blockSignals(true);
91 slotFGColorSelected(c);
92 blockSignals(false);
93}
94
95void KoGrayWidget::setBgColor(const TQColor & c)
96{
97 blockSignals(true);
98 slotBGColorSelected(c);
99 blockSignals(false);
100}
101
102void KoGrayWidget::update(const TQColor & fgColor, const TQColor & bgColor)
103{
104
105 m_fgColor = fgColor;
106 m_bgColor = bgColor;
107
108 TQColor color = (m_ColorButton->current() == KDualColorButton::Foreground)? m_fgColor : m_bgColor;
109
110 disconnect(mSlider, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(slotChanged(int)));
111 disconnect(mIn, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(slotChanged(int)));
112
113 mIn->blockSignals(true);
114 mSlider->blockSignals(true);
115 double v = color.red() + color.green() + color.blue();
116 v /= 3.0;
117 v = 255.0 - v;
118 mIn->setValue(static_cast<int>(v));
119 mSlider->slotSetValue(static_cast<int>(v));
120 mIn->blockSignals(false);
121 mSlider->blockSignals(false);
122
123 connect(mSlider, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(slotChanged(int)));
124 connect(mIn, TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(slotChanged(int)));
125}
126
127void KoGrayWidget::slotFGColorSelected(const TQColor& c)
128{
129 m_fgColor = c;
130
131 disconnect(m_ColorButton, TQ_SIGNAL(fgChanged(const TQColor &)), this, TQ_SLOT(slotFGColorSelected(const TQColor &)));
132 m_ColorButton->setForeground( m_fgColor );
133 connect(m_ColorButton, TQ_SIGNAL(fgChanged(const TQColor &)), this, TQ_SLOT(slotFGColorSelected(const TQColor &)));
134
135 emit sigFgColorChanged(m_fgColor);
136}
137
138void KoGrayWidget::slotBGColorSelected(const TQColor& c)
139{
140 m_bgColor = c;
141
142 disconnect(m_ColorButton, TQ_SIGNAL(bgChanged(const TQColor &)), this, TQ_SLOT(slotBGColorSelected(const TQColor &)));
143 m_ColorButton->setBackground( m_bgColor );
144 connect(m_ColorButton, TQ_SIGNAL(bgChanged(const TQColor &)), this, TQ_SLOT(slotBGColorSelected(const TQColor &)));
145
146 emit sigBgColorChanged(m_bgColor);
147}
148
149void KoGrayWidget::currentChanged(KDualColorButton::DualColor s)
150{
151 if(s == KDualColorButton::Foreground)
152 slotFGColorSelected(m_ColorButton->currentColor());
153 else
154 slotBGColorSelected(m_ColorButton->currentColor());
155}
156
157#include "ko_gray_widget.moc"
const char * name(StdAction id)