void QSofaListView::Modify() { void *current_Id_modifyDialog = NULL; emit Lock(true); if ( currentItem() != NULL ) { ModifyObjectFlags dialogFlags = ModifyObjectFlags(); dialogFlags.setFlagsForSofa(); ModifyObject* dialogModifyObject = NULL; if (object_.type == typeData) //user clicked on a data { current_Id_modifyDialog = object_.ptr.Data; } if (object_.type == typeNode) { current_Id_modifyDialog = object_.ptr.Node; } if(object_.type == typeObject) { current_Id_modifyDialog = object_.ptr.Object; } assert(current_Id_modifyDialog != NULL); //Opening of a dialog window automatically created std::map< void*, QDialog* >::iterator testWindow = map_modifyObjectWindow.find( current_Id_modifyDialog); if ( testWindow != map_modifyObjectWindow.end()) { //Object already being modified: no need to open a new window (*testWindow).second->raise(); emit Lock(false); return; } dialogModifyObject = new ModifyObject(current_Id_modifyDialog,currentItem(),this,dialogFlags,currentItem()->text(0).toStdString().c_str()); if(object_.type == typeData) dialogModifyObject->createDialog(object_.ptr.Data); if(object_.type == typeNode) dialogModifyObject->createDialog((Base*)object_.ptr.Node); if(object_.type == typeObject) dialogModifyObject->createDialog((Base*)object_.ptr.Object); map_modifyDialogOpened.insert( std::make_pair ( current_Id_modifyDialog, currentItem()) ); map_modifyObjectWindow.insert( std::make_pair(current_Id_modifyDialog, dialogModifyObject)); connect ( dialogModifyObject, SIGNAL( objectUpdated() ), this, SIGNAL( Updated() )); connect ( this, SIGNAL( Close() ), dialogModifyObject, SLOT( closeNow() ) ); connect ( dialogModifyObject, SIGNAL( dialogClosed(void *) ) , this, SLOT( modifyUnlock(void *))); connect ( dialogModifyObject, SIGNAL( nodeNameModification(simulation::Node*) ) , this, SLOT( nodeNameModification(simulation::Node*) )); connect ( dialogModifyObject, SIGNAL( dataModified(QString) ), this, SIGNAL( dataModified(QString) ) ); dialogModifyObject->show(); dialogModifyObject->raise(); }
void GraphModeler::openModifyObject(QTreeWidgetItem *item) { if (!item) return; Base* object = graphListener->findObject(item); BaseData* data = graphListener->findData(item); if( data == NULL && object == NULL) { assert(0); } ModifyObjectFlags dialogFlags = ModifyObjectFlags(); dialogFlags.setFlagsForModeler(); if (data) //user clicked on a data { current_Id_modifyDialog = data; } else { if(object) { current_Id_modifyDialog = object; if (object->toConfigurationSetting()) dialogFlags.HIDE_FLAG=true; } else { assert(0); } } //Unicity and identification of the windows std::map< void*, QDialog* >::iterator testWindow = map_modifyObjectWindow.find( current_Id_modifyDialog); if ( testWindow != map_modifyObjectWindow.end()) { //Object already being modified: no need to open a new window (*testWindow).second->raise(); return; } ModifyObject *dialogModify = new ModifyObject( current_Id_modifyDialog,item,this,dialogFlags,item->text(0).toStdString().c_str()); connect(dialogModify, SIGNAL(beginObjectModification(sofa::core::objectmodel::Base*)), historyManager, SLOT(beginModification(sofa::core::objectmodel::Base*))); connect(dialogModify, SIGNAL(endObjectModification(sofa::core::objectmodel::Base*)), historyManager, SLOT(endModification(sofa::core::objectmodel::Base*))); if(data) { dialogModify->createDialog(data); } if(object) { dialogModify->createDialog(object); } if(object && propertyWidget) propertyWidget->addComponent(object->getName().c_str(), object, item); map_modifyObjectWindow.insert( std::make_pair(current_Id_modifyDialog, dialogModify)); //If the item clicked is a node, we add it to the list of the element modified map_modifyDialogOpened.insert ( std::make_pair ( current_Id_modifyDialog, item ) ); connect ( dialogModify, SIGNAL( dialogClosed(void *) ) , this, SLOT( modifyUnlock(void *))); dialogModify->show(); dialogModify->raise(); }