A root node can now be set. The root node is where the evaluation will start.

This commit is contained in:
dfighter1985 2014-09-17 14:41:57 +02:00
parent 4fe0b030f5
commit aa1ac95aae
4 changed files with 46 additions and 4 deletions

View file

@ -35,7 +35,14 @@
class ExpressionEditorPvt
{
public:
ExpressionEditorPvt()
{
m_root = NULL;
}
ExpressionStore store;
ExpressionNode *m_root;
};
ExpressionEditor::ExpressionEditor( QWidget *parent ) :
@ -101,12 +108,15 @@ void ExpressionEditor::contextMenuEvent( QContextMenuEvent *e )
a = menu.addAction( "Change slot count" );
connect( a, SIGNAL( triggered() ), this, SLOT( onChangeSlotCount() ) );
}
else
if( node->isValue() )
{
a = menu.addAction( "Change value" );
connect( a, SIGNAL( triggered() ), this, SLOT( onChangeValue() ) );
}
a = menu.addAction( "Set as root" );
connect( a, SIGNAL( triggered() ), this, SLOT( onSetRoot() ) );
}
}
else
@ -273,6 +283,19 @@ void ExpressionEditor::onChangeValue()
node->setValue( newValue );
}
void ExpressionEditor::onSetRoot()
{
QList< QGraphicsItem* > l = m_scene->selectedItems();
ExpressionNode *node = static_cast< ExpressionNode* >( l[ 0 ] );
if( m_pvt->m_root != NULL )
m_pvt->m_root->setRoot( false );
m_pvt->m_root = node;
node->setRoot( true );
}
void ExpressionEditor::addExpression( const ExpressionInfo *info )
{
QTreeWidgetItem *item = findTopLevelItem( info->category );

View file

@ -47,6 +47,7 @@ private Q_SLOTS:
void onItemDblClicked( QTreeWidgetItem *item );
void onChangeSlotCount();
void onChangeValue();
void onSetRoot();
private:
void addExpression( const ExpressionInfo *info );

View file

@ -107,6 +107,7 @@ QGraphicsItem( parent )
m_variable = false;
m_isValue = false;
m_isRoot = false;
m_name = name;
@ -139,9 +140,18 @@ void ExpressionNode::paint( QPainter *painter, const QStyleOptionGraphicsItem *o
header.setHeight( m_hh );
// Draw filled rectangle, header
if( !m_isRoot )
{
c.setRed( 44 );
c.setGreen( 169 );
c.setBlue( 232 );
}
else
{
c.setRed( 255 );
c.setGreen( 0 );
c.setBlue( 0 );
}
br.setColor( c );
br.setStyle( Qt::SolidPattern );
p.setColor( c );
@ -270,6 +280,12 @@ void ExpressionNode::setValue( const QString &value )
update();
}
void ExpressionNode::setRoot( bool b )
{
m_isRoot = b;
update();
}
void ExpressionNode::mouseMoveEvent( QGraphicsSceneMouseEvent *e )
{
for( int i = 0; i < m_links.count(); i++ )

View file

@ -63,6 +63,7 @@ public:
bool isValue() const{ return m_isValue; }
void setIsValue( bool b ){ m_isValue = b; }
void setRoot( bool b );
protected:
void mouseMoveEvent( QGraphicsSceneMouseEvent *e );
@ -84,6 +85,7 @@ private:
QString m_value;
bool m_isValue;
bool m_isRoot;
};
#endif