Instead of storing the node, store the name and the node type.
This commit is contained in:
parent
0c3a1d7b23
commit
bd508d3ef4
3 changed files with 37 additions and 33 deletions
|
@ -101,6 +101,7 @@ namespace
|
||||||
item->form()->getRootNode().getNodeByName( &n, item->formName().c_str() );
|
item->form()->getRootNode().getNodeByName( &n, item->formName().c_str() );
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -121,6 +122,19 @@ BrowserCtrlPvt::~BrowserCtrlPvt()
|
||||||
m_browser = NULL;
|
m_browser = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NLGEORGES::UFormElm* BrowserCtrlPvt::getNode( const QString &name )
|
||||||
|
{
|
||||||
|
NLGEORGES::UFormElm *node = NULL;
|
||||||
|
m_rootNode->getNodeByName( &node, name.toUtf8().constData(), NULL, true );
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
NLGEORGES::UFormElm* BrowserCtrlPvt::getCurrentNode()
|
||||||
|
{
|
||||||
|
return getNode( m_currentNode.name );
|
||||||
|
}
|
||||||
|
|
||||||
void BrowserCtrlPvt::setupAtom( NLGEORGES::CFormElmStruct *st, int idx )
|
void BrowserCtrlPvt::setupAtom( NLGEORGES::CFormElmStruct *st, int idx )
|
||||||
{
|
{
|
||||||
NLGEORGES::CFormElmStruct::CFormElmStructElm &elm = st->Elements[ idx ];
|
NLGEORGES::CFormElmStruct::CFormElmStructElm &elm = st->Elements[ idx ];
|
||||||
|
@ -178,8 +192,6 @@ void BrowserCtrlPvt::setupStruct( GeorgesQt::CFormItem *node )
|
||||||
if( n == NULL )
|
if( n == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_currentNode.p = n;
|
|
||||||
|
|
||||||
setupStruct( n );
|
setupStruct( n );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,8 +201,6 @@ void BrowserCtrlPvt::setupVStruct( GeorgesQt::CFormItem *node )
|
||||||
if( n == NULL )
|
if( n == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_currentNode.p = n;
|
|
||||||
|
|
||||||
NLGEORGES::CFormElmVirtualStruct *vs = static_cast< NLGEORGES::CFormElmVirtualStruct* >( n );
|
NLGEORGES::CFormElmVirtualStruct *vs = static_cast< NLGEORGES::CFormElmVirtualStruct* >( n );
|
||||||
|
|
||||||
QtVariantProperty *p = mgr->addProperty( QVariant::String, "Dfn filename" );
|
QtVariantProperty *p = mgr->addProperty( QVariant::String, "Dfn filename" );
|
||||||
|
@ -209,7 +219,6 @@ void BrowserCtrlPvt::setupArray( GeorgesQt::CFormItem *node )
|
||||||
{
|
{
|
||||||
NLGEORGES::CFormElmArray *arr = static_cast< NLGEORGES::CFormElmArray* >( n );
|
NLGEORGES::CFormElmArray *arr = static_cast< NLGEORGES::CFormElmArray* >( n );
|
||||||
arr->getArraySize( size );
|
arr->getArraySize( size );
|
||||||
m_currentNode.p = n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString key = QObject::tr( "Array size" );
|
QString key = QObject::tr( "Array size" );
|
||||||
|
@ -242,15 +251,14 @@ void BrowserCtrlPvt::setupAtom( GeorgesQt::CFormItem *node )
|
||||||
QtVariantProperty *p = mgr->addProperty( tt, "value" );
|
QtVariantProperty *p = mgr->addProperty( tt, "value" );
|
||||||
p->setValue( v.c_str() );
|
p->setValue( v.c_str() );
|
||||||
m_browser->addProperty( p );
|
m_browser->addProperty( p );
|
||||||
|
|
||||||
m_currentNode.p = n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BrowserCtrlPvt::setupNode( GeorgesQt::CFormItem *node )
|
void BrowserCtrlPvt::setupNode( GeorgesQt::CFormItem *node )
|
||||||
{
|
{
|
||||||
m_currentNode.clear();
|
m_currentNode.clear();
|
||||||
m_currentNode.name = node->formName().c_str();
|
m_currentNode.name = node->formName().c_str();
|
||||||
|
m_currentNode.type = node->type();
|
||||||
|
|
||||||
m_rootNode = dynamic_cast< NLGEORGES::CFormElm* >( &(node->form()->getRootNode()) );
|
m_rootNode = dynamic_cast< NLGEORGES::CFormElm* >( &(node->form()->getRootNode()) );
|
||||||
|
|
||||||
if( node->isArray() )
|
if( node->isArray() )
|
||||||
|
@ -280,8 +288,10 @@ void BrowserCtrlPvt::onStructValueChanged( QtProperty *p, const QVariant &value
|
||||||
std::string k = p->propertyName().toUtf8().constData();
|
std::string k = p->propertyName().toUtf8().constData();
|
||||||
std::string v = value.toString().toUtf8().constData();
|
std::string v = value.toString().toUtf8().constData();
|
||||||
|
|
||||||
|
NLGEORGES::UFormElm *node = getCurrentNode();
|
||||||
|
|
||||||
bool created = false;
|
bool created = false;
|
||||||
m_currentNode.p->setValueByName( v.c_str(), k.c_str(), &created );
|
node->setValueByName( v.c_str(), k.c_str(), &created );
|
||||||
|
|
||||||
QString key = m_currentNode.name + "." + p->propertyName();
|
QString key = m_currentNode.name + "." + p->propertyName();
|
||||||
|
|
||||||
|
@ -297,7 +307,7 @@ void BrowserCtrlPvt::onVStructValueChanged( QtProperty *p, const QVariant &value
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NLGEORGES::CFormElmVirtualStruct *vs = static_cast< NLGEORGES::CFormElmVirtualStruct* >( m_currentNode.p );
|
NLGEORGES::CFormElmVirtualStruct *vs = static_cast< NLGEORGES::CFormElmVirtualStruct* >( getCurrentNode() );
|
||||||
vs->DfnFilename = value.toString().toUtf8().constData();
|
vs->DfnFilename = value.toString().toUtf8().constData();
|
||||||
|
|
||||||
QString key = m_currentNode.name + "." + p->propertyName();
|
QString key = m_currentNode.name + "." + p->propertyName();
|
||||||
|
@ -323,8 +333,6 @@ void BrowserCtrlPvt::createArray()
|
||||||
if( !created )
|
if( !created )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_currentNode.p = node;
|
|
||||||
|
|
||||||
NLGEORGES::CFormElmArray *arr = dynamic_cast< NLGEORGES::CFormElmArray* >( node );
|
NLGEORGES::CFormElmArray *arr = dynamic_cast< NLGEORGES::CFormElmArray* >( node );
|
||||||
QString idx = "[0]";
|
QString idx = "[0]";
|
||||||
arr->createNodeByName( idx.toUtf8().constData(), &parentDfn, indexDfn, &nodeDfn, &type, &node, entryType, isArray, created );
|
arr->createNodeByName( idx.toUtf8().constData(), &parentDfn, indexDfn, &nodeDfn, &type, &node, entryType, isArray, created );
|
||||||
|
@ -344,7 +352,10 @@ void BrowserCtrlPvt::onArrayValueChanged( QtProperty *p, const QVariant &value )
|
||||||
if( newSize < 0 )
|
if( newSize < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( m_currentNode.p == NULL )
|
|
||||||
|
NLGEORGES::UFormElm *node = getCurrentNode();
|
||||||
|
|
||||||
|
if( node == NULL )
|
||||||
{
|
{
|
||||||
if( newSize != 1 )
|
if( newSize != 1 )
|
||||||
return;
|
return;
|
||||||
|
@ -352,7 +363,7 @@ void BrowserCtrlPvt::onArrayValueChanged( QtProperty *p, const QVariant &value )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NLGEORGES::CFormElmArray *arr = static_cast< NLGEORGES::CFormElmArray* >( m_currentNode.p );
|
NLGEORGES::CFormElmArray *arr = static_cast< NLGEORGES::CFormElmArray* >( node );
|
||||||
std::string formName;
|
std::string formName;
|
||||||
arr->getFormName( formName, NULL );
|
arr->getFormName( formName, NULL );
|
||||||
|
|
||||||
|
@ -401,14 +412,11 @@ void BrowserCtrlPvt::onArrayValueChanged( QtProperty *p, const QVariant &value )
|
||||||
QString name = formName.c_str();
|
QString name = formName.c_str();
|
||||||
Q_EMIT arrayResized( name, newSize );
|
Q_EMIT arrayResized( name, newSize );
|
||||||
Q_EMIT modified();
|
Q_EMIT modified();
|
||||||
|
|
||||||
if( newSize == 0 )
|
|
||||||
m_currentNode.p = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BrowserCtrlPvt::onAtomValueChanged( QtProperty *p, const QVariant &value )
|
void BrowserCtrlPvt::onAtomValueChanged( QtProperty *p, const QVariant &value )
|
||||||
{
|
{
|
||||||
NLGEORGES::CFormElmAtom *atom = static_cast< NLGEORGES::CFormElmAtom* >( m_currentNode.p );
|
NLGEORGES::CFormElmAtom *atom = static_cast< NLGEORGES::CFormElmAtom* >( getCurrentNode() );
|
||||||
atom->setValue( value.toString().toUtf8() );
|
atom->setValue( value.toString().toUtf8() );
|
||||||
|
|
||||||
Q_EMIT modified();
|
Q_EMIT modified();
|
||||||
|
@ -417,25 +425,16 @@ void BrowserCtrlPvt::onAtomValueChanged( QtProperty *p, const QVariant &value )
|
||||||
|
|
||||||
void BrowserCtrlPvt::onValueChanged( QtProperty *p, const QVariant &value )
|
void BrowserCtrlPvt::onValueChanged( QtProperty *p, const QVariant &value )
|
||||||
{
|
{
|
||||||
if( m_currentNode.p == NULL )
|
if( m_currentNode.type == GeorgesQt::CFormItem::TYPE_VSTRUCT )
|
||||||
{
|
|
||||||
if( m_currentNode.name.isEmpty() )
|
|
||||||
return;
|
|
||||||
|
|
||||||
onArrayValueChanged( p, value );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( m_currentNode.p->isVirtualStruct() )
|
|
||||||
onVStructValueChanged( p, value );
|
onVStructValueChanged( p, value );
|
||||||
else
|
else
|
||||||
if( m_currentNode.p->isStruct() )
|
if( m_currentNode.type == GeorgesQt::CFormItem::TYPE_STRUCT )
|
||||||
onStructValueChanged( p, value );
|
onStructValueChanged( p, value );
|
||||||
else
|
else
|
||||||
if( m_currentNode.p->isArray() )
|
if( m_currentNode.type == GeorgesQt::CFormItem::TYPE_ARRAY )
|
||||||
onArrayValueChanged( p, value );
|
onArrayValueChanged( p, value );
|
||||||
else
|
else
|
||||||
if( m_currentNode.p->isAtom() )
|
if( m_currentNode.type == GeorgesQt::CFormItem::TYPE_ATOM )
|
||||||
onAtomValueChanged( p, value );
|
onAtomValueChanged( p, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,9 @@ Q_SIGNALS:
|
||||||
void vstructChanged( const QString &name );
|
void vstructChanged( const QString &name );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NLGEORGES::UFormElm* getNode( const QString &name );
|
||||||
|
NLGEORGES::UFormElm* getCurrentNode();
|
||||||
|
|
||||||
void setupStruct( NLGEORGES::UFormElm *node );
|
void setupStruct( NLGEORGES::UFormElm *node );
|
||||||
void setupAtom( NLGEORGES::CFormElmStruct *st, int idx );
|
void setupAtom( NLGEORGES::CFormElmStruct *st, int idx );
|
||||||
|
|
||||||
|
@ -91,12 +94,12 @@ private:
|
||||||
|
|
||||||
void clear()
|
void clear()
|
||||||
{
|
{
|
||||||
p = NULL;
|
type = -1;
|
||||||
name = "";
|
name = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
QString name;
|
QString name;
|
||||||
NLGEORGES::UFormElm *p;
|
int type;
|
||||||
};
|
};
|
||||||
|
|
||||||
CurrentNode m_currentNode;
|
CurrentNode m_currentNode;
|
||||||
|
|
|
@ -81,6 +81,8 @@ namespace GeorgesQt
|
||||||
bool isVStruct();
|
bool isVStruct();
|
||||||
bool isAtom();
|
bool isAtom();
|
||||||
|
|
||||||
|
TType type() const{ return _TType; }
|
||||||
|
|
||||||
QIcon getItemImage(CFormItem *rootItem);
|
QIcon getItemImage(CFormItem *rootItem);
|
||||||
|
|
||||||
CFormItem* findItem( const QString &formName );
|
CFormItem* findItem( const QString &formName );
|
||||||
|
|
Loading…
Reference in a new issue