21#include <tqhbuttongroup.h>
24#include <tqpushbutton.h>
28#include <kiconloader.h>
30#include <KoMainWindow.h>
32#include "KoUnitWidgets.h"
34#include "karbon_part.h"
35#include "karbon_view.h"
37#include "vselection.h"
38#include "vstrokecmd.h"
40#include "vstrokedocker.h"
42VStrokeDocker::VStrokeDocker(
KarbonPart* part, KarbonView* parent,
const char* )
43 : TQWidget(), m_part ( part ), m_view( parent )
45 setCaption( i18n(
"Stroke Properties" ) );
49 TQGridLayout *mainLayout =
new TQGridLayout(
this, 4, 2 );
51 TQLabel* widthLabel =
new TQLabel( i18n (
"stroke width",
"Width:" ),
this );
52 mainLayout->addWidget( widthLabel, 0, 0 );
54 m_setLineWidth =
new KoUnitDoubleSpinBox(
this, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 2 );
55 m_setLineWidth->setUnit( part->unit() );
56 TQToolTip::add( m_setLineWidth, i18n(
"Set line width of actual selection" ) );
57 mainLayout->addWidget ( m_setLineWidth, 0, 1 );
58 connect( m_setLineWidth, TQ_SIGNAL( valueChanged(
double ) ),
this, TQ_SLOT( widthChanged() ) );
60 TQLabel* capLabel =
new TQLabel( i18n (
"Cap:" ),
this );
61 mainLayout->addWidget( capLabel, 1, 0 );
62 m_capGroup =
new TQHButtonGroup(
this );
63 m_capGroup->setFrameShape( TQFrame::NoFrame );
64 m_capGroup->setInsideMargin( 1 );
65 m_capGroup->setExclusive(
true );
66 button =
new TQPushButton(
"", m_capGroup );
67 button->setPixmap( SmallIcon(
"cap_butt" ) );
68 button->setToggleButton(
true );
69 TQToolTip::add( button, i18n(
"Butt cap" ) );
70 m_capGroup->insert( button );
71 button =
new TQPushButton(
"", m_capGroup );
72 button->setPixmap( SmallIcon(
"cap_round" ) );
73 button->setToggleButton(
true );
74 TQToolTip::add( button, i18n(
"Round cap" ) );
75 m_capGroup->insert( button );
76 button =
new TQPushButton(
"", m_capGroup );
77 button->setPixmap( SmallIcon(
"cap_square" ) );
78 button->setToggleButton(
true );
79 TQToolTip::add( button, i18n(
"Square cap" ) );
80 m_capGroup->insert( button );
81 mainLayout->addWidget( m_capGroup, 1, 1 );
82 connect( m_capGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotCapChanged(
int ) ) );
84 TQLabel* joinLabel =
new TQLabel( i18n (
"Join:" ),
this );
85 mainLayout->addWidget( joinLabel, 2, 0 );
87 m_joinGroup =
new TQHButtonGroup(
this );
88 m_joinGroup->setFrameShape( TQFrame::NoFrame );
89 m_joinGroup->setInsideMargin( 1 );
90 m_joinGroup->setExclusive(
true );
91 button =
new TQPushButton(
"", m_joinGroup );
92 button->setPixmap( SmallIcon(
"join_miter" ) );
93 button->setToggleButton(
true );
94 TQToolTip::add( button, i18n(
"Miter join" ) );
95 m_joinGroup->insert( button );
96 button =
new TQPushButton(
"", m_joinGroup );
97 button->setPixmap( SmallIcon(
"join_round" ) );
98 button->setToggleButton(
true );
99 TQToolTip::add( button, i18n(
"Round join" ) );
100 m_joinGroup->insert( button );
101 button =
new TQPushButton(
"", m_joinGroup );
102 button->setPixmap( SmallIcon(
"join_bevel" ) );
103 button->setToggleButton(
true );
104 TQToolTip::add( button, i18n(
"Bevel join" ) );
105 m_joinGroup->insert( button );
106 mainLayout->addWidget( m_joinGroup, 2, 1 );
107 connect( m_joinGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotJoinChanged(
int ) ) );
109 mainLayout->setRowStretch( 3, 1 );
110 mainLayout->setColStretch( 1, 1 );
111 mainLayout->activate();
116void VStrokeDocker::updateCanvas()
118 if( m_part && m_part->document().selection()->objects().count() > 0 )
119 m_part->addCommand(
new VStrokeCmd( &m_part->document(), &m_stroke ),
true );
122void VStrokeDocker::slotCapChanged(
int ID )
127 m_stroke.setLineCap( VStroke::capRound );
break;
129 m_stroke.setLineCap( VStroke::capSquare );
break;
131 m_stroke.setLineCap( VStroke::capButt );
136void VStrokeDocker::slotJoinChanged(
int ID )
141 m_stroke.setLineJoin( VStroke::joinRound );
break;
143 m_stroke.setLineJoin( VStroke::joinBevel );
break;
145 m_stroke.setLineJoin( VStroke::joinMiter );
150void VStrokeDocker::updateDocker()
152 disconnect( m_setLineWidth, TQ_SIGNAL( valueChanged(
double ) ),
this, TQ_SLOT( widthChanged() ) );
153 disconnect( m_capGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotCapChanged(
int ) ) );
154 disconnect( m_joinGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotJoinChanged(
int ) ) );
156 switch( m_stroke.lineCap() )
158 case VStroke::capRound:
159 m_capGroup->setButton( 1 );
break;
160 case VStroke::capSquare:
161 m_capGroup->setButton( 2 );
break;
163 m_capGroup->setButton( 0 );
166 switch( m_stroke.lineJoin() )
168 case VStroke::joinRound:
169 m_joinGroup->setButton( 1 );
break;
170 case VStroke::joinBevel:
171 m_joinGroup->setButton( 2 );
break;
173 m_joinGroup->setButton( 0 );
176 m_setLineWidth->changeValue( m_stroke.lineWidth() );
178 connect( m_setLineWidth, TQ_SIGNAL( valueChanged(
double ) ),
this, TQ_SLOT( widthChanged() ) );
179 connect( m_capGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotCapChanged(
int ) ) );
180 connect( m_joinGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotJoinChanged(
int ) ) );
183void VStrokeDocker::widthChanged()
185 m_stroke.setLineWidth( m_setLineWidth->value() );
189void VStrokeDocker::setStroke(
const VStroke &stroke )
194 m_stroke = VStroke();
198void VStrokeDocker::setUnit( KoUnit::Unit unit )
200 disconnect( m_setLineWidth, TQ_SIGNAL( valueChanged(
double ) ),
this, TQ_SLOT( widthChanged() ) );
201 disconnect( m_capGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotCapChanged(
int ) ) );
202 disconnect( m_joinGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotJoinChanged(
int ) ) );
204 m_setLineWidth->setUnit( unit );
206 connect( m_setLineWidth, TQ_SIGNAL( valueChanged(
double ) ),
this, TQ_SLOT( widthChanged() ) );
207 connect( m_capGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotCapChanged(
int ) ) );
208 connect( m_joinGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotJoinChanged(
int ) ) );
210#include "vstrokedocker.moc"
Keeps track of visual per document properties.
Manages stroke properties.