20#include "kivioglobal.h"
21#include "kivio_common.h"
22#include "kivio_connector_point.h"
23#include "kivio_connector_target.h"
24#include "kivio_fill_style.h"
25#include "kivio_intra_stencil_data.h"
26#include "kivio_line_style.h"
27#include "kivio_painter.h"
28#include "kivio_screen_painter.h"
29#include "kivio_shape.h"
30#include "kivio_shape_data.h"
31#include "kivio_sml_stencil.h"
32#include "kivio_dia_stencil_spawner.h"
33#include "kivio_sml_stencil_spawner.h"
34#include "kivio_stencil_spawner.h"
35#include "kivio_stencil_spawner_info.h"
36#include "kivio_stencil_spawner_set.h"
48#include <KoZoomHandler.h>
55KivioSMLStencil::KivioSMLStencil()
58 m_pSubSelection(NULL),
59 m_pConnectorTargets(NULL)
61 m_pShapeList =
new TQPtrList<KivioShape>;
62 m_pShapeList->setAutoDelete(
true);
64 m_pConnectorTargets =
new TQPtrList<KivioConnectorTarget>;
65 m_pConnectorTargets->setAutoDelete(
true);
74KivioSMLStencil::~KivioSMLStencil()
79 delete m_pConnectorTargets;
80 m_pConnectorTargets = 0;
89bool KivioSMLStencil::loadXML(
const TQDomElement &e )
95 node = e.firstChild();
96 while( !node.isNull() )
98 TQString nodeName = node.nodeName();
100 ele = node.toElement();
102 if( nodeName ==
"Position" )
104 m_x = XmlReadFloat( ele,
"x", 0.0f );
105 m_y = XmlReadFloat( ele,
"y", 0.0f );
107 else if( nodeName ==
"Dimension" )
109 m_w = XmlReadFloat( ele,
"w", 0.0f );
110 m_h = XmlReadFloat( ele,
"h", 0.0f );
112 else if( nodeName ==
"KivioShape" )
115 KivioShape *pShape = locateShape( XmlReadString( ele,
"name",
"" ) );
118 pShape->loadXML( ele );
121 else if( nodeName ==
"KivioConnectorTargetList" )
123 loadConnectorTargetListXML( ele );
126 node = node.nextSibling();
134void KivioSMLStencil::loadConnectorTargetListXML(
const TQDomElement &e )
139 KivioConnectorTarget *pTarget;
141 pTarget = m_pConnectorTargets->first();
142 node = e.firstChild();
143 while( !node.isNull() && pTarget)
145 nodeName = node.nodeName();
146 ele = node.toElement();
148 if( nodeName ==
"KivioConnectorTarget" )
150 pTarget->loadXML( ele );
151 pTarget->setOffsets((pTarget->x() - x()) / w(), (pTarget->y() - y()) / h());
152 pTarget = m_pConnectorTargets->next();
155 node = node.nextSibling();
158 while(!node.isNull()) {
159 nodeName = node.nodeName();
160 ele = node.toElement();
162 if( nodeName ==
"KivioConnectorTarget" )
164 pTarget =
new KivioConnectorTarget();
165 pTarget->loadXML( ele );
166 pTarget->setOffsets((pTarget->x() - x()) / w(), (pTarget->y() -y()) / h());
167 m_pConnectorTargets->append(pTarget);
170 node = node.nextSibling();
178KivioShape *KivioSMLStencil::locateShape(
const TQString &name )
185 pShape = m_pShapeList->first();
188 if( pShape->shapeData()->name() == name )
193 pShape = m_pShapeList->next();
203TQDomElement KivioSMLStencil::saveXML( TQDomDocument &doc )
205 TQDomElement e = doc.createElement(
"KivioSMLStencil");
207 XmlWriteString( e,
"id", m_pSpawner->info()->id() );
208 XmlWriteString( e,
"setId", m_pSpawner->set()->id() );
212 TQDomElement posE = doc.createElement(
"Position");
213 XmlWriteFloat( posE,
"x", m_x );
214 XmlWriteFloat( posE,
"y", m_y );
215 e.appendChild( posE );
218 TQDomElement dimE = doc.createElement(
"Dimension");
219 XmlWriteFloat( dimE,
"w", m_w );
220 XmlWriteFloat( dimE,
"h", m_h );
221 e.appendChild( dimE );
224 TQDomElement clE = doc.createElement(
"KivioConnectorTargetList");
225 TQDomElement targetE;
226 KivioConnectorTarget *pTarget = m_pConnectorTargets->first();
229 targetE = pTarget->saveXML( doc );
230 clE.appendChild( targetE );
232 pTarget = m_pConnectorTargets->next();
234 e.appendChild( clE );
237 KivioShape *pShape = m_pShapeList->first();
240 e.appendChild( pShape->saveXML(doc ) );
242 pShape = m_pShapeList->next();
255KivioStencil *KivioSMLStencil::duplicate()
257 KivioSMLStencil *pNewStencil =
new KivioSMLStencil();
258 KivioStencil *pReturn;
259 KivioShape *pShape, *pNewShape;
261 pNewStencil->m_x = m_x;
262 pNewStencil->m_y = m_y;
263 pNewStencil->m_w = m_w;
264 pNewStencil->m_h = m_h;
266 pNewStencil->m_rotation = m_rotation;
268 pNewStencil->m_pSpawner = m_pSpawner;
272 pShape = m_pShapeList->first();
275 pNewShape =
new KivioShape( *pShape );
276 pNewStencil->m_pShapeList->append( pNewShape );
278 pShape = m_pShapeList->next();
282 KivioConnectorTarget *pTarget = m_pConnectorTargets->first();
286 pNewStencil->m_pConnectorTargets->append( pTarget->duplicate() );
287 pTarget = m_pConnectorTargets->next();
290 *(pNewStencil->protection()) = *m_pProtection;
291 *(pNewStencil->canProtect()) = *m_pCanProtect;
294 pReturn = pNewStencil;
303void KivioSMLStencil::paintOutline( KivioIntraStencilData *pData )
306 KivioShapeData *pShapeData;
308 m_zoomHandler = pData->zoomHandler;
309 pData->painter->saveState();
310 pData->painter->setTranslation(m_zoomHandler->zoomItX(m_x), m_zoomHandler->zoomItY(m_y));
311 rotatePainter(pData);
313 pShape = m_pShapeList->first();
316 pShapeData = pShape->shapeData();
318 switch( pShapeData->shapeType() )
320 case KivioShapeData::kstArc:
321 drawOutlineArc( pShape, pData );
324 case KivioShapeData::kstPie:
325 drawOutlinePie( pShape, pData );
328 case KivioShapeData::kstLineArray:
329 drawOutlineLineArray( pShape, pData );
332 case KivioShapeData::kstPolyline:
333 drawOutlinePolyline( pShape, pData );
336 case KivioShapeData::kstPolygon:
337 drawOutlinePolygon( pShape, pData );
340 case KivioShapeData::kstBezier:
341 drawOutlineBezier( pShape, pData );
344 case KivioShapeData::kstRectangle:
345 drawOutlineRectangle( pShape, pData );
348 case KivioShapeData::kstRoundRectangle:
349 drawOutlineRoundRectangle( pShape, pData );
352 case KivioShapeData::kstEllipse:
353 drawOutlineEllipse( pShape, pData );
356 case KivioShapeData::kstOpenPath:
357 drawOutlineOpenPath( pShape, pData );
360 case KivioShapeData::kstClosedPath:
361 drawOutlineClosedPath( pShape, pData );
364 case KivioShapeData::kstTextBox:
365 drawOutlineTextBox( pShape, pData );
369 case KivioShapeData::kstNone:
371 kdDebug(43000) <<
"*** KivioShape::Paint AHHHHH!!! NO SHAPE!" << endl;
375 pShape = m_pShapeList->next();
377 pData->painter->restoreState();
380 KivioConnectorTarget *pTarget;
382 pTarget = m_pConnectorTargets->first();
385 pTarget->paintOutline( pData );
387 pTarget = m_pConnectorTargets->next();
391void KivioSMLStencil::drawOutlineArc( KivioShape *pShape, KivioIntraStencilData *pData )
393 double _a, _l, _x, _y, _w, _h, defWidth, defHeight;
394 KivioPainter *painter;
395 KivioShapeData *pShapeData;
396 KivioPoint *pPosition, *pDimensions;
399 pShapeData = pShape->shapeData();
400 pPosition = pShapeData->position();
401 pDimensions = pShapeData->dimensions();
403 defWidth = m_pSpawner->defWidth();
404 defHeight = m_pSpawner->defHeight();
406 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
407 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
408 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
409 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
411 pPoint = pShapeData->pointList()->first();
412 _a = m_zoomHandler->zoomItX(pPoint->x());
413 _l = m_zoomHandler->zoomItY(pPoint->y());
416 painter = pData->painter;
417 painter->drawArc( _x, _y, _w, _h, _a, _l );
420void KivioSMLStencil::drawOutlineBezier( KivioShape *pShape, KivioIntraStencilData *pData )
422 KivioPainter *painter;
423 KivioShapeData *pShapeData = pShape->shapeData();
425 double defWidth = m_pSpawner->defWidth();
426 double defHeight = m_pSpawner->defHeight();
429 painter = pData->painter;
430 pShapeData = pShape->shapeData();
432 KivioPoint *pPoint, *pPoint2, *pPoint3, *pPoint4;
433 TQPtrList <KivioPoint> *pPointList = pShapeData->pointList();
434 TQPointArray controlPoints( 4 );
437 pPoint = pPointList->first();
438 pPoint2 = pPointList->next();
439 pPoint3 = pPointList->next();
440 pPoint4 = pPointList->next();
443 controlPoints.setPoint( 0, m_zoomHandler->zoomItX((pPoint->x() / defWidth)*m_w),
444 m_zoomHandler->zoomItY((pPoint->y()/defHeight)*m_h) );
445 controlPoints.setPoint( 1, m_zoomHandler->zoomItX((pPoint2->x() / defWidth)*m_w),
446 m_zoomHandler->zoomItY((pPoint2->y()/defHeight)*m_h));
447 controlPoints.setPoint( 2, m_zoomHandler->zoomItX((pPoint3->x() / defWidth)*m_w),
448 m_zoomHandler->zoomItY((pPoint3->y()/defHeight)*m_h));
449 controlPoints.setPoint( 3, m_zoomHandler->zoomItX((pPoint4->x() / defWidth)*m_w),
450 m_zoomHandler->zoomItY((pPoint4->y()/defHeight)*m_h));
452 painter = pData->painter;
453 painter->drawBezier( controlPoints );
456void KivioSMLStencil::drawOutlineOpenPath( KivioShape *pShape, KivioIntraStencilData *pData )
458 KivioPainter *painter;
459 KivioShapeData *pShapeData = pShape->shapeData();
460 KivioPoint *pPoint, *pNewPoint;
462 double defWidth = m_pSpawner->defWidth();
463 double defHeight = m_pSpawner->defHeight();
465 TQPtrList <KivioPoint> *pPointList = pShapeData->pointList();
466 TQPtrList <KivioPoint> *pNewPoints =
new TQPtrList<KivioPoint>;
467 pNewPoints->setAutoDelete(
true);
469 pPoint = pPointList->first();
473 pNewPoint =
new KivioPoint( m_zoomHandler->zoomItX((pPoint->x()/defWidth)*m_w),
474 m_zoomHandler->zoomItY((pPoint->y()/defHeight)*m_h),
475 pPoint->pointType() );
476 pNewPoints->append(pNewPoint);
478 pPoint = pPointList->next();
481 painter = pData->painter;
482 painter->drawOpenPath( pNewPoints );
487void KivioSMLStencil::drawOutlineClosedPath( KivioShape *pShape, KivioIntraStencilData *pData )
489 KivioPainter *painter;
490 KivioShapeData *pShapeData = pShape->shapeData();
491 KivioPoint *pPoint, *pNewPoint;
493 double defWidth = m_pSpawner->defWidth();
494 double defHeight = m_pSpawner->defHeight();
496 TQPtrList <KivioPoint> *pPointList = pShapeData->pointList();
497 TQPtrList <KivioPoint> *pNewPoints =
new TQPtrList<KivioPoint>;
498 pNewPoints->setAutoDelete(
true);
500 pPoint = pPointList->first();
503 pNewPoint =
new KivioPoint( m_zoomHandler->zoomItX((pPoint->x()/defWidth)*m_w),
504 m_zoomHandler->zoomItY((pPoint->y()/defHeight)*m_h),
505 pPoint->pointType() );
506 pNewPoints->append(pNewPoint);
508 pPoint = pPointList->next();
511 painter = pData->painter;
512 painter->drawOpenPath( pNewPoints );
517void KivioSMLStencil::drawOutlineEllipse( KivioShape *pShape, KivioIntraStencilData *pData )
519 double _x, _y, _w, _h, defWidth, defHeight;
520 KivioPainter *painter;
521 KivioShapeData *pShapeData;
522 KivioPoint *pPosition, *pDimensions;
524 pShapeData = pShape->shapeData();
525 pPosition = pShapeData->position();
526 pDimensions = pShapeData->dimensions();
528 defWidth = m_pSpawner->defWidth();
529 defHeight = m_pSpawner->defHeight();
531 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
532 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
533 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
534 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
537 painter = pData->painter;
538 painter->setFGColor( TQColor(0, 0, 0) );
539 painter->drawEllipse( _x, _y, _w, _h );
542void KivioSMLStencil::drawOutlineLineArray( KivioShape *pShape, KivioIntraStencilData *pData )
544 double _x, _y, defWidth, defHeight;
545 KivioPainter *painter;
546 KivioShapeData *pShapeData;
547 TQPtrList <KivioPoint> *pList;
549 pShapeData = pShape->shapeData();
551 defWidth = m_pSpawner->defWidth();
552 defHeight = m_pSpawner->defHeight();
554 pList = pShapeData->pointList();
557 TQPointArray arr( pList->count() );
561 pPoint = pList->first();
564 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
565 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
567 arr.setPoint( i, (
int)_x, (
int)_y );
571 pPoint = pList->next();
574 painter = pData->painter;
575 painter->drawLineArray( arr );
578void KivioSMLStencil::drawOutlineRectangle( KivioShape *pShape, KivioIntraStencilData *pData )
580 double _x, _y, _w, _h, defWidth, defHeight;
581 KivioPainter *painter;
582 KivioShapeData *pShapeData;
583 KivioPoint *pPosition, *pDimensions;
585 pShapeData = pShape->shapeData();
586 pPosition = pShapeData->position();
587 pDimensions = pShapeData->dimensions();
589 defWidth = m_pSpawner->defWidth();
590 defHeight = m_pSpawner->defHeight();
592 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
593 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
594 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
595 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
597 painter = pData->painter;
598 painter->setFGColor( TQColor(0, 0, 0) );
599 painter->drawRect( _x, _y, _w, _h );
602void KivioSMLStencil::drawOutlineRoundRectangle( KivioShape *pShape, KivioIntraStencilData *pData )
604 double _rx, _ry, _x, _y, _w, _h, defWidth, defHeight;
605 KivioPainter *painter;
606 KivioShapeData *pShapeData;
607 KivioPoint *pPosition, *pDimensions;
609 pShapeData = pShape->shapeData();
610 pPosition = pShapeData->position();
611 pDimensions = pShapeData->dimensions();
615 defWidth = m_pSpawner->defWidth();
616 defHeight = m_pSpawner->defHeight();
618 pPoint = pShapeData->pointList()->first();
619 _rx = m_zoomHandler->zoomItX(pPoint->x());
620 _ry = m_zoomHandler->zoomItY(pPoint->y());
623 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
624 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
625 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
626 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
629 painter = pData->painter;
630 painter->setFGColor( TQColor(0, 0, 0) );
631 painter->drawRoundRect( _x, _y, _w, _h, _rx, _ry );
634void KivioSMLStencil::drawOutlinePie( KivioShape *, KivioIntraStencilData * )
639void KivioSMLStencil::drawOutlinePolygon( KivioShape *pShape, KivioIntraStencilData *pData )
641 double _x, _y, defWidth, defHeight;
642 KivioPainter *painter;
643 KivioShapeData *pShapeData;
644 TQPtrList <KivioPoint> *pList;
646 pShapeData = pShape->shapeData();
648 defWidth = m_pSpawner->defWidth();
649 defHeight = m_pSpawner->defHeight();
651 pList = pShapeData->pointList();
654 TQPointArray arr( pList->count() );
658 pPoint = pList->first();
661 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
662 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
664 arr.setPoint( i, (
int)_x, (
int)_y );
668 pPoint = pList->next();
671 painter = pData->painter;
672 painter->drawPolyline( arr );
675void KivioSMLStencil::drawOutlinePolyline( KivioShape *pShape, KivioIntraStencilData *pData )
677 double _x, _y, defWidth, defHeight;
678 KivioPainter *painter;
679 KivioShapeData *pShapeData;
680 TQPtrList <KivioPoint> *pList;
682 pShapeData = pShape->shapeData();
684 defWidth = m_pSpawner->defWidth();
685 defHeight = m_pSpawner->defHeight();
687 pList = pShapeData->pointList();
690 TQPointArray arr( pList->count() );
694 pPoint = pList->first();
698 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
699 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
701 arr.setPoint( i, (
int)_x, (
int)_y );
705 pPoint = pList->next();
708 painter = pData->painter;
709 painter->drawPolyline( arr );
712void KivioSMLStencil::drawOutlineTextBox( KivioShape *pShape, KivioIntraStencilData *pData )
714 double defWidth = m_pSpawner->defWidth();
715 double defHeight = m_pSpawner->defHeight();
717 KivioShapeData *pShapeData = pShape->shapeData();
718 KivioPoint *pPosition = pShapeData->position();
719 KivioPoint *pDimensions = pShapeData->dimensions();
720 KivioPainter *painter = pData->painter;
721 KoZoomHandler* zoomHandler = pData->zoomHandler;
723 if( pShapeData->text().length() <= 0 ) {
728 _x = zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
729 _y = zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
730 _w = zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
731 _h = zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
734 TQPixmap pix(_w, _h);
738 TQFont f = pShapeData->textFont();
739 f.setPointSizeFloat(f.pointSizeFloat() * (((
float)zoomHandler->zoom()) / 100.0));
741 p.setPen( TQColor(0, 0, 0) );
742 int tf = pShapeData->vTextAlign() | pShapeData->hTextAlign();
743 p.drawText( 0, 0, _w, _h, tf | TQt::WordBreak, pShapeData->text() );
747 painter->drawPixmap(_x, _y, pix);
754void KivioSMLStencil::paint( KivioIntraStencilData *pData )
757 KivioShapeData *pShapeData;
760 m_zoomHandler = pData->zoomHandler;
761 pData->painter->saveState();
762 pData->painter->setTranslation(m_zoomHandler->zoomItX(m_x), m_zoomHandler->zoomItY(m_y));
763 rotatePainter(pData);
765 pShape = m_pShapeList->first();
768 pShapeData = pShape->shapeData();
770 switch( pShapeData->shapeType() )
772 case KivioShapeData::kstArc:
773 drawArc( pShape, pData );
776 case KivioShapeData::kstPie:
777 drawPie( pShape, pData );
780 case KivioShapeData::kstLineArray:
781 drawLineArray( pShape, pData );
784 case KivioShapeData::kstPolyline:
785 drawPolyline( pShape, pData );
788 case KivioShapeData::kstPolygon:
789 drawPolygon( pShape, pData );
792 case KivioShapeData::kstBezier:
793 drawBezier( pShape, pData );
796 case KivioShapeData::kstRectangle:
797 drawRectangle( pShape, pData );
800 case KivioShapeData::kstRoundRectangle:
801 drawRoundRectangle( pShape, pData );
804 case KivioShapeData::kstEllipse:
805 drawEllipse( pShape, pData );
808 case KivioShapeData::kstOpenPath:
809 drawOpenPath( pShape, pData );
812 case KivioShapeData::kstClosedPath:
813 drawClosedPath( pShape, pData );
816 case KivioShapeData::kstTextBox:
817 drawTextBox( pShape, pData );
820 case KivioShapeData::kstNone:
825 pShape = m_pShapeList->next();
828 pData->painter->restoreState();
835void KivioSMLStencil::paintConnectorTargets( KivioIntraStencilData *pData )
843 KivioPainter *painter;
847 targetPic = Kivio::connectorTargetPixmap();
850 m_zoomHandler = pData->zoomHandler;
851 painter = pData->painter;
853 KivioConnectorTarget *pTarget;
854 pTarget = m_pConnectorTargets->first();
857 x = m_zoomHandler->zoomItX(pTarget->x());
858 y = m_zoomHandler->zoomItY(pTarget->y());
860 painter->drawPixmap( x-3, y-3, targetPic );
862 pTarget = m_pConnectorTargets->next();
867void KivioSMLStencil::drawArc( KivioShape *pShape, KivioIntraStencilData *pData )
869 double defWidth, defHeight;
870 int _a, _l, _x, _y, _w, _h;
871 KivioPainter *painter;
872 KivioShapeData *pShapeData;
873 KivioPoint *pPosition, *pDimensions;
876 pShapeData = pShape->shapeData();
877 pPosition = pShapeData->position();
878 pDimensions = pShapeData->dimensions();
880 defWidth = m_pSpawner->defWidth();
881 defHeight = m_pSpawner->defHeight();
883 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
884 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
885 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
886 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
888 pPoint = pShapeData->pointList()->first();
889 _a = m_zoomHandler->zoomItX(pPoint->x());
890 _l = m_zoomHandler->zoomItY(pPoint->y());
892 painter = pData->painter;
893 painter->setLineStyle(pShapeData->lineStyle());
894 double lineWidth = pShapeData->lineStyle()->width();
895 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
897 switch( pShapeData->fillStyle()->colorStyle() )
899 case KivioFillStyle::kcsNone:
900 painter->drawArc( _x, _y, _w, _h, _a, _l );
903 case KivioFillStyle::kcsSolid:
904 case KivioFillStyle::kcsGradient:
905 painter->setFillStyle( pShapeData->fillStyle() );
906 painter->drawArc( _x, _y, _w, _h, _a, _l );
909 case KivioFillStyle::kcsPixmap:
915void KivioSMLStencil::drawBezier( KivioShape *pShape, KivioIntraStencilData *pData )
917 KivioPainter *painter;
918 KivioShapeData *pShapeData = pShape->shapeData();
920 double defWidth = m_pSpawner->defWidth();
921 double defHeight = m_pSpawner->defHeight();
924 painter = pData->painter;
925 pShapeData = pShape->shapeData();
927 KivioPoint *pPoint, *pPoint2, *pPoint3, *pPoint4;
928 TQPtrList <KivioPoint> *pPointList = pShapeData->pointList();
929 TQPointArray controlPoints( 4 );
932 pPoint = pPointList->first();
933 pPoint2 = pPointList->next();
934 pPoint3 = pPointList->next();
935 pPoint4 = pPointList->next();
938 controlPoints.setPoint( 0, m_zoomHandler->zoomItX((pPoint->x() / defWidth)*m_w),
939 m_zoomHandler->zoomItY((pPoint->y()/defHeight)*m_h));
940 controlPoints.setPoint( 1, m_zoomHandler->zoomItX((pPoint2->x() / defWidth)*m_w),
941 m_zoomHandler->zoomItY((pPoint2->y()/defHeight)*m_h));
942 controlPoints.setPoint( 2, m_zoomHandler->zoomItX((pPoint3->x() / defWidth)*m_w),
943 m_zoomHandler->zoomItY((pPoint3->y()/defHeight)*m_h));
944 controlPoints.setPoint( 3, m_zoomHandler->zoomItX((pPoint4->x() / defWidth)*m_w),
945 m_zoomHandler->zoomItY((pPoint4->y()/defHeight)*m_h));
947 painter->setLineStyle(pShapeData->lineStyle());
948 double lineWidth = pShapeData->lineStyle()->width();
949 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
951 painter->drawBezier( controlPoints );
954void KivioSMLStencil::drawOpenPath( KivioShape *pShape, KivioIntraStencilData *pData )
956 KivioPainter *painter;
957 KivioShapeData *pShapeData = pShape->shapeData();
958 KivioPoint *pPoint, *pNewPoint;
960 double defWidth = m_pSpawner->defWidth();
961 double defHeight = m_pSpawner->defHeight();
963 TQPtrList <KivioPoint> *pPointList = pShapeData->pointList();
964 TQPtrList <KivioPoint> *pNewPoints =
new TQPtrList<KivioPoint>;
965 pNewPoints->setAutoDelete(
true);
967 pPoint = pPointList->first();
970 pNewPoint =
new KivioPoint( m_zoomHandler->zoomItX((pPoint->x()/defWidth)*m_w),
971 m_zoomHandler->zoomItY((pPoint->y()/defHeight)*m_h),
972 pPoint->pointType() );
973 pNewPoints->append(pNewPoint);
975 pPoint = pPointList->next();
978 painter = pData->painter;
979 painter->setLineStyle(pShapeData->lineStyle());
980 double lineWidth = pShapeData->lineStyle()->width();
981 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
983 painter->drawOpenPath( pNewPoints );
988void KivioSMLStencil::drawClosedPath( KivioShape *pShape, KivioIntraStencilData *pData )
990 KivioPainter *painter;
991 KivioShapeData *pShapeData = pShape->shapeData();
992 KivioPoint *pPoint, *pNewPoint;
994 double defWidth = m_pSpawner->defWidth();
995 double defHeight = m_pSpawner->defHeight();
997 TQPtrList <KivioPoint> *pPointList = pShapeData->pointList();
998 TQPtrList <KivioPoint> *pNewPoints =
new TQPtrList<KivioPoint>;
999 pNewPoints->setAutoDelete(
true);
1001 pPoint = pPointList->first();
1004 pNewPoint =
new KivioPoint( m_zoomHandler->zoomItX((pPoint->x()/defWidth)*m_w),
1005 m_zoomHandler->zoomItY((pPoint->y()/defHeight)*m_h),
1006 pPoint->pointType() );
1007 pNewPoints->append(pNewPoint);
1009 pPoint = pPointList->next();
1012 painter = pData->painter;
1013 painter->setLineStyle(pShapeData->lineStyle());
1014 double lineWidth = pShapeData->lineStyle()->width();
1015 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1017 switch( pShapeData->fillStyle()->colorStyle() )
1019 case KivioFillStyle::kcsNone:
1020 painter->drawOpenPath( pNewPoints );
1023 case KivioFillStyle::kcsSolid:
1024 case KivioFillStyle::kcsGradient:
1025 painter->setFillStyle( pShapeData->fillStyle() );
1026 painter->drawClosedPath( pNewPoints );
1029 case KivioFillStyle::kcsPixmap:
1037void KivioSMLStencil::drawPie( KivioShape *, KivioIntraStencilData * )
1041void KivioSMLStencil::drawEllipse( KivioShape *pShape, KivioIntraStencilData *pData )
1043 double defWidth, defHeight;
1045 KivioPainter *painter;
1046 KivioShapeData *pShapeData;
1047 KivioPoint *pPosition, *pDimensions;
1049 pShapeData = pShape->shapeData();
1050 pPosition = pShapeData->position();
1051 pDimensions = pShapeData->dimensions();
1053 defWidth = m_pSpawner->defWidth();
1054 defHeight = m_pSpawner->defHeight();
1056 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
1057 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
1058 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
1059 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
1061 painter = pData->painter;
1062 painter->setLineStyle(pShapeData->lineStyle());
1063 double lineWidth = pShapeData->lineStyle()->width();
1064 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1066 switch( pShapeData->fillStyle()->colorStyle() )
1068 case KivioFillStyle::kcsNone:
1069 painter->drawEllipse( _x, _y, _w, _h );
1072 case KivioFillStyle::kcsSolid:
1073 case KivioFillStyle::kcsGradient:
1074 painter->setFillStyle( pShapeData->fillStyle() );
1075 painter->fillEllipse( _x, _y, _w, _h );
1078 case KivioFillStyle::kcsPixmap:
1084void KivioSMLStencil::drawLineArray( KivioShape *pShape, KivioIntraStencilData *pData )
1086 double defWidth, defHeight;
1088 KivioPainter *painter;
1089 KivioShapeData *pShapeData;
1090 TQPtrList <KivioPoint> *pList;
1092 pShapeData = pShape->shapeData();
1094 defWidth = m_pSpawner->defWidth();
1095 defHeight = m_pSpawner->defHeight();
1097 pList = pShapeData->pointList();
1100 TQPointArray arr( pList->count() );
1104 pPoint = pList->first();
1107 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
1108 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
1110 arr.setPoint( i, _x, _y );
1114 pPoint = pList->next();
1117 painter = pData->painter;
1118 painter->setLineStyle(pShapeData->lineStyle());
1119 double lineWidth = pShapeData->lineStyle()->width();
1120 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1122 painter->drawLineArray( arr );
1125void KivioSMLStencil::drawRectangle( KivioShape *pShape, KivioIntraStencilData *pData )
1127 double defWidth, defHeight;
1129 KivioPainter *painter;
1130 KivioShapeData *pShapeData;
1131 KivioPoint *pPosition, *pDimensions;
1133 pShapeData = pShape->shapeData();
1134 pPosition = pShapeData->position();
1135 pDimensions = pShapeData->dimensions();
1137 defWidth = m_pSpawner->defWidth();
1138 defHeight = m_pSpawner->defHeight();
1140 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
1141 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
1142 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
1143 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
1145 painter = pData->painter;
1146 painter->setLineStyle(pShapeData->lineStyle());
1147 double lineWidth = pShapeData->lineStyle()->width();
1148 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1150 switch( pShapeData->fillStyle()->colorStyle() )
1152 case KivioFillStyle::kcsNone:
1153 painter->drawRect( _x, _y, _w, _h );
1156 case KivioFillStyle::kcsSolid:
1157 case KivioFillStyle::kcsGradient:
1158 painter->setFillStyle( pShapeData->fillStyle() );
1159 painter->fillRect( _x, _y, _w, _h );
1162 case KivioFillStyle::kcsPixmap:
1168void KivioSMLStencil::drawRoundRectangle( KivioShape *pShape, KivioIntraStencilData *pData )
1170 double defWidth, defHeight;
1171 int _rx, _ry, _x, _y, _w, _h;
1172 KivioPainter *painter;
1173 KivioShapeData *pShapeData;
1174 KivioPoint *pPosition, *pDimensions;
1177 pShapeData = pShape->shapeData();
1178 pPosition = pShapeData->position();
1179 pDimensions = pShapeData->dimensions();
1181 defWidth = m_pSpawner->defWidth();
1182 defHeight = m_pSpawner->defHeight();
1184 _x = m_zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
1185 _y = m_zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
1186 _w = m_zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
1187 _h = m_zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
1189 pPoint = pShapeData->pointList()->first();
1190 _rx = m_zoomHandler->zoomItX(pPoint->x());
1191 _ry = m_zoomHandler->zoomItY(pPoint->y());
1193 painter = pData->painter;
1194 painter->setLineStyle(pShapeData->lineStyle());
1195 double lineWidth = pShapeData->lineStyle()->width();
1196 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1198 switch( pShapeData->fillStyle()->colorStyle() )
1200 case KivioFillStyle::kcsNone:
1201 painter->drawRoundRect( _x, _y, _w, _h, _rx, _ry );
1204 case KivioFillStyle::kcsSolid:
1205 case KivioFillStyle::kcsGradient:
1206 painter->setFillStyle( pShapeData->fillStyle() );
1207 painter->fillRoundRect( _x, _y, _w, _h, _rx, _ry );
1210 case KivioFillStyle::kcsPixmap:
1216void KivioSMLStencil::drawPolygon( KivioShape *pShape, KivioIntraStencilData *pData )
1218 double defWidth, defHeight;
1220 KivioPainter *painter;
1221 KivioShapeData *pShapeData;
1222 TQPtrList <KivioPoint> *pList;
1224 pShapeData = pShape->shapeData();
1226 defWidth = m_pSpawner->defWidth();
1227 defHeight = m_pSpawner->defHeight();
1229 pList = pShapeData->pointList();
1232 TQPointArray arr( pList->count() );
1237 pPoint = pList->first();
1240 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
1241 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
1244 arr.setPoint( i, _x, _y );
1248 pPoint = pList->next();
1251 painter = pData->painter;
1252 painter->setLineStyle(pShapeData->lineStyle());
1253 double lineWidth = pShapeData->lineStyle()->width();
1254 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1256 switch( pShapeData->fillStyle()->colorStyle() )
1258 case KivioFillStyle::kcsNone:
1259 painter->drawPolygon(arr);
1262 case KivioFillStyle::kcsSolid:
1263 case KivioFillStyle::kcsGradient:
1264 painter->setFillStyle( pShapeData->fillStyle() );
1265 painter->drawPolygon(arr);
1268 case KivioFillStyle::kcsPixmap:
1275void KivioSMLStencil::drawPolyline( KivioShape *pShape, KivioIntraStencilData *pData )
1277 double defWidth, defHeight;
1279 KivioPainter *painter;
1280 KivioShapeData *pShapeData;
1281 TQPtrList <KivioPoint> *pList;
1283 pShapeData = pShape->shapeData();
1285 defWidth = m_pSpawner->defWidth();
1286 defHeight = m_pSpawner->defHeight();
1288 pList = pShapeData->pointList();
1291 TQPointArray arr( pList->count() );
1295 pPoint = pList->first();
1298 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
1299 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
1301 arr.setPoint( i, _x, _y );
1305 pPoint = pList->next();
1308 painter = pData->painter;
1309 painter->setLineStyle(pShapeData->lineStyle());
1310 double lineWidth = pShapeData->lineStyle()->width();
1311 painter->setLineWidth(m_zoomHandler->zoomItY(lineWidth));
1313 painter->drawPolyline(arr);
1316void KivioSMLStencil::drawTextBox( KivioShape *pShape, KivioIntraStencilData *pData )
1318 double defWidth = m_pSpawner->defWidth();
1319 double defHeight = m_pSpawner->defHeight();
1320 KivioShapeData *pShapeData = pShape->shapeData();
1321 KivioPoint *pPosition = pShapeData->position();
1322 KivioPoint *pDimensions = pShapeData->dimensions();
1323 KivioPainter *painter = pData->painter;
1324 KoZoomHandler* zoomHandler = pData->zoomHandler;
1327 if(pShapeData->text().isEmpty()) {
1331 int _x = zoomHandler->zoomItX((pPosition->x() / defWidth) * m_w);
1332 int _y = zoomHandler->zoomItY((pPosition->y() / defHeight) * m_h);
1333 int _w = zoomHandler->zoomItX((pDimensions->x() / defWidth) * m_w) + 1;
1334 int _h = zoomHandler->zoomItY((pDimensions->y() / defHeight) * m_h) + 1;
1337 TQFont f = pShapeData->textFont();
1338 f.setPointSizeFloat(f.pointSizeFloat() * (((
float)zoomHandler->zoom()) / 100.0));
1339 painter->setFont( f );
1340 painter->setTextColor( pShapeData->textColor() );
1342 int tf = pShapeData->vTextAlign() | pShapeData->hTextAlign();
1343 painter->drawText( _x, _y, _w, _h, tf | TQt::WordBreak, pShapeData->text() );
1353void KivioSMLStencil::setFGColor( TQColor c )
1358 pShape = m_pShapeList->first();
1361 pShape->shapeData()->lineStyle()->setColor( c );
1363 pShape = m_pShapeList->next();
1371void KivioSMLStencil::setBGColor( TQColor c )
1375 pShape = m_pShapeList->first();
1378 pShape->shapeData()->fillStyle()->setColor( c );
1380 pShape = m_pShapeList->next();
1384void KivioSMLStencil::setFillPattern(
int p)
1388 pShape = m_pShapeList->first();
1391 pShape->shapeData()->fillStyle()->setBrushStyle(
static_cast<TQt::BrushStyle
>(p) );
1393 pShape = m_pShapeList->next();
1400void KivioSMLStencil::setTextColor( TQColor c )
1405 pShape = m_pShapeList->first();
1408 pShape->shapeData()->setTextColor( c );
1410 pShape = m_pShapeList->next();
1417void KivioSMLStencil::setTextFont(
const TQFont &f )
1422 pShape = m_pShapeList->first();
1425 pShape->shapeData()->setTextFont( f );
1427 pShape = m_pShapeList->next();
1435void KivioSMLStencil::setLineWidth(
double f )
1439 pShape = m_pShapeList->first();
1442 pShape->shapeData()->lineStyle()->setWidth( f );
1444 pShape = m_pShapeList->next();
1448void KivioSMLStencil::setLinePattern(
int p)
1450 KivioShape *pShape = m_pShapeList->first();
1454 pShape->shapeData()->lineStyle()->setStyle( p );
1455 pShape = m_pShapeList->next();
1466KivioConnectorTarget *KivioSMLStencil::connectToTarget( KivioConnectorPoint *p,
double threshHold )
1473 KivioConnectorTarget *pTarget = m_pConnectorTargets->first();
1480 if( px >= tx - threshHold &&
1481 px <= tx + threshHold &&
1482 py >= ty - threshHold &&
1483 py <= ty + threshHold )
1487 p->setTarget( pTarget );
1491 pTarget = m_pConnectorTargets->next();
1497KoPoint KivioSMLStencil::snapToTarget(
const KoPoint& p,
double thresh,
bool& hit )
1503 KivioConnectorTarget *pTarget = m_pConnectorTargets->first();
1510 if( retVal.x() >= tx - thresh &&
1511 retVal.x() <= tx + thresh &&
1512 retVal.y() >= ty - thresh &&
1513 retVal.y() <= ty + thresh )
1520 pTarget = m_pConnectorTargets->next();
1531KivioConnectorTarget *KivioSMLStencil::connectToTarget( KivioConnectorPoint *p,
int )
1533 int id = p->targetId();
1535 KivioConnectorTarget *pTarget = m_pConnectorTargets->first();
1538 if( pTarget->id() ==
id )
1540 p->setTarget(pTarget);
1545 pTarget = m_pConnectorTargets->next();
1558void KivioSMLStencil::updateGeometry()
1563 m.translate(m_x, m_y);
1564 m.translate(m_w / 2.0, m_h / 2.0);
1565 m.rotate(m_rotation);
1566 m.translate(-m_w / 2.0, -m_h / 2.0);
1568 KivioConnectorTarget* pTarget = m_pConnectorTargets->first();
1572 double _x = pTarget->xOffset() * m_w;
1573 double _y = pTarget->yOffset() * m_h;
1574 double newX = _x * m.m11() + _y * m.m21() + m.dx();
1575 double newY = _x * m.m12() + _y * m.m22() + m.dy();
1576 pTarget->setPosition( newX, newY );
1578 pTarget = m_pConnectorTargets->next();
1586TQFont KivioSMLStencil::textFont()
1590 pShape = m_pShapeList->first();
1593 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1595 return pShape->shapeData()->textFont();
1598 pShape = m_pShapeList->next();
1602 return KoGlobal::defaultFont();
1605TQColor KivioSMLStencil::textColor()
1609 pShape = m_pShapeList->first();
1612 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1614 return pShape->shapeData()->textColor();
1617 pShape = m_pShapeList->next();
1620 return TQColor(0, 0, 0);
1626void KivioSMLStencil::setHTextAlign(
int i)
1631 pShape = m_pShapeList->first();
1634 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1635 pShape->shapeData()->setHTextAlign( i );
1637 pShape = m_pShapeList->next();
1645void KivioSMLStencil::setVTextAlign(
int i)
1650 pShape = m_pShapeList->first();
1653 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1654 pShape->shapeData()->setVTextAlign( i );
1656 pShape = m_pShapeList->next();
1664int KivioSMLStencil::hTextAlign()
1668 pShape = m_pShapeList->first();
1671 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1673 return pShape->shapeData()->hTextAlign();
1676 pShape = m_pShapeList->next();
1686int KivioSMLStencil::vTextAlign()
1690 pShape = m_pShapeList->first();
1693 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1695 return pShape->shapeData()->vTextAlign();
1698 pShape = m_pShapeList->next();
1708TQString KivioSMLStencil::text()
1712 pShape = m_pShapeList->first();
1715 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1717 return pShape->shapeData()->text();
1720 pShape = m_pShapeList->next();
1723 return TQString(
"");
1730void KivioSMLStencil::setText(
const TQString &t )
1734 pShape = m_pShapeList->first();
1737 if( pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox )
1739 pShape->shapeData()->setText(t);
1742 pShape = m_pShapeList->next();
1750double KivioSMLStencil::lineWidth()
1754 pShape = m_pShapeList->first();
1756 return pShape->shapeData()->lineStyle()->width();
1761int KivioSMLStencil::linePattern()
1763 KivioShape *pShape = m_pShapeList->first();
1766 return pShape->shapeData()->lineStyle()->style();
1774TQColor KivioSMLStencil::fgColor()
1778 pShape = m_pShapeList->first();
1780 return pShape->shapeData()->lineStyle()->color();
1782 return TQColor(0,0,0);
1789TQColor KivioSMLStencil::bgColor()
1793 pShape = m_pShapeList->first();
1795 return pShape->shapeData()->fillStyle()->color();
1797 return TQColor(0,0,0);
1800int KivioSMLStencil::fillPattern()
1804 pShape = m_pShapeList->first();
1806 return pShape->shapeData()->fillStyle()->brushStyle();
1814int KivioSMLStencil::generateIds(
int nextAvailable )
1816 KivioConnectorTarget *pTarget = m_pConnectorTargets->first();
1822 if( pTarget->hasConnections() )
1825 pTarget->setId( nextAvailable );
1833 pTarget->setId( -1 );
1836 pTarget = m_pConnectorTargets->next();
1840 return nextAvailable;
1846KivioCollisionType KivioSMLStencil::checkForCollision( KoPoint *pPoint,
double )
1848 KivioCollisionType type = kctNone;
1851 m.translate(m_x, m_y);
1852 m.translate(m_w / 2.0, m_h / 2.0);
1853 m.rotate(m_rotation);
1854 m.translate(-m_w / 2.0, -m_h / 2.0);
1857 pPoints[0].setX(0 * m.m11() + 0 * m.m21() + m.dx());
1858 pPoints[0].setY(0 * m.m12() + 0 * m.m22() + m.dy());
1859 pPoints[1].setX(m_w * m.m11() + 0 * m.m21() + m.dx());
1860 pPoints[1].setY(m_w * m.m12() + 0 * m.m22() + m.dy());
1861 pPoints[2].setX(m_w * m.m11() + m_h * m.m21() + m.dx());
1862 pPoints[2].setY(m_w * m.m12() + m_h * m.m22() + m.dy());
1863 pPoints[3].setX(0 * m.m11() + m_h * m.m21() + m.dx());
1864 pPoints[3].setY(0 * m.m12() + m_h * m.m22() + m.dy());
1866 if(PointInPoly(pPoints, 4, pPoint)) {
1873bool KivioSMLStencil::checkCollisionArc( KivioShape *, KoPoint * )
1879bool KivioSMLStencil::checkCollisionBezier( KivioShape *, KoPoint * )
1884bool KivioSMLStencil::checkCollisionOpenPath( KivioShape *, KoPoint * )
1889bool KivioSMLStencil::checkCollisionClosedPath( KivioShape *, KoPoint * )
1894bool KivioSMLStencil::checkCollisionPie( KivioShape *, KoPoint * )
1899bool KivioSMLStencil::checkCollisionEllipse( KivioShape *, KoPoint * )
1904bool KivioSMLStencil::checkCollisionLineArray( KivioShape *, KoPoint * )
1909bool KivioSMLStencil::checkCollisionRectangle( KivioShape *, KoPoint * )
1914bool KivioSMLStencil::checkCollisionRoundRectangle( KivioShape *, KoPoint * )
1919bool KivioSMLStencil::checkCollisionPolygon( KivioShape *pShape, KoPoint *pCheckPoint )
1921 double _x, _y, defWidth, defHeight;
1922 KivioShapeData *pShapeData;
1923 TQPtrList<KivioPoint> *pList;
1926 pShapeData = pShape->shapeData();
1928 defWidth = m_pSpawner->defWidth();
1929 defHeight = m_pSpawner->defHeight();
1931 pList = pShapeData->pointList();
1933 pPoints =
new KoPoint[pList->count()];
1937 pPoint = pList->first();
1940 _x = m_zoomHandler->zoomItX((pPoint->x() / defWidth) * m_w);
1941 _y = m_zoomHandler->zoomItY((pPoint->y() / defHeight) * m_h);
1943 pPoints[i].setX(_x);
1944 pPoints[i].setY(_y);
1948 pPoint = pList->next();
1951 if( PointInPoly( pPoints, i, pCheckPoint ) )
1962bool KivioSMLStencil::checkCollisionPolyline( KivioShape *, KoPoint * )
1967bool KivioSMLStencil::checkCollisionTextBox( KivioShape *, KoPoint * )
1976int KivioSMLStencil::resizeHandlePositions()
1979 int mask = KIVIO_RESIZE_HANDLE_POSITION_ALL;
1981 if( m_pProtection->at( kpWidth ) )
1983 mask &= ~(krhpNE | krhpNW | krhpSW | krhpSE | krhpE | krhpW);
1986 if( m_pProtection->at( kpHeight ) )
1988 mask &= ~(krhpNE | krhpNW | krhpSW | krhpSE | krhpN | krhpS);
1991 if( m_pProtection->at( kpAspect ) )
1993 mask = KIVIO_RESIZE_HANDLE_POSITION_CORNERS;
1999KivioLineStyle KivioSMLStencil::lineStyle()
2001 KivioShape *pShape = m_pShapeList->first();
2004 return *(pShape->shapeData()->lineStyle());
2006 return KivioLineStyle();
2009void KivioSMLStencil::setLineStyle(KivioLineStyle ls)
2011 KivioShape *pShape = m_pShapeList->first();
2015 pShape->shapeData()->setLineStyle(ls);;
2016 pShape = m_pShapeList->next();
2020TQString KivioSMLStencil::getTextBoxName(
const KoPoint& p)
2022 KivioShape* pShape = m_pShapeList->first();
2023 KivioShape* first = 0;
2028 m.translate(m_x, m_y);
2029 m.translate(m_w / 2.0, m_h / 2.0);
2030 m.rotate(m_rotation);
2031 m.translate(-m_w / 2.0, -m_h / 2.0);
2035 if(pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox)
2037 double x = pShape->shapeData()->x();
2038 double y = pShape->shapeData()->y();
2039 double x2 = pShape->shapeData()->w() + x;
2040 double y2 = pShape->shapeData()->h() + y;
2044 pPoints[0].setX(x * m.m11() + y * m.m21() + m.dx());
2045 pPoints[0].setY(x * m.m12() + y * m.m22() + m.dy());
2046 pPoints[1].setX(x2 * m.m11() + y * m.m21() + m.dx());
2047 pPoints[1].setY(x2 * m.m12() + y * m.m22() + m.dy());
2048 pPoints[2].setX(x2 * m.m11() + y2 * m.m21() + m.dx());
2049 pPoints[2].setY(x2 * m.m12() + y2 * m.m22() + m.dy());
2050 pPoints[3].setX(x * m.m11() + y2 * m.m21() + m.dx());
2051 pPoints[3].setY(x * m.m12() + y2 * m.m22() + m.dy());
2053 if(PointInPoly(pPoints, 4, &pos)) {
2054 return pShape->shapeData()->name();
2062 pShape = m_pShapeList->next();
2066 return first->shapeData()->name();
2072void KivioSMLStencil::setText(
const TQString& text,
const TQString& name)
2074 KivioShape* pShape = m_pShapeList->first();
2078 if(pShape->shapeData()->name() == name)
2080 pShape->shapeData()->setText(text);
2084 pShape = m_pShapeList->next();
2088TQString KivioSMLStencil::text(
const TQString& name)
2090 KivioShape* pShape = m_pShapeList->first();
2094 if(pShape->shapeData()->name() == name)
2096 return pShape->shapeData()->text();
2099 pShape = m_pShapeList->next();
2105void KivioSMLStencil::addConnectorTarget(
const KoPoint& p)
2107 KivioConnectorTarget* target =
new KivioConnectorTarget(p.x(), p.y(), (p.x() - x())/ w(), (p.y() - y())/ h());
2108 m_pConnectorTargets->append(target);
2111void KivioSMLStencil::removeConnectorTarget(
const KoPoint& pos)
2113 KivioConnectorTarget* target = m_pConnectorTargets->first();
2117 if(target->position() == pos)
2119 m_pConnectorTargets->remove(target);
2123 target = m_pConnectorTargets->next();
2127bool KivioSMLStencil::hasTextBox()
const
2129 KivioShape* pShape = m_pShapeList->first();
2131 if(pShape->shapeData()->shapeType() == KivioShapeData::kstTextBox) {
2135 pShape = m_pShapeList->next();
2141TQColor KivioSMLStencil::textColor(
const TQString& textBoxName)
2143 KivioShape* shape = locateShape(textBoxName);
2148 return shape->shapeData()->textColor();
2151void KivioSMLStencil::setTextColor(
const TQString& textBoxName,
const TQColor& color)
2153 KivioShape* shape = locateShape(textBoxName);
2157 setTextColor(color);
2161 shape->shapeData()->setTextColor(color);
2164TQFont KivioSMLStencil::textFont(
const TQString& textBoxName)
2166 KivioShape* shape = locateShape(textBoxName);
2171 return shape->shapeData()->textFont();
2174void KivioSMLStencil::setTextFont(
const TQString& textBoxName,
const TQFont& font)
2176 KivioShape* shape = locateShape(textBoxName);
2183 shape->shapeData()->setTextFont(font);
2186int KivioSMLStencil::hTextAlign(
const TQString& textBoxName)
2188 KivioShape* shape = locateShape(textBoxName);
2191 return hTextAlign();
2193 return shape->shapeData()->hTextAlign();
2196int KivioSMLStencil::vTextAlign(
const TQString& textBoxName)
2198 KivioShape* shape = locateShape(textBoxName);
2201 return vTextAlign();
2203 return shape->shapeData()->vTextAlign();
2206void KivioSMLStencil::setHTextAlign(
const TQString& textBoxName,
int align)
2208 KivioShape* shape = locateShape(textBoxName);
2211 setHTextAlign(align);
2215 shape->shapeData()->setHTextAlign(align);
2218void KivioSMLStencil::setVTextAlign(
const TQString& textBoxName,
int align)
2220 KivioShape* shape = locateShape(textBoxName);
2223 setVTextAlign(align);
2227 shape->shapeData()->setVTextAlign(align);