Array resize.
This commit is contained in:
parent
e5a7b28e4b
commit
6b5f6da809
10 changed files with 157 additions and 1 deletions
|
@ -14,6 +14,8 @@ QObject( browser )
|
|||
{
|
||||
m_pvt = new BrowserCtrlPvt();
|
||||
m_pvt->setBrowser( browser );
|
||||
|
||||
connect( m_pvt, SIGNAL( arrayResized( const QString&, int ) ), this, SLOT( onArrayResized( const QString&, int ) ) );
|
||||
}
|
||||
|
||||
BrowserCtrl::~BrowserCtrl()
|
||||
|
@ -50,6 +52,11 @@ void BrowserCtrl::onValueChanged( QtProperty *p, const QVariant &value )
|
|||
m_pvt->onValueChanged( p, value );
|
||||
}
|
||||
|
||||
void BrowserCtrl::onArrayResized( const QString &name, int size )
|
||||
{
|
||||
Q_EMIT arrayResized( name, size );
|
||||
}
|
||||
|
||||
void BrowserCtrl::enableMgrConnections()
|
||||
{
|
||||
QtVariantPropertyManager *mgr = m_pvt->manager();
|
||||
|
|
|
@ -26,8 +26,12 @@ public:
|
|||
public Q_SLOTS:
|
||||
void clicked( const QModelIndex &idx );
|
||||
|
||||
Q_SIGNALS:
|
||||
void arrayResized( const QString &name, int size );
|
||||
|
||||
private Q_SLOTS:
|
||||
void onValueChanged( QtProperty *p, const QVariant &value );
|
||||
void onArrayResized( const QString &name, int size );
|
||||
|
||||
private:
|
||||
void enableMgrConnections();
|
||||
|
|
|
@ -139,6 +139,52 @@ void BrowserCtrlPvt::onArrayValueChanged( QtProperty *p, const QVariant &value )
|
|||
NLGEORGES::CFormElmArray *arr = static_cast< NLGEORGES::CFormElmArray* >( m_currentNode );
|
||||
std::string formName;
|
||||
arr->getFormName( formName, NULL );
|
||||
|
||||
int newSize = value.toInt();
|
||||
int oldSize = arr->Elements.size();
|
||||
|
||||
if( newSize == oldSize )
|
||||
return;
|
||||
|
||||
if( newSize < oldSize )
|
||||
{
|
||||
for( int i = newSize; i < oldSize; i++ )
|
||||
{
|
||||
delete arr->Elements[ i ].Element;
|
||||
}
|
||||
|
||||
arr->Elements.resize( newSize );
|
||||
}
|
||||
else
|
||||
{
|
||||
arr->Elements.resize( newSize );
|
||||
|
||||
|
||||
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;
|
||||
|
||||
QString idx;
|
||||
|
||||
for( int i = oldSize; i < newSize; i++ )
|
||||
{
|
||||
idx.clear();
|
||||
idx += "[";
|
||||
idx += QString::number( i );
|
||||
idx += "]";
|
||||
|
||||
bool b;
|
||||
b = arr->createNodeByName( idx.toUtf8().constData(), &parentDfn, indexDfn, &nodeDfn, &type, &node, entryType, isArray, created );
|
||||
}
|
||||
}
|
||||
|
||||
QString name = formName.c_str();
|
||||
Q_EMIT arrayResized( name, newSize );
|
||||
}
|
||||
|
||||
void BrowserCtrlPvt::onValueChanged( QtProperty *p, const QVariant &value )
|
||||
|
|
|
@ -31,6 +31,9 @@ public:
|
|||
void setRootNode( NLGEORGES::CFormElm *root ){ m_rootNode = root; }
|
||||
void setBrowser( QtTreePropertyBrowser *browser ){ m_browser = browser; }
|
||||
|
||||
Q_SIGNALS:
|
||||
void arrayResized( const QString &name, int size );
|
||||
|
||||
private:
|
||||
void setupStruct( NLGEORGES::UFormElm *node );
|
||||
void setupArray( NLGEORGES::UFormElm *node );
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace GeorgesQt
|
|||
|
||||
CFormItem::~CFormItem()
|
||||
{
|
||||
qDeleteAll(childItems);
|
||||
clearChildren();
|
||||
}
|
||||
|
||||
void CFormItem::appendChild(CFormItem *item)
|
||||
|
@ -214,6 +214,29 @@ namespace GeorgesQt
|
|||
return QIcon();
|
||||
}
|
||||
|
||||
CFormItem* CFormItem::findItem( const QString &formName )
|
||||
{
|
||||
CFormItem *item = NULL;
|
||||
|
||||
if( _FormName.c_str() == formName )
|
||||
return this;
|
||||
|
||||
for( int i = 0; i < childItems.count(); i++ )
|
||||
{
|
||||
item = childItems[ i ]->findItem( formName );
|
||||
if( item != NULL )
|
||||
return item;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
void CFormItem::clearChildren()
|
||||
{
|
||||
qDeleteAll( childItems );
|
||||
childItems.clear();
|
||||
}
|
||||
|
||||
CFormItem *CFormItem::add (TSub type, const char *name, uint structId, const char *formName, uint slot, NLGEORGES::UForm *formPtr)
|
||||
{
|
||||
CFormItem *newNode = new CFormItem();
|
||||
|
|
|
@ -72,6 +72,10 @@ namespace GeorgesQt
|
|||
|
||||
QIcon getItemImage(CFormItem *rootItem);
|
||||
|
||||
CFormItem* findItem( const QString &formName );
|
||||
|
||||
void clearChildren();
|
||||
|
||||
private:
|
||||
QList<CFormItem*> childItems;
|
||||
QList<QVariant> itemData;
|
||||
|
|
|
@ -74,6 +74,7 @@ namespace GeorgesQt
|
|||
m_ui.treeViewTabWidget->setTabEnabled (2,false);
|
||||
|
||||
m_form = 0;
|
||||
m_model = NULL;
|
||||
|
||||
m_ui.treeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
|
||||
|
@ -87,11 +88,13 @@ namespace GeorgesQt
|
|||
m_browserCtrl, SLOT(clicked(const QModelIndex&)));
|
||||
connect(m_header, SIGNAL(headerClicked(int)),
|
||||
this, SLOT(headerClicked(int)));
|
||||
connect(m_browserCtrl, SIGNAL(arrayResized(const QString&,int)), this, SLOT(onArrayResized(const QString&,int)));
|
||||
}
|
||||
|
||||
CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog()
|
||||
{
|
||||
m_browserCtrl = NULL;
|
||||
m_model = NULL;
|
||||
|
||||
delete m_form;
|
||||
qDebug() << "DTOR";
|
||||
|
@ -265,6 +268,8 @@ namespace GeorgesQt
|
|||
|
||||
setWindowTitle(loadedForm);
|
||||
// //Modules::mainWin().getTabBar();
|
||||
|
||||
m_model = model;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -446,6 +451,23 @@ namespace GeorgesQt
|
|||
//}
|
||||
}
|
||||
|
||||
void CGeorgesTreeViewDialog::onArrayResized( const QString &name, int size )
|
||||
{
|
||||
QModelIndex current = m_ui.treeView->currentIndex();
|
||||
QModelIndex parent = current.parent();
|
||||
int r = current.row();
|
||||
int c = current.column();
|
||||
|
||||
m_model->arrayResized( name, size );
|
||||
m_ui.treeView->reset();
|
||||
m_ui.treeView->expandAll();
|
||||
|
||||
QModelIndex idx = m_model->index( r, c, parent );
|
||||
if( !idx.isValid() )
|
||||
return;
|
||||
m_ui.treeView->setCurrentIndex( idx );
|
||||
}
|
||||
|
||||
void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
Q_EMIT closing();
|
||||
|
|
|
@ -47,6 +47,7 @@ namespace GeorgesQt
|
|||
{
|
||||
|
||||
class CGeorges;
|
||||
class CGeorgesFormModel;
|
||||
|
||||
class CGeorgesTreeViewDialog: public QDockWidget
|
||||
{
|
||||
|
@ -102,6 +103,8 @@ namespace GeorgesQt
|
|||
void filterRows();
|
||||
void headerClicked(int);
|
||||
|
||||
void onArrayResized( const QString &name, int size );
|
||||
|
||||
private:
|
||||
Ui::CGeorgesTreeViewDialog m_ui;
|
||||
ExpandableHeaderView *m_header;
|
||||
|
@ -116,6 +119,7 @@ namespace GeorgesQt
|
|||
bool m_modified;
|
||||
|
||||
BrowserCtrl *m_browserCtrl;
|
||||
CGeorgesFormModel *m_model;
|
||||
|
||||
}; /* CGeorgesTreeViewDialog */
|
||||
|
||||
|
|
|
@ -460,6 +460,46 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
|
|||
}
|
||||
|
||||
|
||||
void CGeorgesFormModel::arrayResized( const QString &name, int size )
|
||||
{
|
||||
CFormItem *item = m_rootItem->findItem( name );
|
||||
if( item == NULL )
|
||||
return;
|
||||
|
||||
NLGEORGES::UFormElm *elm = NULL;
|
||||
|
||||
item->form()->getRootNode().getNodeByName( &elm, name.toUtf8().constData() );
|
||||
|
||||
if( elm == NULL )
|
||||
return;
|
||||
|
||||
NLGEORGES::CFormElmArray *celm = dynamic_cast< NLGEORGES::CFormElmArray* >( elm );
|
||||
if( celm == NULL )
|
||||
return;
|
||||
|
||||
item->clearChildren();
|
||||
|
||||
for( int i = 0; i < celm->Elements.size(); i++ )
|
||||
{
|
||||
NLGEORGES::CFormElmArray::CElement &e = celm->Elements[ i ];
|
||||
|
||||
QString formName = name;
|
||||
formName += '[';
|
||||
formName += QString::number( i );
|
||||
formName += ']';
|
||||
|
||||
QString n;
|
||||
if( e.Name.empty() )
|
||||
n = "#" + QString::number( i );
|
||||
else
|
||||
n = e.Name.c_str();
|
||||
|
||||
item->add( CFormItem::Form, n.toUtf8().constData(), i, formName.toUtf8().constData(), 0, item->form() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
|
@ -74,6 +74,9 @@ namespace GeorgesQt
|
|||
{
|
||||
Q_EMIT dataChanged(index, index);
|
||||
}
|
||||
|
||||
void arrayResized( const QString &name, int size );
|
||||
|
||||
private:
|
||||
void setupModelData();
|
||||
void loadFormData(NLGEORGES::UFormElm *rootElm, CFormItem *parent);
|
||||
|
|
Loading…
Reference in a new issue