19#include "kivio_custom_drag_data.h"
20#include "kivio_fill_style.h"
21#include "kivio_intra_stencil_data.h"
22#include "kivio_painter.h"
23#include "kivio_stencil.h"
25#include <KoZoomHandler.h>
27#include <KIvioStencilIface.h>
29KivioStencil::KivioStencil()
43 m_pProtection =
new TQBitArray(NUM_PROTECTIONS);
44 m_pCanProtect =
new TQBitArray(NUM_PROTECTIONS);
46 for(
int i = 0; i < NUM_PROTECTIONS; i++ )
48 m_pProtection->clearBit(i);
49 m_pCanProtect->setBit(i);
55 iface =
new KivioStencilIface(
this);
58KivioStencil::~KivioStencil()
60 kdDebug(43000)<<
" KivioStencil::~KivioStencil() !"<<
this<<endl;
70KoRect KivioStencil::rect()
72 return KoRect( m_x, m_y, m_w, m_h );
76bool KivioStencil::loadXML(
const TQDomElement & )
81TQDomElement KivioStencil::saveXML( TQDomDocument &doc )
83 return doc.createElement(
"");
86void KivioStencil::paint( KivioIntraStencilData * )
93void KivioStencil::paintOutline( KivioIntraStencilData * )
97void KivioStencil::paintConnectorTargets( KivioIntraStencilData * )
101void KivioStencil::paintSelectionHandles( KivioIntraStencilData *pData )
103 int newX, newY, newW, newH;
112 KoZoomHandler* zoomHandler = pData->zoomHandler;
114 KivioPainter *painter = pData->painter;
116 newX = zoomHandler->zoomItX(m_x - tqRound(lineWidth() / 2));
117 newY = zoomHandler->zoomItY(m_y - tqRound(lineWidth() / 2));
118 newW = zoomHandler->zoomItX(m_w + lineWidth() + 1);
119 newH = zoomHandler->zoomItY(m_h + lineWidth() + 1);
121 painter->saveState();
122 painter->setTranslation(newX, newY);
123 rotatePainter(pData);
125 painter->drawSelectionBox(TQRect(0, 0, newW, newH));
128 if( m_pProtection->at( kpWidth ) ||
129 m_pProtection->at( kpHeight ) )
131 painter->drawHandle( 0, 0, KivioPainter::cpfLock );
132 painter->drawHandle( newW, 0, KivioPainter::cpfLock );
133 painter->drawHandle( 0, newH, KivioPainter::cpfLock );
134 painter->drawHandle( newW, newH, KivioPainter::cpfLock );
138 painter->drawHandle( 0, 0, 0 );
139 painter->drawHandle( newW, 0, 0 );
140 painter->drawHandle( 0, newH, 0 );
141 painter->drawHandle( newW, newH, 0 );
145 if( m_pProtection->at( kpHeight ) ||
146 m_pProtection->at( kpAspect ) )
148 painter->drawHandle( newW / 2, 0, KivioPainter::cpfLock );
149 painter->drawHandle( newW / 2, newH, KivioPainter::cpfLock );
153 painter->drawHandle( newW / 2, 0, 0 );
154 painter->drawHandle( newW / 2, newH, 0 );
158 if( m_pProtection->at( kpWidth ) ||
159 m_pProtection->at( kpAspect ) )
161 painter->drawHandle( 0, newH / 2, KivioPainter::cpfLock );
162 painter->drawHandle( newW, newH / 2, KivioPainter::cpfLock );
166 painter->drawHandle( 0, newH / 2, 0 );
167 painter->drawHandle( newW, newH / 2, 0 );
169 painter->restoreState();
172KivioCollisionType KivioStencil::checkForCollision( KoPoint *,
double )
177void KivioStencil::addToGroup( KivioStencil * )
182void KivioStencil::customDrag( KivioCustomDragData * )
186void KivioStencil::updateGeometry()
190KivioConnectorTarget *KivioStencil::connectToTarget( KivioConnectorPoint *,
double )
195KivioConnectorTarget *KivioStencil::connectToTarget( KivioConnectorPoint *,
int )
200KoPoint KivioStencil::snapToTarget(
const KoPoint& p,
double ,
bool& hit )
207int KivioStencil::generateIds(
int nextAvailable)
209 return nextAvailable;
212void KivioStencil::searchForConnections( KivioPage * )
216void KivioStencil::searchForConnections( KivioPage *,
double )
220void KivioStencil::updateConnectorPoints(KivioConnectorPoint *,
double,
double)
226void KivioStencil::rotatePainter(KivioIntraStencilData *pData)
228 if(m_rotation != 0) {
230 m.translate(pData->zoomHandler->zoomItX(m_pinPoint.x()), pData->zoomHandler->zoomItY(m_pinPoint.y()));
231 m.rotate(m_rotation);
232 m.translate(pData->zoomHandler->zoomItX(-m_pinPoint.x()), pData->zoomHandler->zoomItY(-m_pinPoint.y()));
233 pData->painter->setWorldMatrix(m,
true);
237KoRect KivioStencil::calculateBoundingBox()
243void KivioStencil::setRotation(
int d)
246 m_pinPoint.setCoords(m_w / 2.0, m_h / 2.0);
250void KivioStencil::move(
double xOffset,
double yOffset)
256bool KivioStencil::isInRect(
const KoRect& rect)
259 retVal = rect.contains(m_x, m_y);
260 retVal = retVal && rect.contains(m_x + m_w, m_y + m_h);