There are more than 1 slots available now.
This commit is contained in:
parent
594443ce3b
commit
dfe108cb82
5 changed files with 50 additions and 21 deletions
|
@ -87,12 +87,18 @@ void ExpressionEditor::onDeleteSelection()
|
|||
ExpressionNode *node = dynamic_cast< ExpressionNode* >( item );
|
||||
if( node != NULL )
|
||||
{
|
||||
ExpressionLink *link = node->link();
|
||||
if( link != NULL )
|
||||
ExpressionLink *link = NULL;
|
||||
|
||||
int c = node->slotCount();
|
||||
for( int i = 0; i < c; i++ )
|
||||
{
|
||||
link->unlink();
|
||||
m_scene->removeItem( link );
|
||||
delete link;
|
||||
link = node->link( i );
|
||||
if( link != NULL )
|
||||
{
|
||||
link->unlink();
|
||||
m_scene->removeItem( link );
|
||||
delete link;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -113,7 +119,7 @@ void ExpressionEditor::onLinkItems()
|
|||
ExpressionNode *from = static_cast< ExpressionNode* >( l[ 0 ] );
|
||||
ExpressionNode *to = static_cast< ExpressionNode* >( l[ 1 ] );
|
||||
|
||||
if( ( from->link() != NULL ) || ( to->link() != NULL ) )
|
||||
if( ( from->link( 0 ) != NULL ) || ( to->link( 0 ) != NULL ) )
|
||||
{
|
||||
QMessageBox::information( this,
|
||||
tr( "Failed to link nodes" ),
|
||||
|
@ -122,7 +128,7 @@ void ExpressionEditor::onLinkItems()
|
|||
}
|
||||
|
||||
ExpressionLink *link = new ExpressionLink();
|
||||
link->link( from, to );
|
||||
link->link( from, to, 0, 0 );
|
||||
|
||||
m_scene->addItem( link );
|
||||
}
|
||||
|
|
|
@ -35,20 +35,23 @@ ExpressionLink::~ExpressionLink()
|
|||
unlink();
|
||||
}
|
||||
|
||||
void ExpressionLink::link( ExpressionNode *from, ExpressionNode *to )
|
||||
void ExpressionLink::link( ExpressionNode *from, ExpressionNode *to, int fromSlot, int toSlot )
|
||||
{
|
||||
m_from = from;
|
||||
m_to = to;
|
||||
m_from->setLink( this );
|
||||
m_to->setLink( this );
|
||||
m_from->setLink( this, fromSlot );
|
||||
m_to->setLink( this, toSlot );
|
||||
|
||||
m_fromSlot = fromSlot;
|
||||
m_toSlot = toSlot;
|
||||
|
||||
nodeMoved();
|
||||
}
|
||||
|
||||
void ExpressionLink::unlink()
|
||||
{
|
||||
m_from->setLink( NULL );
|
||||
m_to->setLink( NULL );
|
||||
m_from->setLink( NULL, m_fromSlot );
|
||||
m_to->setLink( NULL, m_toSlot );
|
||||
}
|
||||
|
||||
void ExpressionLink::nodeMoved()
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
ExpressionLink( QGraphicsItem *parent = NULL );
|
||||
~ExpressionLink();
|
||||
|
||||
void link( ExpressionNode *from, ExpressionNode *to );
|
||||
void link( ExpressionNode *from, ExpressionNode *to, int fromSlot, int toSlot );
|
||||
void unlink();
|
||||
|
||||
void nodeMoved();
|
||||
|
@ -40,6 +40,8 @@ private:
|
|||
ExpressionNode *m_from;
|
||||
ExpressionNode *m_to;
|
||||
|
||||
int m_fromSlot;
|
||||
int m_toSlot;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -98,12 +98,13 @@ private:
|
|||
ExpressionNode::ExpressionNode( QGraphicsItem *parent ) :
|
||||
QGraphicsItem( parent )
|
||||
{
|
||||
m_link = NULL;
|
||||
|
||||
m_w = 100;
|
||||
m_h = 100;
|
||||
|
||||
createSlots();
|
||||
|
||||
for( int i = 0; i < 4; i++ )
|
||||
m_links.push_back( NULL );
|
||||
}
|
||||
|
||||
ExpressionNode::~ExpressionNode()
|
||||
|
@ -168,10 +169,26 @@ QPointF ExpressionNode::slotPos( int slot ) const
|
|||
return mp;
|
||||
}
|
||||
|
||||
void ExpressionNode::setLink( ExpressionLink *link, int slot )
|
||||
{
|
||||
m_links[ slot ] = link;
|
||||
}
|
||||
|
||||
ExpressionLink* ExpressionNode::link( int slot ) const
|
||||
{
|
||||
return m_links[ slot ];
|
||||
}
|
||||
|
||||
void ExpressionNode::mouseMoveEvent( QGraphicsSceneMouseEvent *e )
|
||||
{
|
||||
if( m_link != NULL )
|
||||
m_link->nodeMoved();
|
||||
for( int i = 0; i < 4; i++ )
|
||||
{
|
||||
ExpressionLink *link = m_links[ i ];
|
||||
if( link == NULL )
|
||||
continue;
|
||||
|
||||
link->nodeMoved();
|
||||
}
|
||||
|
||||
QGraphicsItem::mouseMoveEvent( e );
|
||||
}
|
||||
|
|
|
@ -35,11 +35,13 @@ public:
|
|||
QRectF boundingRect() const;
|
||||
void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget );
|
||||
|
||||
void setLink( ExpressionLink *link ){ m_link = link; }
|
||||
ExpressionLink* link() const{ return m_link; }
|
||||
void setLink( ExpressionLink *link, int slot );
|
||||
ExpressionLink* link( int slot ) const;
|
||||
|
||||
QPointF slotPos( int slot ) const;
|
||||
|
||||
int slotCount() const{ return m_slots.count(); }
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent( QGraphicsSceneMouseEvent *e );
|
||||
|
||||
|
@ -47,12 +49,11 @@ private:
|
|||
void createSlots();
|
||||
void paintSlots( QPainter *painter );
|
||||
|
||||
ExpressionLink *m_link;
|
||||
|
||||
qreal m_w;
|
||||
qreal m_h;
|
||||
|
||||
QList< NodeSlot* > m_slots;
|
||||
QList< ExpressionLink* > m_links;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue