20#include "kivio_group_stencil.h"
21#include "kivio_intra_stencil_data.h"
22#include "kivio_layer.h"
28KivioGroupStencil::KivioGroupStencil()
32 m_pGroupList =
new TQPtrList<KivioStencil>;
33 m_pGroupList->setAutoDelete(
true);
35 m_x = m_y = 1000000000000.0f;
36 m_w = m_h = -10000000000.0f;
40KivioGroupStencil::~KivioGroupStencil()
50void KivioGroupStencil::paint( KivioIntraStencilData *pData )
53 KivioStencil *pStencil = m_pGroupList->first();
56 pStencil->paint(pData);
58 pStencil = m_pGroupList->next();
62void KivioGroupStencil::paintOutline( KivioIntraStencilData *pData )
65 KivioStencil *pStencil = m_pGroupList->first();
68 pStencil->paintOutline(pData);
70 pStencil = m_pGroupList->next();
74void KivioGroupStencil::paintConnectorTargets( KivioIntraStencilData *pData )
77 KivioStencil *pStencil = m_pGroupList->first();
80 pStencil->paintConnectorTargets(pData);
82 pStencil = m_pGroupList->next();
86void KivioGroupStencil::setFGColor( TQColor c )
89 KivioStencil *pStencil = m_pGroupList->first();
92 pStencil->setFGColor(c);
94 pStencil = m_pGroupList->next();
98void KivioGroupStencil::setBGColor( TQColor c )
101 KivioStencil *pStencil = m_pGroupList->first();
104 pStencil->setBGColor(c);
106 pStencil = m_pGroupList->next();
110void KivioGroupStencil::setLineWidth(
double f )
113 KivioStencil *pStencil = m_pGroupList->first();
116 pStencil->setLineWidth(f);
118 pStencil = m_pGroupList->next();
122KivioCollisionType KivioGroupStencil::checkForCollision( KoPoint *p,
double threshold )
124 KivioCollisionType colType;
127 KivioStencil *pStencil = m_pGroupList->last();
130 colType = pStencil->checkForCollision( p, threshold );
131 if( colType != kctNone && pStencil->type()!=kstConnector) {
135 pStencil = m_pGroupList->prev();
141void KivioGroupStencil::addToGroup( KivioStencil *pStencil )
143 double left, right, top, bottom;
146 m_pGroupList->append(pStencil);
149 if( m_pGroupList->count() == 1 )
158 right = pStencil->x() + pStencil->w();
159 left = pStencil->x();
161 bottom = pStencil->y() + pStencil->h();
166 m_w = m_w + (m_x - left);
169 if( right > m_x + m_w )
175 m_h = m_h + (m_y - top);
178 if( bottom > m_y + m_h )
185KivioStencil *KivioGroupStencil::duplicate()
187 KivioGroupStencil *pGroup;
188 KivioStencil *pStencil;
190 pGroup =
new KivioGroupStencil();
192 pStencil = m_pGroupList->first();
195 pGroup->addToGroup( pStencil->duplicate() );
197 pStencil = m_pGroupList->next();
200 *(pGroup->protection()) = *m_pProtection;
205bool KivioGroupStencil::loadXML(
const TQDomElement &e, KivioLayer *pLayer )
208 KivioStencil *pStencil;
210 node = e.firstChild();
211 while( !node.isNull() )
213 TQString name = node.nodeName();
215 if( name ==
"KivioGroupStencil" )
217 pStencil = pLayer->loadGroupStencil( node.toElement() );
220 addToGroup( pStencil );
224 kdDebug(43000) <<
"KivioGroupStencil::loadXML() - Error loading group stencil" << endl;
227 else if( name ==
"KivioSMLStencil" || name ==
"KivioPyStencil" )
229 pStencil = pLayer->loadSMLStencil( node.toElement() );
232 addToGroup( pStencil );
236 kdDebug(43000) <<
"KivioGroupStencil::loadXML() - Error loading group stencil" << endl;
239 else if( name ==
"KivioPluginStencil" )
241 KivioStencil *pStencil = pLayer->loadPluginStencil( node.toElement() );
244 addToGroup( pStencil );
248 kdDebug(43000) <<
"KivioGroupStencil::loadXML() - Error loading group stencil" << endl;
252 node = node.nextSibling();
258TQDomElement KivioGroupStencil::saveXML( TQDomDocument &doc )
260 TQDomElement e = doc.createElement(
"KivioGroupStencil");
262 TQDomElement stencilE;
263 KivioStencil *pStencil = m_pGroupList->first();
266 stencilE = pStencil->saveXML( doc );
268 e.appendChild( stencilE );
270 pStencil = m_pGroupList->next();
276void KivioGroupStencil::setX(
double newX )
278 double dx = newX - m_x;
281 KivioStencil *pStencil = m_pGroupList->first();
284 if( pStencil->protection()->at(kpX)==
false )
286 pStencil->setX( pStencil->x() + dx );
289 pStencil = m_pGroupList->next();
294void KivioGroupStencil::setY(
double newY )
296 double dy = newY - m_y;
299 KivioStencil *pStencil = m_pGroupList->first();
302 if( pStencil->protection()->at(kpY)==
false )
304 pStencil->setY( pStencil->y() + dy );
307 pStencil = m_pGroupList->next();
312void KivioGroupStencil::setPosition(
double newX,
double newY )
314 double dx = newX - m_x;
315 double dy = newY - m_y;
322 KivioStencil *pStencil = m_pGroupList->first();
325 if(((pStencil->type() == kstConnector) && !pStencil->connected()) ||
326 pStencil->type() != kstConnector)
328 if( pStencil->protection()->at(kpX)==
false ) {
329 newX2 = pStencil->x() + dx;
331 newX2 = pStencil->x();
334 if( pStencil->protection()->at(kpY)==
false ) {
335 newY2 = pStencil->y() + dy;
337 newY2 = pStencil->y();
340 pStencil->setPosition( newX2, newY2 );
343 pStencil = m_pGroupList->next();
348void KivioGroupStencil::setW(
double newW )
350 double percInc = newW / m_w;
356 KivioStencil *pStencil = m_pGroupList->first();
359 if(((pStencil->type() == kstConnector) && !pStencil->connected()) ||
360 pStencil->type() != kstConnector)
362 if( pStencil->protection()->at(kpX)==
false ) {
363 pStencil->setX( ((pStencil->x() - m_x) * percInc) + m_x );
366 if( pStencil->protection()->at(kpWidth)==
false ) {
367 pStencil->setW( pStencil->w() * percInc );
371 pStencil = m_pGroupList->next();
375void KivioGroupStencil::setH(
double newH )
377 double percInc = newH / m_h;
383 KivioStencil *pStencil = m_pGroupList->first();
386 if(((pStencil->type() == kstConnector) && !pStencil->connected()) ||
387 pStencil->type() != kstConnector)
389 if( pStencil->protection()->at(kpY)==
false ) {
390 pStencil->setY( ((pStencil->y() - m_y) * percInc) + m_y );
393 if( pStencil->protection()->at(kpHeight)==
false ) {
394 pStencil->setH( pStencil->h() * percInc );
398 pStencil = m_pGroupList->next();
402void KivioGroupStencil::setDimensions(
double newW,
double newH )
404 double percIncX = newW / m_w;
405 double percIncY = newH / m_h;
414 KivioStencil *pStencil = m_pGroupList->first();
417 if(((pStencil->type() == kstConnector) && !pStencil->connected()) ||
418 pStencil->type() != kstConnector)
421 if( pStencil->protection()->at(kpX)==
false ) {
422 pStencil->setX( ((pStencil->x() - m_x) * percIncX) + m_x );
424 if( pStencil->protection()->at(kpWidth)==
false ) {
425 pStencil->setW( pStencil->w() * percIncX );
430 if( pStencil->protection()->at(kpY)==
false ) {
431 pStencil->setY( ((pStencil->y() - m_y) * percIncY) + m_y );
433 if( pStencil->protection()->at(kpHeight)==
false ) {
434 pStencil->setH( pStencil->h() * percIncY );
439 pStencil = m_pGroupList->next();
444int KivioGroupStencil::generateIds(
int next )
446 KivioStencil *pStencil = m_pGroupList->first();
450 next = pStencil->generateIds( next );
452 pStencil = m_pGroupList->next();
459KivioConnectorTarget *KivioGroupStencil::connectToTarget( KivioConnectorPoint *p,
double thresh)
461 KivioConnectorTarget *pTarget;
463 KivioStencil *pStencil = m_pGroupList->first();
466 pTarget = pStencil->connectToTarget( p, thresh );
470 pStencil = m_pGroupList->next();
476KivioConnectorTarget *KivioGroupStencil::connectToTarget( KivioConnectorPoint *p,
int id )
478 KivioConnectorTarget *pTarget;
480 KivioStencil *pStencil = m_pGroupList->first();
483 pTarget = pStencil->connectToTarget( p,
id );
487 pStencil = m_pGroupList->next();
493void KivioGroupStencil::searchForConnections( KivioPage *p )
495 KivioStencil *pCur = 0;
496 KivioStencil *pStencil = m_pGroupList->first();
503 pStencil->searchForConnections( p );
506 m_pGroupList->find( pCur );
508 pStencil = m_pGroupList->next();
512void KivioGroupStencil::setTextColor( TQColor c )
514 KivioStencil *pStencil = m_pGroupList->first();
517 pStencil->setTextColor(c);
519 pStencil = m_pGroupList->next();
523void KivioGroupStencil::setText(
const TQString &text )
525 KivioStencil *pStencil = m_pGroupList->first();
528 pStencil->setText(text);
530 pStencil = m_pGroupList->next();
534TQString KivioGroupStencil::text()
536 KivioStencil *pStencil = m_pGroupList->first();
541 return pStencil->text();
544void KivioGroupStencil::setHTextAlign(
int a )
546 KivioStencil *pStencil = m_pGroupList->first();
549 pStencil->setHTextAlign(a);
551 pStencil = m_pGroupList->next();
555int KivioGroupStencil::hTextAlign()
557 KivioStencil *pStencil = m_pGroupList->first();
560 return TQt::AlignHCenter;
562 return pStencil->hTextAlign();
565void KivioGroupStencil::setVTextAlign(
int a )
567 KivioStencil *pStencil = m_pGroupList->first();
570 pStencil->setVTextAlign(a);
572 pStencil = m_pGroupList->next();
576int KivioGroupStencil::vTextAlign()
578 KivioStencil *pStencil = m_pGroupList->first();
581 return TQt::AlignVCenter;
583 return pStencil->vTextAlign();
586void KivioGroupStencil::setTextFont(
const TQFont &f )
588 KivioStencil *pStencil = m_pGroupList->first();
591 pStencil->setTextFont(f);
593 pStencil = m_pGroupList->next();
597TQFont KivioGroupStencil::textFont()
599 KivioStencil *pStencil = m_pGroupList->first();
602 return KoGlobal::defaultFont();
604 return pStencil->textFont();
607TQColor KivioGroupStencil::textColor()
609 KivioStencil *pStencil = m_pGroupList->first();
612 return TQColor(0, 0, 0);
614 return pStencil->textColor();
617int KivioGroupStencil::resizeHandlePositions()
619 return KIVIO_RESIZE_HANDLE_POSITION_ALL;
622TQString KivioGroupStencil::getTextBoxName(
const KoPoint& p)
624 int id = checkForCollision(p);
630 KivioStencil* pStencil = m_pGroupList->at(
id);
631 TQString name = TQString::number(
id) +
"-" + pStencil->getTextBoxName(p);
635void KivioGroupStencil::setText(
const TQString& text,
const TQString& name)
637 int id = name.section(
"-", 0, 0).toInt();
638 TQString n = name.section(
"-", 1);
640 m_pGroupList->at(
id)->setText(text, n);
643TQString KivioGroupStencil::text(
const TQString& name)
645 int id = name.section(
"-", 0, 0).toInt();
646 TQString n = name.section(
"-", 1);
648 return m_pGroupList->at(
id)->text(n);
651int KivioGroupStencil::checkForCollision(
const KoPoint& p)
653 KivioStencil *pStencil = m_pGroupList->first();
659 if(pStencil->checkForCollision(&pos, 4.0) != kctNone) {
663 pStencil = m_pGroupList->next();
670bool KivioGroupStencil::hasTextBox()
const
672 KivioStencil *pStencil = m_pGroupList->first();
676 if(pStencil->hasTextBox()) {
680 pStencil = m_pGroupList->next();
686TQColor KivioGroupStencil::textColor(
const TQString& textBoxName)
688 int id = textBoxName.section(
"-", 0, 0).toInt();
689 TQString n = textBoxName.section(
"-", 1);
691 return m_pGroupList->at(
id)->textColor(n);
694void KivioGroupStencil::setTextColor(
const TQString& textBoxName,
const TQColor& color)
696 int id = textBoxName.section(
"-", 0, 0).toInt();
697 TQString n = textBoxName.section(
"-", 1);
699 m_pGroupList->at(
id)->setTextColor(n, color);
702TQFont KivioGroupStencil::textFont(
const TQString& textBoxName)
704 int id = textBoxName.section(
"-", 0, 0).toInt();
705 TQString n = textBoxName.section(
"-", 1);
707 return m_pGroupList->at(
id)->textFont(n);
710void KivioGroupStencil::setTextFont(
const TQString& textBoxName,
const TQFont& font)
712 int id = textBoxName.section(
"-", 0, 0).toInt();
713 TQString n = textBoxName.section(
"-", 1);
715 m_pGroupList->at(
id)->setTextFont(n, font);
718int KivioGroupStencil::hTextAlign(
const TQString& textBoxName)
720 int id = textBoxName.section(
"-", 0, 0).toInt();
721 TQString n = textBoxName.section(
"-", 1);
723 return m_pGroupList->at(
id)->hTextAlign(n);
726int KivioGroupStencil::vTextAlign(
const TQString& textBoxName)
728 int id = textBoxName.section(
"-", 0, 0).toInt();
729 TQString n = textBoxName.section(
"-", 1);
731 return m_pGroupList->at(
id)->vTextAlign(n);
734void KivioGroupStencil::setHTextAlign(
const TQString& textBoxName,
int align)
736 int id = textBoxName.section(
"-", 0, 0).toInt();
737 TQString n = textBoxName.section(
"-", 1);
739 m_pGroupList->at(
id)->setHTextAlign(n, align);
742void KivioGroupStencil::setVTextAlign(
const TQString& textBoxName,
int align)
744 int id = textBoxName.section(
"-", 0, 0).toInt();
745 TQString n = textBoxName.section(
"-", 1);
747 m_pGroupList->at(
id)->setVTextAlign(n, align);