23#include <tqtabwidget.h>
31#include <KoMainWindow.h>
33#include "karbon_part.h"
34#include "karbon_view.h"
35#include "karbon_factory.h"
36#include "karbon_resourceserver.h"
38#include "vcolorslider.h"
39#include "vselection.h"
41#include "vstrokecmd.h"
45#include "vcolordocker.h"
47#include <ko_hsv_widget.h>
48#include <ko_cmyk_widget.h>
49#include <ko_rgb_widget.h>
54VColorDocker::VColorDocker(
KarbonPart* part, KarbonView* parent,
const char* )
55 : TQWidget(), m_part ( part ), m_view( parent )
57 m_isStrokeDocker =
false;
58 setCaption( i18n(
"Color Chooser" ) );
65 mTabWidget =
new TQTabWidget(
this );
68 mHSVWidget =
new KoHSVWidget( mTabWidget );
69 connect( mHSVWidget, TQ_SIGNAL( sigFgColorChanged(
const TQColor &) ),
this, TQ_SLOT( updateFgColor(
const TQColor &) ) );
70 connect( mHSVWidget, TQ_SIGNAL( sigBgColorChanged(
const TQColor &) ),
this, TQ_SLOT( updateBgColor(
const TQColor &) ) );
71 connect(
this, TQ_SIGNAL(fgColorChanged(
const TQColor &)), mHSVWidget, TQ_SLOT(setFgColor(
const TQColor &)));
72 connect(
this, TQ_SIGNAL(bgColorChanged(
const TQColor &)), mHSVWidget, TQ_SLOT(setBgColor(
const TQColor &)));
73 connect( mHSVWidget, TQ_SIGNAL( sigModeChanged(KDualColorButton::DualColor) ),
this, TQ_SLOT( updateMode( KDualColorButton::DualColor ) ) );
74 mTabWidget->addTab( mHSVWidget, i18n(
"HSV" ) );
77 mRGBWidget =
new KoRGBWidget( mTabWidget );
78 connect( mRGBWidget, TQ_SIGNAL( sigFgColorChanged(
const TQColor &) ),
this, TQ_SLOT( updateFgColor(
const TQColor &) ) );
79 connect( mRGBWidget, TQ_SIGNAL( sigBgColorChanged(
const TQColor &) ),
this, TQ_SLOT( updateBgColor(
const TQColor &) ) );
80 connect(
this, TQ_SIGNAL(fgColorChanged(
const TQColor &)), mRGBWidget, TQ_SLOT(setFgColor(
const TQColor &)));
81 connect(
this, TQ_SIGNAL(bgColorChanged(
const TQColor &)), mRGBWidget, TQ_SLOT(setBgColor(
const TQColor &)));
82 connect( mRGBWidget, TQ_SIGNAL( sigModeChanged(KDualColorButton::DualColor) ),
this, TQ_SLOT( updateMode( KDualColorButton::DualColor ) ) );
83 mTabWidget->addTab( mRGBWidget, i18n(
"RGB" ) );
92 mOpacity =
new VColorSlider( i18n(
"Opacity:" ), TQColor(
"white" ), TQColor(
"black" ), 0, 100, 100,
this );
94 connect( mOpacity, TQ_SIGNAL( valueChanged (
int ) ),
this, TQ_SLOT( updateOpacity() ) );
95 TQToolTip::add( mOpacity, i18n(
"Alpha (opacity)" ) );
97 TQVBoxLayout *mainWidgetLayout =
new TQVBoxLayout(
this, 3 );
98 mainWidgetLayout->addWidget( mTabWidget );
99 mainWidgetLayout->addWidget( mOpacity );
100 mainWidgetLayout->activate();
101 setMaximumHeight( 174 );
102 setMinimumWidth( 194 );
106VColorDocker::~VColorDocker()
110void VColorDocker::updateFgColor(
const TQColor &c)
118 TQPtrList<VObject> VNewObjectList = m_part->document().selection()->objects();
119 if( ! VNewObjectList.count() )
122 mHSVWidget->blockSignals(
true);
123 mRGBWidget->blockSignals(
true);
127 const TQPtrList<VCommand>* commandList = history->
commands();
128 VStrokeCmd* command =
dynamic_cast<VStrokeCmd*
>(commandList->getLast());
130 if(command == 0 || m_strokeCmd == 0)
132 m_strokeCmd =
new VStrokeCmd( &m_part->document(), v );
133 m_part->addCommand( m_strokeCmd,
true );
137 TQPtrList<VObject> VOldObjectList = command->getSelection()->objects();
139 if( VOldObjectList == VNewObjectList )
141 m_strokeCmd->changeStroke(v);
142 m_part->repaintAllViews();
146 m_strokeCmd =
new VStrokeCmd( &m_part->document(), v );
147 m_part->addCommand( m_strokeCmd,
true );
151 emit fgColorChanged( c );
153 mHSVWidget->blockSignals(
false);
154 mRGBWidget->blockSignals(
false);
158void VColorDocker::updateBgColor(
const TQColor &c)
166 TQPtrList<VObject> VNewObjectList = m_part->document().selection()->objects();
167 if( ! VNewObjectList.count() )
170 mHSVWidget->blockSignals(
true);
171 mRGBWidget->blockSignals(
true);
175 const TQPtrList<VCommand>* commandList = history->
commands();
176 VFillCmd* command =
dynamic_cast<VFillCmd*
>(commandList->getLast());
178 if(command == 0 || m_fillCmd == 0)
180 m_fillCmd =
new VFillCmd( &m_part->document(),
VFill(v) );
181 m_part->addCommand( m_fillCmd,
true );
185 TQPtrList<VObject> VOldObjectList = command->getSelection()->objects();
187 if( VOldObjectList == VNewObjectList )
189 m_fillCmd->changeFill(
VFill(v));
190 m_part->repaintAllViews();
194 m_fillCmd =
new VFillCmd( &m_part->document(),
VFill(v) );
195 m_part->addCommand( m_fillCmd,
true );
199 emit bgColorChanged( c );
201 mHSVWidget->blockSignals(
false);
202 mRGBWidget->blockSignals(
false);
206void VColorDocker::updateOpacity()
208 m_opacity = mOpacity->value() / 100.0;
213 if ( isStrokeDocker() )
214 m_part->addCommand(
new VStrokeCmd( &m_part->document(), c ),
true );
216 m_part->addCommand(
new VFillCmd( &m_part->document(),
VFill( c ) ),
true );
220VColorDocker::mouseReleaseEvent( TQMouseEvent * )
225void VColorDocker::setFillDocker()
227 m_isStrokeDocker =
false;
228 mHSVWidget->setMode( KDualColorButton::Background );
229 mRGBWidget->setMode( KDualColorButton::Background );
233void VColorDocker::setStrokeDocker()
235 m_isStrokeDocker =
true;
236 mHSVWidget->setMode( KDualColorButton::Foreground );
237 mRGBWidget->setMode( KDualColorButton::Foreground );
241void VColorDocker::update()
243 mHSVWidget->blockSignals(
true);
244 mRGBWidget->blockSignals(
true);
247 int objCnt = m_part->document().selection()->objects().count();
254 TQColor bgColor = TQColor(obj->
fill() ? obj->
fill()->color() :
VColor() );
256 mHSVWidget->setFgColor(fgColor);
257 mRGBWidget->setFgColor(fgColor);
260 mHSVWidget->setBgColor(bgColor);
261 mRGBWidget->setBgColor(bgColor);
264 if( m_isStrokeDocker )
270 mHSVWidget->blockSignals(
false);
271 mRGBWidget->blockSignals(
false);
275void VColorDocker::updateMode( KDualColorButton::DualColor s )
277 m_isStrokeDocker = (s == KDualColorButton::Foreground);
279 emit modeChanged( s );
282#include "vcolordocker.moc"
Keeps track of visual per document properties.
This is the color slider widget that is used to select color or color components.
This class keeps track of color properties.
void setOpacity(float opacity)
Sets the color opacity.
Manages a set of commands.
const TQPtrList< VCommand > * commands() const
Read only access to the command history list.
VSelection * selection() const
Returns a pointer to the selection.
Manages the fill of shapes.
The base class for all karbon objects.
virtual VFill * fill() const
Gets the object's actual fill.
virtual VStroke * stroke() const
Gets the object's actual stroke.
VDocument * document() const
Return document the object belongs to.
const VObjectList & objects() const
Read only access to the selected objects.