Salome HOME
untabify
[modules/smesh.git] / src / SMESHGUI / SMESHGUI.cxx
index 03c2c9abdf63945286a4d716eef9aceffce3c3b0..4226a8a3f10cf2a12a6d905a6a24451332dbdc80 100644 (file)
 #include <SALOMEDSClient_SComponent.hxx>
 #include <SALOMEDSClient_StudyBuilder.hxx>
 #include <SALOMEDS_Study.hxx>
+#include <SALOMEDS_SObject.hxx>
 
 // OCCT includes
 #include <Standard_ErrorHandler.hxx>
     }
   }
 
+  void sortChildren(){
+    LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
+    SALOME_ListIO selected;
+    if( aSel ) {
+      aSel->selectedObjects( selected );
+      
+      if(selected.Extent()){
+        Handle(SALOME_InteractiveObject) anIObject = selected.First();
+        _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+        _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry());
+        if (aSObj) {
+          if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) {
+            SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+          }
+        }
+      }
+    }
+  }
+
   void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap)
   {
     SALOME_ListIO selected;
@@ -1982,7 +2002,7 @@ bool SMESHGUI::automaticUpdate(unsigned int requestedSize, bool* limitExceeded)
  */
 //=============================================================================
 bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh,
-                               int* entities, bool* limitExceeded )
+                                int* entities, bool* limitExceeded )
 {
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   if ( !resMgr )
@@ -2010,41 +2030,41 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh,
 
     if ( nbOdElems > 0 ) {
       if ( total + nbOdElems > updateLimit )
-       *entities = *entities & ~SMESH_Actor::e0DElements;
+        *entities = *entities & ~SMESH_Actor::e0DElements;
       else
-       exceeded = false;
+        exceeded = false;
     }
     total += nbOdElems;
 
     if ( nbEdges > 0 ) {
       if ( total + nbEdges > updateLimit )
-       *entities = *entities & ~SMESH_Actor::eEdges;
+        *entities = *entities & ~SMESH_Actor::eEdges;
       else
-       exceeded = false;
+        exceeded = false;
     }
     total += nbEdges;
 
     if ( nbFaces > 0 ) {
       if ( total + nbFaces > updateLimit )
-       *entities = *entities & ~SMESH_Actor::eFaces;
+        *entities = *entities & ~SMESH_Actor::eFaces;
       else
-       exceeded = false;
+        exceeded = false;
     }
     total += nbFaces;
 
     if ( nbVolumes > 0 ) {
       if ( total + nbVolumes > updateLimit )
-       *entities = *entities & ~SMESH_Actor::eVolumes;
+        *entities = *entities & ~SMESH_Actor::eVolumes;
       else
-       exceeded = false;
+        exceeded = false;
     }
     total += nbVolumes;
 
     if ( nbBalls > 0 ) {
       if ( total + nbBalls > updateLimit )
-       *entities = *entities & ~SMESH_Actor::eBallElem;
+        *entities = *entities & ~SMESH_Actor::eBallElem;
       else
-       exceeded = false;
+        exceeded = false;
     }
     total += nbBalls;
   }
@@ -3533,6 +3553,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       dlg->show();
       break;
     }
+  case 41:
+    ::sortChildren();
+    break;
+
   }
 
   anApp->updateActions(); //SRN: To update a Save button in the toolbar
@@ -3830,6 +3854,8 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( 301, "SHOW" );
   createSMESHAction( 302, "DISPLAY_ONLY" );
 
+  createSMESHAction( 41, "SORT_CHILD_ITEMS" );
+
   // ----- create menu --------------
   int fileId    = createMenu( tr( "MEN_FILE" ),    -1,  1 ),
       editId    = createMenu( tr( "MEN_EDIT" ),    -1,  3 ),
@@ -4512,6 +4538,10 @@ void SMESHGUI::initialize( CAM_Application* app )
 
   popupMgr()->insert( separator(), -1, -1 );
 
+  popupMgr()->insert( action( 41 ), -1, -1 );
+  popupMgr()->setRule( action( 41 ), "$component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1", QtxPopupMgr::VisibleRule );
+  popupMgr()->insert( separator(), -1, -1 );
+
   connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ),
            this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) );