Salome HOME
bos #20256: [CEA 18523] Porting SMESH to int 64 bits
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_GroupDlg.cxx
index 5d33b479330ba498ca5f06d6402549de7428ce96..a231ff18a9b7205a754751c10ab99b583876c255 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -74,6 +74,7 @@
 #include <vtkActorCollection.h>
 
 // OCCT includes
+#include <TColStd_MapOfAsciiString.hxx>
 #include <TColStd_MapOfInteger.hxx>
 
 // Qt includes
@@ -522,19 +523,38 @@ QString SMESHGUI_GroupDlg::GetDefaultName(const QString& theOperation)
   return aName;
 }
 
+//=======================================================================
+//function : setDefaultName
+//purpose  : 
+//=======================================================================
+
 void  SMESHGUI_GroupDlg::setDefaultName() const
 {
   QString aResName;
-  int i=1;
-  QString aPrefix ="Group_";
-  _PTR(SObject) anObj;
-  do
+  const QString aPrefix ="Group_";
+
+  if ( myMesh->_is_nil() )
   {
-    aResName = aPrefix + QString::number( i++ );
-    anObj = SMESH::getStudy()->FindObject( aResName.toUtf8().constData() );
+    aResName = aPrefix + "1";
+  }
+  else
+  {
+    SMESH::ListOfGroups_var allGroups = myMesh->GetGroups();
+    TColStd_MapOfAsciiString allNames( allGroups->length() );
+    for ( CORBA::ULong i = 0; i < allGroups->length(); ++i )
+    {
+      CORBA::String_var name = allGroups[i]->GetName();
+      allNames.Add( name.in() );
+    }
+    int i = 1;
+    while ( true )
+    {
+      aResName = aPrefix + QString::number( i++ );
+      if ( !allNames.Contains( aResName.toUtf8().constData() ))
+        break;
+    }
   }
-  while ( anObj );
-  myName->setText(aResName); 
+  myName->setText(aResName);
 }
 
 //=================================================================================
