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