Allow to set and change values of value nodes.

This commit is contained in:
dfighter1985 2014-09-16 15:15:31 +02:00
parent 52fa0b4fa9
commit 535e0474ad
6 changed files with 82 additions and 0 deletions

View file

@ -101,6 +101,12 @@ void ExpressionEditor::contextMenuEvent( QContextMenuEvent *e )
a = menu.addAction( "Change slot count" ); a = menu.addAction( "Change slot count" );
connect( a, SIGNAL( triggered() ), this, SLOT( onChangeSlotCount() ) ); connect( a, SIGNAL( triggered() ), this, SLOT( onChangeSlotCount() ) );
} }
if( node->isValue() )
{
a = menu.addAction( "Change value" );
connect( a, SIGNAL( triggered() ), this, SLOT( onChangeValue() ) );
}
} }
} }
else else
@ -219,6 +225,11 @@ void ExpressionEditor::onItemDblClicked( QTreeWidgetItem *item )
node->setFlags( QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable ); node->setFlags( QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable );
node->setSlotNames( info->slotNames ); node->setSlotNames( info->slotNames );
node->setVariable( info->variable ); node->setVariable( info->variable );
node->setIsValue( info->value );
if( node->isValue() )
{
node->setValue( "Value" );
}
m_scene->addItem( node ); m_scene->addItem( node );
} }
@ -241,6 +252,28 @@ void ExpressionEditor::onChangeSlotCount()
node->changeSlotCount( c ); node->changeSlotCount( c );
} }
void ExpressionEditor::onChangeValue()
{
QList< QGraphicsItem* > l = m_scene->selectedItems();
ExpressionNode *node = static_cast< ExpressionNode* >( l[ 0 ] );
QString oldValue = node->getValue();
QString newValue = QInputDialog::getText( this,
tr( "Change value" ),
tr( "Enter new value" ),
QLineEdit::Normal,
oldValue );
if( newValue.isEmpty() )
return;
if( newValue == oldValue )
return;
node->setValue( newValue );
node->update();
}
void ExpressionEditor::addExpression( const ExpressionInfo *info ) void ExpressionEditor::addExpression( const ExpressionInfo *info )
{ {
QTreeWidgetItem *item = findTopLevelItem( info->category ); QTreeWidgetItem *item = findTopLevelItem( info->category );

View file

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

View file

@ -25,9 +25,16 @@
struct ExpressionInfo struct ExpressionInfo
{ {
QString name; QString name;
bool value;
QString category; QString category;
bool variable; bool variable;
QStringList slotNames; QStringList slotNames;
ExpressionInfo()
{
value = false;
variable = false;
}
}; };
#endif #endif

View file

@ -37,6 +37,20 @@ public:
return true; return true;
} }
bool parseValue()
{
QString text = reader.readElementText( QXmlStreamReader::ErrorOnUnexpectedElement );
if( reader.hasError() )
return false;
if( text.toLower() == "true" )
m_info->value = true;
else
m_info->value = false;
return true;
}
bool parseCategory() bool parseCategory()
{ {
QString text = reader.readElementText( QXmlStreamReader::ErrorOnUnexpectedElement ); QString text = reader.readElementText( QXmlStreamReader::ErrorOnUnexpectedElement );
@ -136,6 +150,9 @@ public:
if( name == "name" ) if( name == "name" )
error = !parseName(); error = !parseName();
else else
if( name == "value" )
error = !parseValue();
else
if( name == "category" ) if( name == "category" )
error = !parseCategory(); error = !parseCategory();
else else

View file

@ -106,6 +106,7 @@ QGraphicsItem( parent )
m_hh = 20.0; m_hh = 20.0;
m_variable = false; m_variable = false;
m_isValue = false;
m_name = name; m_name = name;
@ -152,6 +153,20 @@ void ExpressionNode::paint( QPainter *painter, const QStyleOptionGraphicsItem *o
painter->setPen( p ); painter->setPen( p );
painter->drawText( header, Qt::AlignCenter, m_name ); painter->drawText( header, Qt::AlignCenter, m_name );
// Draw value if applicable
if( m_isValue )
{
QRectF vbox;
vbox.setTopLeft( QPoint( 0.0, 20.0 ) );
vbox.setWidth( header.width() );
vbox.setHeight( header.height() );
QPen vpen;
vpen.setColor( Qt::red );
painter->setPen( vpen );
painter->drawText( vbox, Qt::AlignCenter, m_value );
painter->setPen( p );
}
if( option->state & QStyle::State_Selected ) if( option->state & QStyle::State_Selected )
{ {
p.setStyle( Qt::DotLine ); p.setStyle( Qt::DotLine );

View file

@ -58,6 +58,12 @@ public:
void setVariable( bool b ){ m_variable = b; } void setVariable( bool b ){ m_variable = b; }
bool variable() const{ return m_variable; } bool variable() const{ return m_variable; }
void setValue( const QString &value ){ m_value = value; }
QString getValue() const{ return m_value; }
bool isValue() const{ return m_isValue; }
void setIsValue( bool b ){ m_isValue = b; }
protected: protected:
void mouseMoveEvent( QGraphicsSceneMouseEvent *e ); void mouseMoveEvent( QGraphicsSceneMouseEvent *e );
@ -75,6 +81,9 @@ private:
QString m_name; QString m_name;
bool m_variable; bool m_variable;
QString m_value;
bool m_isValue;
}; };
#endif #endif