Implemented 'append array entry' context menu

This commit is contained in:
dfighter1985 2014-08-27 01:14:49 +02:00
parent 205f374a2a
commit 58eb1bc9eb
4 changed files with 74 additions and 17 deletions

View file

@ -470,6 +470,19 @@ namespace GeorgesQt
m_ui.treeView->setCurrentIndex( idx );
}
void CGeorgesTreeViewDialog::onAppendArray()
{
QModelIndex idx = m_ui.treeView->currentIndex();
m_model->appendArray( idx );
m_ui.treeView->reset();
m_ui.treeView->expandAll();
m_ui.treeView->setCurrentIndex( idx );
m_browserCtrl->clicked( idx );
}
void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event)
{
Q_EMIT closing();
@ -523,7 +536,8 @@ namespace GeorgesQt
// }
if(item->isArray())
{
contextMenu.addAction("Append array entry...");
QAction *appendAction = contextMenu.addAction("Append array entry...");
connect( appendAction, SIGNAL( triggered( bool ) ), this, SLOT( onAppendArray() ) );
}
else if(item->isArrayMember())
{
@ -558,24 +572,10 @@ namespace GeorgesQt
// else if(item->getFormElm()->isAtom() && item->valueFrom() == NLGEORGES::UFormElm::ValueForm)
// contextMenu.addAction("Revert to parent/default...");
QAction *selectedItem = contextMenu.exec(QCursor::pos());
contextMenu.exec(QCursor::pos());
/*
if(selectedItem)
{
if(selectedItem->text() == "Append array entry...")
{
} // Append an array entry...
else if(selectedItem->text() == "Delete array entry...")
{
}
else if(selectedItem->text() == "Insert after array entry...")
{
}
// if(selectedItem->text() == "Add parent...")
// {
// // Get the file extension of the form so we can build a dialog pattern.
@ -624,6 +624,7 @@ namespace GeorgesQt
// }
} // if selected context menu item is valid.
*/
} // if 'm' model valid.
//if(structContext)

View file

@ -104,6 +104,7 @@ namespace GeorgesQt
void headerClicked(int);
void onArrayResized( const QString &name, int size );
void onAppendArray();
private:
Ui::CGeorgesTreeViewDialog m_ui;

View file

@ -515,6 +515,60 @@ void CGeorgesFormModel::arrayResized( const QString &name, int size )
}
}
void CGeorgesFormModel::appendArray( QModelIndex idx )
{
if( !idx.isValid() )
return;
CFormItem *item = reinterpret_cast< CFormItem* >( idx.internalPointer() );
NLGEORGES::UFormElm *elm = NULL;
item->form()->getRootNode().getNodeByName( &elm, item->formName().c_str() );
const NLGEORGES::CFormDfn *parentDfn;
const NLGEORGES::CFormDfn *nodeDfn;
uint indexDfn;
const NLGEORGES::CType *type;
NLGEORGES::UFormDfn::TEntryType entryType;
NLGEORGES::CFormElm *node;
bool created;
bool isArray;
if( elm == NULL )
{
NLGEORGES::UFormElm *uroot = &item->form()->getRootNode();
NLGEORGES::CFormElm *croot = static_cast< NLGEORGES::CFormElm* >( uroot );
croot->createNodeByName( item->formName().c_str(), &parentDfn, indexDfn, &nodeDfn, &type, &node, entryType, isArray, created );
if( !created )
return;
elm = node;
}
NLGEORGES::CFormElmArray *celm = dynamic_cast< NLGEORGES::CFormElmArray* >( elm );
if( celm == NULL )
return;
unsigned long s = celm->Elements.size();
std::string nodeIdx = "[";
nodeIdx += QString::number( s ).toUtf8().constData();
nodeIdx += "]";
celm->createNodeByName( nodeIdx.c_str(), &parentDfn, indexDfn, &nodeDfn, &type, &node, entryType, isArray, created );
if( !created )
return;
std::string name = "#";
name += QString::number( s ).toUtf8().constData();
std::string formName;
node->getFormName( formName );
item->add( CFormItem::Form, name.c_str(), s, formName.c_str(), 0, item->form(), false );
}
/******************************************************************************/

View file

@ -76,6 +76,7 @@ namespace GeorgesQt
}
void arrayResized( const QString &name, int size );
void appendArray( QModelIndex idx );
private:
void setupModelData();