21#include "straight_connector.h"
23#include "kivio_common.h"
24#include "kivio_connector_target.h"
25#include "kivio_layer.h"
26#include "kivio_line_style.h"
27#include "kivio_page.h"
28#include "kivio_painter.h"
29#include "kivio_stencil.h"
30#include "kivio_stencil_spawner.h"
31#include "kivio_stencil_spawner_info.h"
32#include "kivio_stencil_spawner_set.h"
33#include "kivio_text_style.h"
39#include <KoZoomHandler.h>
41#include "straight_connector.xpm"
44static TQPixmap *pIcon = NULL;
46static KivioStencilSpawnerInfo sinfo = KivioStencilSpawnerInfo(
"Dave Marotti",
"Straight Connector",
"Dave Marotti - Straight Connector",
"Basic Straight Connector",
"0.1",
"http://localhost/",
"",
"off");
48#include <kgenericfactory.h>
49K_EXPORT_COMPONENT_FACTORY( straight_connector, KGenericFactory<KivioConnectorFactory>(
"KivioConnectorFactory" ) )
51KivioConnectorFactory::KivioConnectorFactory(TQObject *parent, const
char* name, const TQStringList& args) :
52 KivioStencilFactory(parent, name, args)
54 kdDebug(43000) <<
"new straight line connector factory: " << endl;
57KivioStencil *KivioConnectorFactory::NewStencil()
59 return new KivioStraightConnector();
62KivioStencil *KivioConnectorFactory::NewStencil(
const TQString&)
64 return new KivioStraightConnector();
68TQPixmap *KivioConnectorFactory::GetIcon()
73 pIcon =
new TQPixmap( (
const char **)straight_connector_xpm );
77KivioStencilSpawnerInfo *KivioConnectorFactory::GetSpawnerInfo()
83KivioStraightConnector::KivioStraightConnector()
86 m_pStart->setPosition(0.0f, 0.0f,
false);
87 m_pEnd->setPosition(72.0f, 72.0f,
false);
89 m_startAH =
new KivioArrowHead();
90 m_endAH =
new KivioArrowHead();
94 m_pCanProtect->clearBit( kpAspect );
95 m_pCanProtect->clearBit( kpWidth );
96 m_pCanProtect->clearBit( kpHeight );
97 m_pCanProtect->clearBit( kpX );
98 m_pCanProtect->clearBit( kpY );
101 setType(kstConnector);
104KivioStraightConnector::~KivioStraightConnector()
110void KivioStraightConnector::setStartPoint(
double x,
double y )
112 m_pStart->setPosition( x, y,
false );
113 m_pStart->disconnect();
116void KivioStraightConnector::setEndPoint(
double x,
double y )
118 m_pEnd->setPosition( x, y,
false );
119 m_pEnd->disconnect();
123 m_pTextConn->setPosition( (m_pStart->x()+m_pEnd->x())/2.0f,
124 (m_pStart->y()+m_pEnd->y())/2.0f,
129KivioCollisionType KivioStraightConnector::checkForCollision( KoPoint *p,
double threshold )
131 const double end_thresh = 4.0f;
136 KivioConnectorPoint *pPoint;
138 int i = kctCustom + 1;
139 pPoint = m_pConnectorPoints->first();
142 if( px >= pPoint->x() - end_thresh &&
143 px <= pPoint->x() + end_thresh &&
144 py >= pPoint->y() - end_thresh &&
145 py <= pPoint->y() + end_thresh )
147 return (KivioCollisionType)i;
151 pPoint = m_pConnectorPoints->next();
155 if( collisionLine( m_pStart->x(), m_pStart->y(),
156 m_pEnd->x(), m_pEnd->y(),
166KivioStencil *KivioStraightConnector::duplicate()
168 KivioStraightConnector *pStencil =
new KivioStraightConnector();
170 copyBasicInto( pStencil );
173 pStencil->setStartAHType( m_startAH->type() );
174 pStencil->setStartAHWidth( m_startAH->width() );
175 pStencil->setStartAHLength( m_startAH->length() );
177 pStencil->setEndAHType( m_endAH->type() );
178 pStencil->setEndAHWidth( m_endAH->width() );
179 pStencil->setEndAHLength( m_endAH->length() );
181 *(pStencil->protection()) = *m_pProtection;
182 *(pStencil->canProtect()) = *m_pCanProtect;
187void KivioStraightConnector::paint( KivioIntraStencilData *pData )
189 KivioPainter *painter = pData->painter;
190 KoZoomHandler* zoomHandler = pData->zoomHandler;
191 double x1, y1, x2, y2;
196 painter->setLineStyle(m_pLineStyle);
197 double lineWidth = m_pLineStyle->width();
198 painter->setLineWidth(zoomHandler->zoomItY(lineWidth));
200 x1 = zoomHandler->zoomItX(m_pStart->x());
201 x2 = zoomHandler->zoomItX(m_pEnd->x());
203 y1 = zoomHandler->zoomItY(m_pStart->y());
204 y2 = zoomHandler->zoomItY(m_pEnd->y());
208 vecX = m_pEnd->x() - m_pStart->x();
209 vecY = m_pEnd->y() - m_pStart->y();
212 len = sqrt( vecX*vecX + vecY*vecY );
219 x1 += vecX * zoomHandler->zoomItX(m_startAH->cut());
220 y1 += vecY * zoomHandler->zoomItY(m_startAH->cut());
222 x2 -= vecX * zoomHandler->zoomItX(m_endAH->cut());
223 y2 -= vecY * zoomHandler->zoomItY(m_endAH->cut());
228 painter->drawLine( x1, y1, x2, y2 );
234 painter->setBGColor( m_pFillStyle->color() );
236 m_startAH->paint(painter, m_pStart->x(), m_pStart->y(), -vecX, -vecY, zoomHandler);
237 m_endAH->paint(painter, m_pEnd->x(), m_pEnd->y(), vecX, vecY, zoomHandler);
244void KivioStraightConnector::paintOutline( KivioIntraStencilData *pData )
246 KivioPainter *painter = pData->painter;
247 KoZoomHandler* zoomHandler = pData->zoomHandler;
248 double x1, y1, x2, y2;
253 painter->setLineStyle(m_pLineStyle);
254 double lineWidth = m_pLineStyle->width();
255 painter->setLineWidth(zoomHandler->zoomItY(lineWidth));
257 x1 = zoomHandler->zoomItX(m_pStart->x());
258 x2 = zoomHandler->zoomItX(m_pEnd->x());
260 y1 = zoomHandler->zoomItY(m_pStart->y());
261 y2 = zoomHandler->zoomItY(m_pEnd->y());
265 vecX = m_pEnd->x() - m_pStart->x();
266 vecY = m_pEnd->y() - m_pStart->y();
269 len = sqrt( vecX*vecX + vecY*vecY );
276 x1 += vecX * zoomHandler->zoomItX(m_startAH->cut());
277 y1 += vecY * zoomHandler->zoomItY(m_startAH->cut());
279 x2 -= vecX * zoomHandler->zoomItX(m_endAH->cut());
280 y2 -= vecY * zoomHandler->zoomItY(m_endAH->cut());
285 painter->drawLine( x1, y1, x2, y2 );
291 painter->setBGColor( m_pFillStyle->color() );
293 m_startAH->paint(painter, m_pStart->x(), m_pStart->y(), -vecX, -vecY, zoomHandler);
294 m_endAH->paint(painter, m_pEnd->x(), m_pEnd->y(), vecX, vecY, zoomHandler);
302bool KivioStraightConnector::saveCustom( TQDomElement &e, TQDomDocument &doc )
304 e.appendChild( saveArrowHeads(doc) );
309bool KivioStraightConnector::loadCustom(
const TQDomElement &e )
314 node = e.firstChild();
315 while( !node.isNull() )
317 name = node.nodeName();
318 if( name ==
"KivioArrowHeads" )
320 loadArrowHeads( node.toElement() );
323 node = node.nextSibling();
331TQDomElement KivioStraightConnector::saveArrowHeads( TQDomDocument &doc )
333 TQDomElement e = doc.createElement(
"KivioArrowHeads");
335 e.appendChild( m_startAH->saveXML(doc) );
336 e.appendChild( m_endAH->saveXML(doc) );
341bool KivioStraightConnector::loadArrowHeads(
const TQDomElement &e )
348 node = e.firstChild();
349 while( !node.isNull() )
351 nodeName = node.nodeName();
352 arrowE = node.toElement();
354 if( nodeName ==
"KivioArrowHead" )
358 m_startAH->loadXML(arrowE);
364 m_endAH->loadXML(arrowE);
368 node = node.nextSibling();
374bool KivioStraightConnector::hasTextBox()
const
379#include "straight_connector.moc"