@@ -648,7 +668,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
 
     myIdList.clear();
     if (!theGroup->IsEmpty()) {
-      SMESH::long_array_var anElements = theGroup->GetListOfID();
+      SMESH::smIdType_array_var anElements = theGroup->GetListOfID();
       int k = anElements->length();
       for (int i = 0; i < k; i++) {
         myIdList.append(anElements[i]);
@@ -747,7 +767,7 @@ void SMESHGUI_GroupDlg::updateButtons()
 // function : onNameChanged()
 // purpose  :
 //=================================================================================
-void SMESHGUI_GroupDlg::onNameChanged (const QString& text)
+void SMESHGUI_GroupDlg::onNameChanged (const QString& /*text*/)
 {
   myOldName = myName->text();
   updateButtons();
@@ -794,7 +814,7 @@ void SMESHGUI_GroupDlg::onGrpTypeChanged (int id)
 // function : onColorChanged()
 // purpose  : Color button management
 //=================================================================================
-void SMESHGUI_GroupDlg::onColorChanged(QColor theColor)
+void SMESHGUI_GroupDlg::onColorChanged(QColor /*theColor*/)
 {
   updateButtons();
 }
@@ -944,7 +964,8 @@ bool SMESHGUI_GroupDlg::onApply()
 
     if (myGroup->_is_nil()) { // creation or conversion
       // check if group on geometry is not null
-      if (!myGroupOnGeom->_is_nil() || !myGroupOnFilter->_is_nil()) {
+      if (!myGroupOnGeom->_is_nil() || !myGroupOnFilter->_is_nil())
+      {
         if (myMesh->_is_nil())
           return false;
         if ( myGroupOnGeom->_is_nil() )
@@ -958,7 +979,8 @@ bool SMESHGUI_GroupDlg::onApply()
       }
     }
 
-    if (myGroup->_is_nil()) { // creation
+    if (myGroup->_is_nil()) // creation
+    {
       if (myMesh->_is_nil())
         return false;
 
@@ -981,7 +1003,7 @@ bool SMESHGUI_GroupDlg::onApply()
         }
         else
         {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           int i, k = myElements->count();
           anIdList->length(k);
           for (i = 0; i < k; i++) {
@@ -990,10 +1012,10 @@ bool SMESHGUI_GroupDlg::onApply()
           myGroup->Add(anIdList.inout());
         }
       }
+    }
 
-
-    } else { // edition
-
+    else // edition
+    {
       resultGroup = SMESH::SMESH_GroupBase::_narrow( myGroup );
       isCreation = false;
 
@@ -1015,7 +1037,7 @@ bool SMESHGUI_GroupDlg::onApply()
             myIdList.removeAt(idx);
         }
         if (!aAddList.empty()) {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           int added = aAddList.count();
           anIdList->length(added);
           for (i = 0; i < added; i++)
@@ -1023,7 +1045,7 @@ bool SMESHGUI_GroupDlg::onApply()
           myGroup->Add(anIdList.inout());
         }
         if (!myIdList.empty()) {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           int removed = myIdList.count();
           anIdList->length(removed);
           for (i = 0; i < removed; i++)
@@ -1111,6 +1133,7 @@ bool SMESHGUI_GroupDlg::onApply()
     }
     anIsOk = true;
   }
+
   if (myGrpTypeId == 2) // group on filter
   {
     if ( myFilter->_is_nil() ) return false;
@@ -1170,7 +1193,7 @@ bool SMESHGUI_GroupDlg::onApply()
           Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
           if ( isConversion ) { // need to reset TVisualObj and actor
             SMESH::RemoveVisualObjectWithActors( anIO->getEntry(), true );
-            SMESH::Update( anIO,true);
+            SMESH::Update( anIO, true );
             myActorsList.clear();
             anActor = SMESH::FindActorByEntry( anIO->getEntry() );
             if ( !anActor ) return false;
@@ -1240,7 +1263,7 @@ void SMESHGUI_GroupDlg::onListSelectionChanged()
 
   if (myCurrentLineEdit == 0) {
     mySelectionMgr->clearSelected();
-    TColStd_MapOfInteger aIndexes;
+    SVTK_TVtkIDsMap aIndexes;
     QList<QListWidgetItem*> selItems = myElements->selectedItems();
     QListWidgetItem* anItem;
     foreach(anItem, selItems) aIndexes.Add(anItem->text().toInt());
@@ -1402,9 +1425,11 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
       SALOME_ListIteratorOfListIO anIt (aList);
       for (; anIt.More(); anIt.Next())
       {
-        aGeomGroup = GEOMBase::ConvertIOinGEOMObject(anIt.Value());
-
+        CORBA::Object_var aGroupObj = SMESH::IObjectToObject(anIt.Value());
+        if (CORBA::is_nil(aGroupObj))
+          continue;
         // Check if the object is a geometry group
+        aGeomGroup = GEOM::GEOM_Object::_narrow(aGroupObj);
         if (CORBA::is_nil(aGeomGroup))
           continue;
 
@@ -1931,7 +1956,7 @@ void SMESHGUI_GroupDlg::onAdd()
         // check if mesh is the same
         if (aSubMesh->GetFather()->GetId() == myMesh->GetId()) {
           try {
-            SMESH::long_array_var anElements = aSubMesh->GetElementsByType(aType);
+            SMESH::smIdType_array_var anElements = aSubMesh->GetElementsByType(aType);
             int k = anElements->length();
             for (int i = 0; i < k; i++) {
               QString aText = QString::number(anElements[i]);
@@ -1979,7 +2004,7 @@ void SMESHGUI_GroupDlg::onAdd()
       if (!aGroup->_is_nil()) {
         // check if mesh is the same
         if (aGroup->GetType() == aType && aGroup->GetMesh()->GetId() == myMesh->GetId()) {
-          SMESH::long_array_var anElements = aGroup->GetListOfID();
+          SMESH::smIdType_array_var anElements = aGroup->GetListOfID();
           int k = anElements->length();
           for (int i = 0; i < k; i++) {
             QString aText = QString::number(anElements[i]);
@@ -2037,7 +2062,7 @@ void SMESHGUI_GroupDlg::onAdd()
       aBelongToGeom->SetElementType(aType);
       aFilter->SetPredicate(aBelongToGeom);
 
-      SMESH::long_array_var anElements = aFilter->GetElementsId(myMesh);
+      SMESH::smIdType_array_var anElements = aFilter->GetElementsId(myMesh);
 
       int k = anElements->length();
       for (int i = 0; i < k; i++) {
@@ -2118,7 +2143,7 @@ void SMESHGUI_GroupDlg::onRemove()
           if (aSubMesh->GetFather()->GetId() == myMesh->GetId()) {
             if (aType == SMESH::NODE) {
               try {
-                SMESH::long_array_var anElements = aSubMesh->GetNodesId();
+                SMESH::smIdType_array_var anElements = aSubMesh->GetNodesId();
                 int k = anElements->length();
                 for (int i = 0; i < k; i++) {
                   QList<QListWidgetItem*> found = 
@@ -2133,7 +2158,7 @@ void SMESHGUI_GroupDlg::onRemove()
             }
             else {
               try {
-                SMESH::long_array_var anElements = aSubMesh->GetElementsId();
+                SMESH::smIdType_array_var anElements = aSubMesh->GetElementsId();
                 int k = anElements->length();
                 for (int i = 0; i < k; i++) {
                   QList<QListWidgetItem*> found = 
@@ -2160,7 +2185,7 @@ void SMESHGUI_GroupDlg::onRemove()
         if (!aGroup->_is_nil()) {
           // check if mesh is the same
           if (aGroup->GetType() == aType && aGroup->GetMesh()->GetId() == myMesh->GetId()) {
-            SMESH::long_array_var anElements = aGroup->GetListOfID();
+            SMESH::smIdType_array_var anElements = aGroup->GetListOfID();
             int k = anElements->length();
             for (int i = 0; i < k; i++) {
               QList<QListWidgetItem*> found = 
@@ -2188,15 +2213,19 @@ void SMESHGUI_GroupDlg::onSort()
   // PAL5412: sorts items in ascending by "string" value
   // myElements->sort(true);
   // myElements->update();
-  int i, k = myElements->count();
+  vtkIdType i, k = myElements->count();
   if (k > 0) {
     myIsBusy = true;
-    QList<int> aSelected;
-    std::vector<int> anArray(k);
+    QList<vtkIdType> aSelected;
+    std::vector<vtkIdType> anArray(k);
     //    QMemArray<int> anArray(k);
     // fill the array
     for (i = 0; i < k; i++) {
-      int id = myElements->item(i)->text().toInt();
+      vtkIdType id;
+      if (sizeof(vtkIdType)==8)
+        id = myElements->item(i)->text().toLongLong();
+      else
+        id = myElements->item(i)->text().toInt();
       anArray[i] = id;
       if (myElements->item(i)->isSelected())
         aSelected.append(id);