1#include "kivio_base_target_stencil.h"
2#include "kivio_common.h"
3#include "kivio_connector_point.h"
4#include "kivio_connector_target.h"
5#include "kivio_fill_style.h"
6#include "kivio_intra_stencil_data.h"
7#include "kivio_line_style.h"
8#include "kivio_painter.h"
9#include "kivio_stencil_spawner.h"
10#include "kivio_stencil_spawner_info.h"
11#include "kivio_stencil_spawner_set.h"
12#include "kivio_text_style.h"
14#include <KoZoomHandler.h>
16KivioBaseTargetStencil::KivioBaseTargetStencil()
19 m_pFillStyle =
new KivioFillStyle();
20 m_pLineStyle =
new KivioLineStyle();
21 m_pTextStyle =
new KivioTextStyle();
23 m_pTargets =
new TQPtrList<KivioConnectorTarget>;
24 m_pTargets->setAutoDelete(
true);
27KivioBaseTargetStencil::~KivioBaseTargetStencil()
43TQColor KivioBaseTargetStencil::fgColor()
45 return m_pLineStyle->color();
48void KivioBaseTargetStencil::setFGColor( TQColor c )
50 m_pLineStyle->setColor(c);
53void KivioBaseTargetStencil::setLineWidth(
double l )
55 m_pLineStyle->setWidth(l);
58double KivioBaseTargetStencil::lineWidth()
60 return m_pLineStyle->width();
70void KivioBaseTargetStencil::setBGColor( TQColor c )
72 m_pFillStyle->setColor(c);
75TQColor KivioBaseTargetStencil::bgColor()
77 return m_pFillStyle->color();
80KivioFillStyle *KivioBaseTargetStencil::fillStyle()
95TQColor KivioBaseTargetStencil::textColor()
97 return m_pTextStyle->color();
99void KivioBaseTargetStencil::setTextColor( TQColor c )
101 m_pTextStyle->setColor(c);
104TQFont KivioBaseTargetStencil::textFont()
106 return m_pTextStyle->font();
108void KivioBaseTargetStencil::setTextFont(
const TQFont &f )
110 m_pTextStyle->setFont(f);
113int KivioBaseTargetStencil::hTextAlign()
115 return m_pTextStyle->hTextAlign();
118int KivioBaseTargetStencil::vTextAlign()
120 return m_pTextStyle->vTextAlign();
123void KivioBaseTargetStencil::setHTextAlign(
int a)
125 m_pTextStyle->setHTextAlign(a);
128void KivioBaseTargetStencil::setVTextAlign(
int a)
130 m_pTextStyle->setVTextAlign(a);
133void KivioBaseTargetStencil::setText(
const TQString &a )
135 m_pTextStyle->setText(a);
138TQString KivioBaseTargetStencil::text()
140 return m_pTextStyle->text();
151void KivioBaseTargetStencil::paint( KivioIntraStencilData * )
156void KivioBaseTargetStencil::paintOutline( KivioIntraStencilData * )
161void KivioBaseTargetStencil::paintConnectorTargets( KivioIntraStencilData *pData )
164 KivioPainter *painter;
168 if( isSelected() ==
true )
172 targetPic = KivioConfig::config()->connectorTargetPixmap();
175 KoZoomHandler* zoomHandler = pData->zoomHandler;
176 painter = pData->painter;
178 KivioConnectorTarget *pTarget;
179 pTarget = m_pTargets->first();
182 x = zoomHandler->zoomItX(pTarget->x());
183 y = zoomHandler->zoomItY(pTarget->y());
185 painter->drawPixmap( x-3, y-3, *targetPic );
187 pTarget = m_pTargets->next();
200bool KivioBaseTargetStencil::loadXML(
const TQDomElement &e )
205 node = e.firstChild();
206 while( !node.isNull() )
208 name = node.nodeName();
210 if( name ==
"KivioStencilProperties" )
212 loadProperties(node.toElement());
215 node = node.nextSibling();
223TQDomElement KivioBaseTargetStencil::createRootElement( TQDomDocument &doc )
225 TQDomElement e = doc.createElement(
"KivioPluginStencil");
227 XmlWriteString( e,
"id", m_pSpawner->info()->id() );
228 XmlWriteString( e,
"setId", m_pSpawner->set()->id() );
233TQDomElement KivioBaseTargetStencil::saveXML( TQDomDocument &doc )
235 TQDomElement e = createRootElement( doc );
237 e.appendChild( saveProperties(doc) );
243TQDomElement KivioBaseTargetStencil::saveProperties( TQDomDocument &doc )
245 TQDomElement baseE = doc.createElement(
"KivioStencilProperties");
247 TQDomElement geoE = doc.createElement(
"Geometry");
248 XmlWriteFloat( geoE,
"x", m_x );
249 XmlWriteFloat( geoE,
"y", m_y );
250 XmlWriteFloat( geoE,
"w", m_w );
251 XmlWriteFloat( geoE,
"h", m_h );
252 baseE.appendChild( geoE );
254 baseE.appendChild( m_pLineStyle->saveXML(doc) );
255 baseE.appendChild( m_pFillStyle->saveXML(doc) );
256 baseE.appendChild( m_pTextStyle->saveXML(doc) );
257 baseE.appendChild( saveTargets(doc) );
260 TQDomElement customE = doc.createElement(
"CustomData");
261 if( saveCustom( customE, doc )==
true )
263 baseE.appendChild( customE );
269bool KivioBaseTargetStencil::loadProperties(
const TQDomElement &e )
275 node = e.firstChild();
276 while( !node.isNull() )
278 nodeName = node.nodeName();
279 nodeE = node.toElement();
281 if( nodeName ==
"KivioFillStyle" )
283 m_pFillStyle->loadXML( node.toElement() );
285 else if( nodeName ==
"KivioLineStyle" )
287 m_pLineStyle->loadXML( node.toElement() );
289 else if( nodeName ==
"KivioTextStyle" )
291 m_pTextStyle->loadXML( node.toElement() );
293 else if( nodeName ==
"KivioTargetList" )
295 loadTargets( node.toElement() );
297 else if( nodeName ==
"CustomData" )
299 loadCustom( node.toElement() );
301 else if( nodeName ==
"Geometry" )
303 m_x = XmlReadFloat( nodeE,
"x", 0.0f );
304 m_y = XmlReadFloat( nodeE,
"y", 0.0f );
305 m_w = XmlReadFloat( nodeE,
"w", 72.0f );
306 m_h = XmlReadFloat( nodeE,
"h", 72.0f );
309 node = node.nextSibling();
315bool KivioBaseTargetStencil::saveCustom( TQDomElement &, TQDomDocument & )
320bool KivioBaseTargetStencil::loadCustom(
const TQDomElement & )
325TQDomElement KivioBaseTargetStencil::saveTargets( TQDomDocument &doc )
327 KivioConnectorTarget *p;
329 TQDomElement e = doc.createElement(
"TargetList");
331 p = m_pTargets->first();
334 e.appendChild( p->saveXML(doc) );
336 p = m_pTargets->next();
342bool KivioBaseTargetStencil::loadTargets(
const TQDomElement &e )
344 KivioConnectorTarget *p;
346 TQDomElement targetE;
351 node = e.firstChild();
352 while( !node.isNull() )
354 nodeName = node.nodeName();
355 targetE = node.toElement();
357 if( nodeName ==
"KivioConnectorTarget" )
359 p =
new KivioConnectorTarget();
360 p->loadXML( targetE );
361 m_pTargets->append(p);
366 node = node.nextSibling();
380void KivioBaseTargetStencil::updateGeometry()
393KivioConnectorTarget *KivioBaseTargetStencil::connectToTarget( KivioConnectorPoint *p,
double threshHold)
400 KivioConnectorTarget *pTarget = m_pTargets->first();
407 if( px >= tx - threshHold &&
408 px <= tx + threshHold &&
409 py >= ty - threshHold &&
410 py <= ty + threshHold )
414 p->setTarget( pTarget );
418 pTarget = m_pTargets->next();
426KivioConnectorTarget *KivioBaseTargetStencil::connectToTarget( KivioConnectorPoint *p,
int )
428 int id = p->targetId();
430 KivioConnectorTarget *pTarget = m_pTargets->first();
433 if( pTarget->id() ==
id )
435 p->setTarget(pTarget);
440 pTarget = m_pTargets->next();
454int KivioBaseTargetStencil::generateIds(
int nextAvailable )
456 KivioConnectorTarget *pTarget = m_pTargets->first();
462 if( pTarget->hasConnections() )
465 pTarget->setId( nextAvailable );
473 pTarget->setId( -1 );
476 pTarget = m_pTargets->next();
480 return nextAvailable;
483void KivioBaseTargetStencil::copyBasicInto( KivioBaseTargetStencil *pStencil )
485 pStencil->setSpawner( m_pSpawner );
487 m_pFillStyle->copyInto( pStencil->m_pFillStyle );
488 m_pLineStyle->copyInto( pStencil->m_pLineStyle );
489 m_pTextStyle->copyInto( pStencil->m_pTextStyle );
492 KivioConnectorTarget *pSrcTarget, *pTgTarget;
493 pSrcTarget = m_pTargets->first();
494 pTgTarget = pStencil->m_pTargets->first();
496 while( pSrcTarget && pTgTarget )
498 pTgTarget->setPosition( pSrcTarget->x(), pSrcTarget->y() );
500 pSrcTarget = m_pTargets->next();
501 pTgTarget = pStencil->m_pTargets->next();
510 *(pStencil->m_pProtection) = *m_pProtection;
511 *(pStencil->m_pCanProtect) = *m_pCanProtect;
514int KivioBaseTargetStencil::resizeHandlePositions()
517 int mask = KIVIO_RESIZE_HANDLE_POSITION_ALL;
519 if( m_pProtection->at( kpWidth ) )
521 mask &= ~(krhpNE | krhpNW | krhpSW | krhpSE | krhpE | krhpW);
524 if( m_pProtection->at( kpHeight) )
526 mask &= ~(krhpNE | krhpNW | krhpSW | krhpSE | krhpN | krhpS);