#include "Edge.h" #include "Node.h" #include // ------------------------------------------------------------------------- PipelineEditor::Edge:: Edge( const Node* nsrc, const Node* ndes, const QRectF* rsrc, const QRectF* rdes ) : QGraphicsItem( NULL ) { this->setAcceptedMouseButtons( 0 ); this->m_SrcNode = nsrc; this->m_DesNode = ndes; this->m_SrcRect = rsrc; this->m_DesRect = rdes; this->adjust( ); } // ------------------------------------------------------------------------- PipelineEditor::Edge:: ~Edge( ) { } // ------------------------------------------------------------------------- const QRectF* PipelineEditor::Edge:: source( ) const { return( this->m_SrcRect ); } // ------------------------------------------------------------------------- const QRectF* PipelineEditor::Edge:: destination( ) const { return( this->m_DesRect ); } // ------------------------------------------------------------------------- void PipelineEditor::Edge:: adjust( ) { /* TODO if( this->m_Src == NULL || this->m_Des == NULL ) return; QLineF line( this->mapFromParent( this->m_Src->center( ) ), this->mapFromParent( this->m_Des->center( ) ) ); // TODO: qreal length = line.length( ); this->prepareGeometryChange( ); if( length > qreal( 20 ) ) { QPointF edgeOffset( ( line.dx( ) * qreal( 10 ) ) / length, ( line.dy( ) * qreal( 10 ) ) / length ); this->m_SrcPoint = line.p1( ) + edgeOffset; this->m_DesPoint = line.p2( ) - edgeOffset; } else this->m_SrcPoint = this->m_DesPoint = line.p1( ); */ } // ------------------------------------------------------------------------- QRectF PipelineEditor::Edge:: boundingRect( ) const { if( this->m_SrcRect == NULL || this->m_DesRect == NULL ) return( QRectF( ) ); /* qreal penWidth = 1; qreal extra = ( penWidth + this->m_ArrowSize ) / qreal( 2 ); */ qreal extra = qreal( 1 ); return( QRectF( this->m_SrcRect->center( ), QSizeF( this->m_DesRect->center( ).x( ) - this->m_SrcRect->center( ).x( ), this->m_DesRect->center( ).y( ) - this->m_SrcRect->center( ).y( ) ) ).normalized( ).adjusted( -extra, -extra, extra, extra ) ); } // ------------------------------------------------------------------------- void PipelineEditor::Edge:: paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ) { /* TODO if( this->m_Src == NULL || this->m_Des == NULL ) return; */ // TODO: QLineF line( this->m_Src->center( ), this->m_Des->center( ) ); QLineF line( this->m_SrcNode->mapToScene( this->m_SrcRect->center( ) ), this->m_DesNode->mapToScene( this->m_DesRect->center( ) ) ); if( qFuzzyCompare( line.length(), qreal( 0 ) ) ) return; // Draw the line itself painter->setPen( QPen( Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin ) ); painter->drawLine( line ); /* TODO // Draw the arrows double angle = ::acos(line.dx() / line.length()); if (line.dy() >= 0) angle = TwoPi - angle; QPointF destArrowP1 = destPoint + QPointF( sin(angle - Pi / 3) * arrowSize, cos(angle - Pi / 3) * arrowSize ); QPointF destArrowP2 = destPoint + QPointF( sin(angle - Pi + Pi / 3) * arrowSize, cos(angle - Pi + Pi / 3) * arrowSize ); QPointF center = sourcePoint + destPoint; center /= 2; painter->setBrush(Qt::black); painter->drawPolygon(QPolygonF() << line.p2() << destArrowP1 << destArrowP2); painter->drawText( center, "Edge!!!" ); */ } // eof - $RCSfile$