Fix for bug Bug IPAL11402 ( Group on geometry isn't editable ).

This commit is contained in:
mzn 2006-03-13 10:18:53 +00:00
parent 924642c836
commit f7c91a241b
3 changed files with 130 additions and 69 deletions

View File

@ -1592,8 +1592,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
int nbSelectedGroups = 0;
for ( ; It.More(); It.Next() )
{
SMESH::SMESH_Group_var aGroup =
SMESH::IObjectToInterface<SMESH::SMESH_Group>(It.Value());
SMESH::SMESH_GroupBase_var aGroup =
SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(It.Value());
if (!aGroup->_is_nil()) {
nbSelectedGroups++;
SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, "", aGroup);
@ -1602,7 +1602,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
}
if (nbSelectedGroups == 0)
{
SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, "", SMESH::SMESH_Group::_nil());
SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, "", SMESH::SMESH_GroupBase::_nil());
aDlg->show();
}
break;

View File

@ -110,7 +110,7 @@ SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule, const char* name,
// purpose :
//=================================================================================
SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule, const char* name,
SMESH::SMESH_Group_ptr theGroup, bool modal, WFlags fl)
SMESH::SMESH_GroupBase_ptr theGroup, bool modal, WFlags fl)
: QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder |
WStyle_Title | WStyle_SysMenu | WDestructiveClose),
mySMESHGUI( theModule ),
@ -276,6 +276,12 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
myGeomGroupLine->setReadOnly(true); //VSR ???
onSelectGeomGroup(false);
if (!create)
{
myGeomGroupBtn->setEnabled(false);
myGeomGroupLine->setEnabled(false);
}
/***************************************************************/
QGridLayout* wg2Layout = new QGridLayout( wg2, 2, 3, 0, 6 );
wg2Layout->addWidget(geomObject, 0, 0);
@ -366,7 +372,7 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
connect(myGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
connect(myGeomGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
connect(mySelectColorGroup, SIGNAL(toggled(bool)), this, SLOT(onSelectColorGroup(bool)));
connect(myColorGroupLine, SIGNAL(textChanged(const QString&)), this, SLOT(onNbColorsChanged(const QString&)));
connect(aOKBtn, SIGNAL(clicked()), this, SLOT(onOK()));
connect(aApplyBtn, SIGNAL(clicked()), this, SLOT(onApply()));
@ -419,6 +425,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh)
/* init data from current selection */
myMesh = SMESH::SMESH_Mesh::_duplicate(theMesh);
myGroup = SMESH::SMESH_Group::_nil();
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
myActor = SMESH::FindActorByObject(myMesh);
SMESH::SetPickable(myActor);
@ -442,15 +449,17 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh)
// function : Init()
// purpose :
//=================================================================================
void SMESHGUI_GroupDlg::init (SMESH::SMESH_Group_ptr theGroup)
void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
{
myMesh = theGroup->GetMesh();
myGroup = SMESH::SMESH_Group::_duplicate(theGroup);
myActor = SMESH::FindActorByObject(myMesh);
if ( !myActor )
myActor = SMESH::FindActorByObject(myGroup);
SMESH::SetPickable(myActor);
myName->setText(theGroup->GetName());
myName->home(false);
myColorGroupLine->setText(QString::number(theGroup->GetColorNumber()));
myColorGroupLine->home(false);
myMeshGroupLine->setText(theGroup->GetName());
int aType = 0;
switch(theGroup->GetType()) {
@ -459,23 +468,27 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Group_ptr theGroup)
case SMESH::FACE: aType = 2; break;
case SMESH::VOLUME: aType = 3; break;
}
myTypeGroup->setButton(aType);
myName->setText(myGroup->GetName());
myName->home(false);
myGroup = SMESH::SMESH_Group::_narrow( theGroup );
myColorGroupLine->setText(QString::number(myGroup->GetColorNumber()));
myColorGroupLine->home(false);
if ( !myGroup->_is_nil() )
{
myGrpTypeGroup->setButton(0);
onGrpTypeChanged(0);
myMeshGroupLine->setText(myGroup->GetName());
myActor = SMESH::FindActorByObject(myMesh);
if ( !myActor )
myActor = SMESH::FindActorByObject(myGroup);
SMESH::SetPickable(myActor);
myCurrentLineEdit = 0;
myTypeGroup->setButton(aType);
myElements->clear();
setSelectionMode(aType);
myTypeId = aType;
myIdList.clear();
if (!theGroup->IsEmpty()) {
if (!myGroup->IsEmpty()) {
SMESH::long_array_var anElements = myGroup->GetListOfID();
int k = anElements->length();
for (int i = 0; i < k; i++) {
@ -484,6 +497,32 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Group_ptr theGroup)
}
myElements->selectAll(true);
}
}
else
{
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow( theGroup );
if ( !myGroupOnGeom->_is_nil() )
{
myGrpTypeGroup->setButton(1);
onGrpTypeChanged(1);
myActor = SMESH::FindActorByObject(myMesh);
if ( !myActor )
myActor = SMESH::FindActorByObject(myGroup);
SMESH::SetPickable(myActor);
QString aShapeName("");
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
GEOM::GEOM_Object_var aGroupShape = myGroupOnGeom->GetShape();
if (!aGroupShape->_is_nil())
{
_PTR(SObject) aGroupShapeSO = aStudy->FindObjectID(aGroupShape->GetStudyEntry());
aShapeName = aGroupShapeSO->GetName().c_str();
}
myGeomGroupLine->setText( aShapeName );
}
}
}
//=================================================================================
@ -497,7 +536,10 @@ void SMESHGUI_GroupDlg::updateButtons()
if (myGrpTypeId == 0)
enable = !myName->text().stripWhiteSpace().isEmpty() && myElements->count() > 0;
else if (myGrpTypeId == 1)
enable = !myName->text().stripWhiteSpace().isEmpty() && !CORBA::is_nil( myGeomGroup );
{
bool isEditMode = !CORBA::is_nil( myGroupOnGeom );
enable = !myName->text().stripWhiteSpace().isEmpty() && (!CORBA::is_nil( myGeomGroup ) || isEditMode);
}
QPushButton* aBtn;
aBtn = (QPushButton*) child("ok", "QPushButton");
if (aBtn) aBtn->setEnabled(enable);
@ -514,6 +556,15 @@ void SMESHGUI_GroupDlg::onNameChanged (const QString& text)
updateButtons();
}
//=================================================================================
// function : onNbColorsChanged()
// purpose :
//=================================================================================
void SMESHGUI_GroupDlg::onNbColorsChanged (const QString& text)
{
updateButtons();
}
//=================================================================================
// function : onTypeChanged()
// purpose : Group elements type radio button management
@ -634,11 +685,7 @@ bool SMESHGUI_GroupDlg::onApply()
/* init for next operation */
myName->setText("");
myColorGroupLine->setText("");
/* init for next operation */
myName->setText("");
myElements->clear();
myGroup = SMESH::SMESH_Group::_nil();
@ -687,8 +734,9 @@ bool SMESHGUI_GroupDlg::onApply()
return true;
} else if (myGrpTypeId == 1 &&
!myName->text().stripWhiteSpace().isEmpty() &&
!CORBA::is_nil(myGeomGroup))
(!CORBA::is_nil(myGeomGroup) || !CORBA::is_nil(myGroupOnGeom)))
{
if (myGroupOnGeom->_is_nil()) {
SMESH::ElementType aType = SMESH::ALL;
switch (myTypeId) {
case 0: aType = SMESH::NODE; break;
@ -701,23 +749,32 @@ bool SMESHGUI_GroupDlg::onApply()
GEOM::GEOM_IGroupOperations_var aGroupOp =
SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
SMESH::SMESH_GroupOnGeom_var aGroupOnGeom =
myMesh->CreateGroupFromGEOM(aType, myName->text(),myGeomGroup);
myGroupOnGeom = myMesh->CreateGroupFromGEOM(aType, myName->text(),myGeomGroup);
int aColorNumber = myColorGroupLine->text().toInt();
aGroupOnGeom->SetColorNumber(aColorNumber);
myGroupOnGeom->SetColorNumber(aColorNumber);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(aGroupOnGeom);
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom);
SMESH::setFileName (aMeshGroupSO, myColorGroupLine->text());
SMESH::setFileType (aMeshGroupSO,"COULEURGROUP");
mySMESHGUI->updateObjBrowser(true);
mySelectionMgr->clearSelected();
/* init for next operation */
myName->setText("");
myColorGroupLine->setText("");
myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
}
else
{
myGroupOnGeom->SetName(myName->text());
int aColorNumber = myColorGroupLine->text().toInt();
myGroupOnGeom->SetColorNumber(aColorNumber);
}
mySMESHGUI->updateObjBrowser(true);
mySelectionMgr->clearSelected();
return true;
}
@ -825,7 +882,7 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
myGeomGroupLine->setEnabled(true);
updateButtons();
} else {
SMESH::SMESH_Group_var aGroup = SMESH::IObjectToInterface<SMESH::SMESH_Group>(IO);
SMESH::SMESH_GroupBase_var aGroup = SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
if (aGroup->_is_nil())
{
myIsBusy = false;
@ -958,6 +1015,8 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
if (!myActor) {
if (!myGroup->_is_nil())
myActor = SMESH::FindActorByObject(myGroup);
else if(!myGroupOnGeom->_is_nil())
myActor = SMESH::FindActorByObject(myGroupOnGeom);
else
myActor = SMESH::FindActorByObject(myMesh);
}

View File

@ -69,7 +69,7 @@ public:
bool modal = FALSE, WFlags fl = 0 );
SMESHGUI_GroupDlg( SMESHGUI*,
const char* name,
SMESH::SMESH_Group_ptr theGroup,
SMESH::SMESH_GroupBase_ptr theGroup,
bool modal = FALSE, WFlags fl = 0 );
~SMESHGUI_GroupDlg();
@ -102,12 +102,13 @@ private slots:
void onSort();
void onNameChanged(const QString& text);
void onNbColorsChanged(const QString& text);
void onFilterAccepted();
private:
void initDialog(bool create);
void init(SMESH::SMESH_Mesh_ptr theMesh);
void init(SMESH::SMESH_Group_ptr theGroup);
void init(SMESH::SMESH_GroupBase_ptr theGroup);
void closeEvent(QCloseEvent* e);
void enterEvent (QEvent*);
void hideEvent (QHideEvent*); /* ESC key */
@ -151,6 +152,7 @@ private:
SMESH::SMESH_Mesh_var myMesh;
SMESH::SMESH_Group_var myGroup;
SMESH::SMESH_GroupOnGeom_var myGroupOnGeom;
QValueList<int> myIdList;
GEOM::GEOM_Object_var myGeomGroup;