]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Post-Pro 2005, T1.5 : Multiple Delete implementation
authorjfa <jfa@opencascade.com>
Thu, 21 Apr 2005 07:10:17 +0000 (07:10 +0000)
committerjfa <jfa@opencascade.com>
Thu, 21 Apr 2005 07:10:17 +0000 (07:10 +0000)
16 files changed:
idl/VISU_Gen.idl
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISUGUI/VisuGUI_CutLinesDlg.cxx
src/VISUGUI/VisuGUI_CutPlanesDlg.cxx
src/VISU_I/VISUConfig.hh
src/VISU_I/VISU_Mesh_i.cc
src/VISU_I/VISU_Prs3d_i.hh
src/VISU_I/VISU_PrsObject_i.hh
src/VISU_I/VISU_Result_i.cc
src/VISU_I/VISU_Result_i.hh
src/VISU_I/VISU_ScalarMap_i.cc
src/VISU_I/VISU_Table_i.cc
src/VISU_I/VISU_Table_i.hh
src/VISU_I/VISU_ViewManager_i.cc
src/VISU_I/VISU_ViewManager_i.hh

index f27a904b46c35fe0c250e07be0fea1cb8af90421..8c574a57d57bb8798aad3d7a91be11fcb02f1e7f 100644 (file)
@@ -71,23 +71,40 @@ can be applied on different presentations.
                  TTIMESTAMP, /*!<Time stamp represents a subfield: the results of calculations are taken in one definite moment. */
                   TALL
                  };
+
   interface Base {
-/*!
-   Returns ID of the object.
-*/
+    /*!
+     *  Returns ID of the object.
+     */
     IdType GetID();
-/*!
-Returns the type of the presentable object
-*/
+
+    /*!
+     *  Returns the type of the presentable object
+     */
     VISUType GetType();
   };
-/*! \brief Presentable object interface
 
-Presentable object interface is the root class of all presentable objects.
-*/
-  interface PrsObject : Base{
+  /*!
+   *  \brief Removable object interface
+   *
+   *  Removable object interface is the root class of all removable objects.
+   */
+  interface RemovableObject : Base {
+    /*!
+     *  Remove object from study.
+     */
+    void RemoveFromStudy();
   };
-  //-------------------------------------------------------
+
+  /*!
+   *  \brief Presentable object interface
+   *
+   *  Presentable object interface is the root class of all presentable objects.
+   */
+  interface PrsObject : RemovableObject {
+  };
+
+//-------------------------------------------------------
 /*! \brief %Table representation interface
 
 Presentation parameters of the %Table view.
@@ -940,20 +957,25 @@ the animation will be generated on the basis of all time stamps contained in the
     void setCycling(in boolean theCycle);
   };
 
-/*! \brief Interface %Result
-
-This interface serves for inner representation of data generated in other sources. (MED object or file)
-This data is needed for further construction of graphical presentations.
-*/
-  interface Result : Base, SALOME::GenericObj{
+  /*!
+   *  \brief Interface %Result
+   *
+   *  This interface serves for inner representation of data
+   *  generated in other sources (MED object or file). This data
+   *  is needed for further construction of graphical presentations.
+   */
+  interface Result : RemovableObject, SALOME::GenericObj {
     //interface Result : Base{
-/*! Reads all data from the corresponding sources. By default the data is loaded on demand.
-*/
+    /*!
+     *  Reads all data from the corresponding sources. By default the data is loaded on demand.
+     */
     boolean BuildAll();
   };
+
   //-------------------------------------------------------
   interface ViewManager;
   interface View3D;
+
 /*! \brief %VISU_Gen interface
 
 This is the main interface of %VISU component. It is necessary for creation of
index 2b75d6d7fc68aac5fb89716314a76dfceec2495d..733e68d816fc2cde5028791e61aa2897a54bea33 100644 (file)
@@ -425,9 +425,9 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
     SALOMEDS::AttributeIOR_var     anIOR;
     
     switch (theCommandID){
-      /* ======================================================================================== */
-      /* Import Table from file                                                                  */
-      /* ======================================================================================== */
+      /* ========================================================================== */
+      /* Import Table from file                                                    */
+      /* ========================================================================== */
     case 199:
       {
        if(checkLock(aStudy)) break;
@@ -435,9 +435,9 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
        break;
       }
 
-      /* ======================================================================================== */
-      /* Import Mesh from MED, DAT file                                                                  */
-      /* ======================================================================================== */
+      /* ========================================================================== */
+      /* Import Mesh from MED, DAT file                                            */
+      /* ========================================================================== */
 
       //    case 111:
       //      {
@@ -450,9 +450,9 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
        break;
       }
 
-      /* ======================================================================================== */
-      /* Export results and mesh into a file format                                              */
-      /* ======================================================================================== */
+      /* ========================================================================== */
+      /* Export results and mesh into a file format                                */
+      /* ========================================================================== */
 
     case 122:
       {
@@ -460,15 +460,15 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
        break;
       }
 
-     /* ========================================================================== */
-     /* Visualization of Results :                                                 */
-     /* 4011 : Scalar Map                                                          */
-     /* 4012 : Deformed Shape                                                      */
-     /* 4013 : Vectors                                                             */
-     /* 4014 : Iso-Surfaces                                                        */
-     /* 4015 : Cut Planes                                                          */
-     /* 4016 : Stream Lines                                                        */
-     /* ========================================================================== */
+      /* ========================================================================== */
+      /* Visualization of Results :                                                 */
+      /* 4011 : Scalar Map                                                          */
+      /* 4012 : Deformed Shape                                                      */
+      /* 4013 : Vectors                                                             */
+      /* 4014 : Iso-Surfaces                                                        */
+      /* 4015 : Cut Planes                                                          */
+      /* 4016 : Stream Lines                                                        */
+      /* ========================================================================== */
 
     case 4011 :
       visuGUI->CreateScalarMap();
@@ -496,47 +496,47 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
       visuGUI->SelectionInfo();
       break;
 
-      /* ========================================================================================================================= */
-      /* Visualization - Wireframe                                                                                                */
-      /* ========================================================================================================================= */
+      /* ========================================================================== */
+      /* Visualization - Wireframe                                                 */
+      /* ========================================================================== */
 
     case 4211 :
       ChangeViewer(1);
       break;
 
-      /* ========================================================================================================================= */
-      /* Visualization - Surface                                                                                                  */
-      /* ========================================================================================================================= */
+      /* ========================================================================== */
+      /* Visualization - Surface                                                   */
+      /* ========================================================================== */
 
     case 4212 :
       ChangeViewer(2);
       break;
 
-      /* ========================================================================================================================= */
-      /* Visualization - Points                                                                                                           */
-      /* ========================================================================================================================= */
+      /* ========================================================================== */
+      /* Visualization - Points                                                            */
+      /* ========================================================================== */
 
     case 4213 :
       ChangeViewer(0);
       break;
 
-      /* ========================================================================================================================= */
-      /* Visualization - Erase                                                                                                    */
-      /* ========================================================================================================================= */
+      /* ========================================================================== */
+      /* Visualization - Erase                                                     */
+      /* ========================================================================== */
 
     case 422 :
       ChangeViewer(-1);
       break;
 
-      /* ========================================================================================================================= */
-      /* Visualization - Global                                                                                                           */
-      /* ========================================================================================================================= */
+      /* ========================================================================== */
+      /* Visualization - Global                                                            */
+      /* ========================================================================== */
 
       //case 423 :
                   
-      /* ========================================================================================================================= */
-      /* Visualization - Partial                                                                                                  */
-      /* ========================================================================================================================= */
+      /* ========================================================================== */
+      /* Visualization - Partial                                                   */
+      /* ========================================================================== */
 
       //case 424 :
 
@@ -624,7 +624,7 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
       }
 
 /* ======================================================================================== */
-/* Preferences for Sweeping                                                               */
+/* Preferences for Sweeping                                                                 */
 /* ======================================================================================== */
     case 52:
       {
@@ -695,7 +695,7 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
                          tr("VISU_BUT_OK") );
     return false;
   }
-  catch (std::exception& e){
+  catch (std::exception& e) {
     INFOS(e.what());
     QAD_MessageBox::warn1(QAD_Application::getDesktop(), tr ("VISU_WARNING"),
                          tr(e.what()),
@@ -1843,8 +1843,8 @@ void VisuGUI::PlotContainer( VISU::Container_i* container, int theDisplaying )
 }
 
 /*!
-  Slot : opens Table view : for Table object or SObject with table attribute selected
-*/
 Slot : opens Table view : for Table object or SObject with table attribute selected
+ */
 void VisuGUI::ShowTable() {
   SALOME_Selection* Sel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
   if( Sel->IObjectCount() !=1 )
@@ -1882,9 +1882,10 @@ void VisuGUI::ShowTable() {
 
 
 /*!
-  Slot : opens Table view : for Table object or SObject with table attribute selected
-*/
-void VisuGUI::CreateTable() {
+ *  Slot : opens Table view : for Table object or SObject with table attribute selected
+ */
+void VisuGUI::CreateTable()
+{
   SALOME_Selection* aSel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
   if( aSel->IObjectCount() !=1 )
     return;
@@ -1906,88 +1907,124 @@ void VisuGUI::CreateTable() {
 
 
 /*!
-  Slot : deletes SObject with all subobjects
-*/
 Slot : deletes SObject with all subobjects
+ */
 void VisuGUI::DeleteObject() {
+  MESSAGE("VisuGUI::DeleteObject()");
+
   SALOMEDS::Study_var aStudy = GetStudyDocument();
   if (checkLock(aStudy)) return;
 
   SALOME_Selection* aSel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
-  if( aSel->IObjectCount() !=1 )
-    return;
+  if (aSel->IObjectCount() != 1) return;
+
   Handle(SALOME_InteractiveObject) anIO = aSel->firstIObject();
-  if (anIO->hasEntry()){
-    SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry());
-    if(!aSObject->_is_nil()){
-      SALOMEDS::ChildIterator_var aChildIter = aStudy->NewChildIterator(aSObject);
-      for(aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()){
-       SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
-       CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
-       ::ErasePrs(aChildObj);
-      }
-      SALOMEDS::StudyBuilder_var aStudyBuilder = VisuGUI::NewBuilder();
-      // There is a transaction
-      aStudyBuilder->NewCommand();
-      CORBA::Object_var anObj = VISU::SObjectToObject(aSObject);
-      if(!CORBA::is_nil(anObj)){
-       VISU::Base_var aBase = VISU::Base::_narrow(anObj);
-       if(!CORBA::is_nil(aBase)){
-         VISU::VISUType aType = aBase->GetType();
-         switch (aType){
-         case VISU::TRESULT:
-           {
-             SALOMEDS::ChildIterator_var aChildIter = aStudy->NewChildIterator(aSObject);
-             for(aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()){
-               SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
-               CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
-                 if(CORBA::is_nil(aChildObj)) continue;
-                 VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aChildObj);
-                 if(CORBA::is_nil(aPrs3d)) continue;
-                 VISU::Prs3d_i* pPrs3d = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(aPrs3d).in());
-                 DeletePresentation(pPrs3d);
-             }
-             break;
-           }
-         case VISU::TTABLE:
-           {
-             SALOMEDS::ChildIterator_var aChildIter = aStudy->NewChildIterator(aSObject);
-             for(aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()){
-               SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
-               CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
-                 if(CORBA::is_nil(aChildObj)) continue;
-                 CORBA::Object_ptr aCurve = VISU::Curve::_narrow( aChildObj );
-                 if(CORBA::is_nil(aCurve)) continue;
-                 VISU::Curve_i* pCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aCurve).in());
-                 DeletePresentation(pCurve);
-             }
-             break;
-           }
-         }
-       }
+  if (!anIO->hasEntry()) return;
+
+  SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry());
+  if (aSObject->_is_nil()) return;
+
+  SALOMEDS::ChildIterator_var aChildIter = aStudy->NewChildIterator(aSObject);
+  for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) {
+    SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
+    CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
+    ::ErasePrs(aChildObj);
+  }
+
+  CORBA::Object_var anObj = VISU::SObjectToObject(aSObject);
+
+  // There is a transaction
+  SALOMEDS::StudyBuilder_var aStudyBuilder = VisuGUI::NewBuilder();
+  aStudyBuilder->NewCommand();
+
+  if (!CORBA::is_nil(anObj)) {
+    MESSAGE("VisuGUI::DeleteObject() : !CORBA::is_nil(anObj)");
+
+    VISU::RemovableObject_var aRemovableObject = VISU::RemovableObject::_narrow(anObj);
+    if (!CORBA::is_nil(aRemovableObject)) {
+      MESSAGE("VisuGUI::DeleteObject() : !CORBA::is_nil(aRemovableObject)");
+      aRemovableObject->RemoveFromStudy();
+    }
+  } else {
+    aStudyBuilder->RemoveObjectWithChildren(aSObject);
+  }
+
+  aStudyBuilder->CommitCommand();
+
+  GetActiveStudy()->unHighlightAll();
+  GetActiveStudy()->updateObjBrowser(true);
+}
+
+/*!
+ *  Slot : deletes all selected SObjects with all subobjects
+ */
+void VisuGUI::DeleteManyObjects() {
+  MESSAGE("VisuGUI::DeleteManyObjects()");
+
+  SALOMEDS::Study_var aStudy = GetStudyDocument();
+  if (checkLock(aStudy)) return;
+
+  SALOME_Selection* aSel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
+  int i, nbSelected = aSel->IObjectCount();
+  if (nbSelected < 1) return;
+
+  const char* entries [nbSelected];
+  SALOME_ListIteratorOfListIO It (aSel->StoredIObjects());
+  for (i = 0; It.More(); It.Next()) {
+    Handle(SALOME_InteractiveObject)& anIO = It.Value();
+    if (anIO->hasEntry())
+      entries[i++] = anIO->getEntry();
+  }
+  nbSelected = i;
+
+  // There is a transaction
+  SALOMEDS::StudyBuilder_var aStudyBuilder = VisuGUI::NewBuilder();
+  aStudyBuilder->NewCommand();
+
+  for (i = 0; i < nbSelected; i++) {
+    SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(entries[i]);
+    if (aSObject->_is_nil()) continue;
+
+    SALOMEDS::ChildIterator_var aChildIter = aStudy->NewChildIterator(aSObject);
+    for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) {
+      SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
+      CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
+      ::ErasePrs(aChildObj);
+    }
+
+    CORBA::Object_var anObj = VISU::SObjectToObject(aSObject);
+    if (!CORBA::is_nil(anObj)) {
+      MESSAGE("VisuGUI::DeleteManyObjects() : !CORBA::is_nil(anObj)");
+
+      VISU::RemovableObject_var aRemovableObject = VISU::RemovableObject::_narrow(anObj);
+      if (!CORBA::is_nil(aRemovableObject)) {
+        MESSAGE("VisuGUI::DeleteManyObjects() : !CORBA::is_nil(aRemovableObject)");
+        aRemovableObject->RemoveFromStudy();
       }
+    } else {
       aStudyBuilder->RemoveObjectWithChildren(aSObject);
-      aStudyBuilder->CommitCommand();
-      GetActiveStudy()->unHighlightAll();
-      GetActiveStudy()->updateObjBrowser(true);
     }
   }
-}
 
+  // Finish transaction
+  aStudyBuilder->CommitCommand();
+
+  GetActiveStudy()->unHighlightAll();
+  GetActiveStudy()->updateObjBrowser(true);
+}
 
 /*!
 Slot : deletes empty container
-*/
*  Slot : creates empty container
+ */
 void VisuGUI::CreatePlot2dView() {
   if (checkLock(GetStudyDocument())) return;
   GetVisuGen()->CreateContainer();
   GetActiveStudy()->updateObjBrowser( true );
 }
 
-
-
 /*!
-  Opens dialog box for curves creation. Acts only for selected SObject with table attribute.
-*/
 Opens dialog box for curves creation. Acts only for selected SObject with table attribute.
+ */
 void VisuGUI::PlotData() {
   SALOME_Selection* Sel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
   if( Sel->IObjectCount() !=1 )
@@ -2005,36 +2042,46 @@ void VisuGUI::PlotData() {
          SALOMEDS::GenericAttribute_var anAttr;
          SALOMEDS::AttributeName_var    aName;
          QString SOName;
-         SALOMEDS::SObject_var SO = GetActiveStudy()->getStudyDocument()->FindObjectID( table->GetObjectEntry() );
+         SALOMEDS::SObject_var SO =
+            GetActiveStudy()->getStudyDocument()->FindObjectID( table->GetObjectEntry() );
          if ( IsSObjectTable(SO) ) {
            // get name of SObject
            if ( SO->FindAttribute( anAttr, "AttributeName" ) ) {
              aName = SALOMEDS::AttributeName::_narrow( anAttr );
              SOName = aName->Value();
            }
-           Plot2d_SetupPlot2dDlg* dlg = new Plot2d_SetupPlot2dDlg( SO, QAD_Application::getDesktop() );
+           Plot2d_SetupPlot2dDlg* dlg =
+              new Plot2d_SetupPlot2dDlg( SO, QAD_Application::getDesktop() );
            if ( dlg->exec() == QDialog::Accepted ) {
              if ( !isStudyLocked( GetActiveStudy()->getStudyDocument() ) ) {
-               // if study is not locked - create new container, create curves
-               // and insert them into container, then plot container if current viewer is of VIEW_PLOT2D type
+               // if study is not locked - create new container, create curves and insert them
+               // into container, then plot container if current viewer is of VIEW_PLOT2D type
                int horIndex;
                QValueList<int> verIndices;
                dlg->getCurvesSource( horIndex, verIndices );
                if ( horIndex >= 0 && verIndices.count() > 0 ) { 
                  CORBA::Object_var aContainer = GetVisuGen()->CreateContainer();
                  if( !CORBA::is_nil( aContainer ) ) {
-                   VISU::Container_i* pContainer = dynamic_cast<VISU::Container_i*>(VISU::GetServant(aContainer).in());
+                   VISU::Container_i* pContainer =
+                      dynamic_cast<VISU::Container_i*>(VISU::GetServant(aContainer).in());
                    if ( pContainer ) {
                      for ( int i = 0; i < verIndices.count(); i++ ) {
-                       CORBA::Object_var aNewCurve = GetVisuGen()->CreateCurve( table->_this(), horIndex+1, verIndices[i]+1 );
+                       CORBA::Object_var aNewCurve =
+                          GetVisuGen()->CreateCurve( table->_this(), horIndex+1, verIndices[i]+1 );
                        if( !CORBA::is_nil( aNewCurve ) ) {
-                         VISU::Curve_i* pCrv = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aNewCurve).in());
+                         VISU::Curve_i* pCrv =
+                            dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aNewCurve).in());
                          if ( pCrv ) {
                            bool isAuto;
                            int  marker, line, lineWidth;
                            QColor color;
-                           if ( dlg->getCurveAttributes( verIndices[i], isAuto, marker, line, lineWidth, color ) && !isAuto ) {
-                             SALOMEDS::Color c; c.R = color.red()/255.; c.G = color.green()/255.; c.B = color.blue()/255.;
+                           if ( dlg->getCurveAttributes( verIndices[i], isAuto, marker,
+                                                          line, lineWidth, color ) && !isAuto ) {
+                             SALOMEDS::Color c;
+                              c.R = color.red()/255.;
+                              c.G = color.green()/255.;
+                              c.B = color.blue()/255.;
+
                              pCrv->SetColor( c );
                              pCrv->SetMarker( ( VISU::Curve::MarkerType )marker );
                              pCrv->SetLine( ( VISU::Curve::LineType )line, lineWidth );
@@ -2050,7 +2097,8 @@ void VisuGUI::PlotData() {
                }
              }
              else {
-               // if study is locked just get curves info and plot them if current viewer is of VIEW_PLOT2D type
+               // if study is locked just get curves info and plot
+                // them if current viewer is of VIEW_PLOT2D type
                Plot2d_CurveContainer container;
                dlg->getCurves( container );
                if ( !container.isEmpty() ) {
@@ -2074,7 +2122,8 @@ void VisuGUI::PlotData() {
     QString SOName;
       
     // check if Table SObject is selected
-    SALOMEDS::SObject_var SO = GetActiveStudy()->getStudyDocument()->FindObjectID( Sel->firstIObject()->getEntry() );
+    SALOMEDS::SObject_var SO =
+      GetActiveStudy()->getStudyDocument()->FindObjectID( Sel->firstIObject()->getEntry() );
     if ( IsSObjectTable(SO) ) {
       // get name of SObject
       if ( SO->FindAttribute( anAttr, "AttributeName" ) ) {
@@ -2170,8 +2219,8 @@ void VisuGUI::CreatePlot(SALOMEDS::SObject_var theTableSO) {
 
 
 /*!
-  Slot : Opens "Setup curve" dialog to set curve properties : for Curve object selected
-*/
 Slot : Opens "Setup curve" dialog to set curve properties : for Curve object selected
+ */
 void VisuGUI::CurveProperties() {
   SALOME_Selection* Sel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
   if( Sel->IObjectCount() !=1 )
@@ -2227,8 +2276,8 @@ void VisuGUI::CurveProperties() {
 
 
 /*!
-  Slot : Clears container contents : for Container object selected
-*/
 Slot : Clears container contents : for Container object selected
+ */
 void VisuGUI::ClearContainer() {
   SALOME_Selection* Sel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
   if( Sel->IObjectCount() !=1 )
@@ -2253,8 +2302,8 @@ void VisuGUI::ClearContainer() {
 }
 
 /*!
-  Slot : Edit container contents : for Container object selected
-*/
 Slot : Edit container contents : for Container object selected
+ */
 void VisuGUI::EditContainer() {
   CORBA::Object_var anObject = GetSelectedObj();
   if(CORBA::is_nil(anObject)) return;
@@ -2273,29 +2322,6 @@ void VisuGUI::EditContainer() {
 }
 
 
-void VisuGUI::DeletePrs() {
-  SALOMEDS::Study_var aStudy = GetStudyDocument();
-  if (checkLock(aStudy)) return;
-  
-  // There is a transaction
-  SALOMEDS::StudyBuilder_var aStudyBuilder = VisuGUI::NewBuilder();
-  aStudyBuilder->NewCommand();
-
-  CORBA::Object_var anObject = GetSelectedObj();
-  if ( !CORBA::is_nil( anObject ) ) {
-    // is it Prs3d object ?
-    VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(anObject).in());
-    if(aPrsObject)
-      DeletePresentation(aPrsObject);
-    // is it Curve object ?
-    VISU::Curve_i* aCurveObject = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(anObject).in());
-    if(aCurveObject)
-      DeletePresentation(aCurveObject);
-  }
-  aStudyBuilder->CommitCommand();
-}
-
-
 void VisuGUI::SaveViewParams()
 {
   if (checkLock(GetStudyDocument())) return;
@@ -2352,7 +2378,6 @@ void VisuGUI::DeleteViewParams() {
 // purpose  :
 //=====================================================================================
 void VisuGUI::ClippingPlanes() {
-  //SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
   new VisuGUI_ClippingDlg (QAD_Application::getDesktop(),"",false);
 }
 
@@ -2710,8 +2735,8 @@ int VisuGUI::checkHomoSelection()
 {
   int selMode = homoNone;
   SALOME_Selection* Sel = SALOME_Selection::Selection(GetActiveStudy()->getSelection());
-  SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
-  for ( ; It.More(); It.Next() ) {
+  SALOME_ListIteratorOfListIO It (Sel->StoredIObjects());
+  for (; It.More(); It.Next()) {
     int selNext = homoOther;
     Handle(SALOME_InteractiveObject)& anIO = It.Value();
     if ( anIO->hasEntry() ) {
@@ -2788,6 +2813,82 @@ int VisuGUI::checkHomoSelection()
   return selMode;
 }
 
+//=====================================================================================
+// function : isRemovable()
+// purpose  : 
+//=====================================================================================
+bool VisuGUI::isRemovable()
+{
+  SALOME_Selection* Sel = SALOME_Selection::Selection(GetActiveStudy()->getSelection());
+  SALOME_ListIteratorOfListIO It (Sel->StoredIObjects());
+  for (; It.More(); It.Next()) {
+    Handle(SALOME_InteractiveObject)& anIO = It.Value();
+    if (anIO->hasEntry()) {
+      SALOMEDS::Study_var aStudy = GetActiveStudy()->getStudyDocument();
+      SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry());
+      VISU::Storable::TRestoringMap pMap;
+      if (!aSObject->_is_nil()) {
+       CORBA::Object_var aCORBAObject = VISU::SObjectToObject(aSObject);
+       if (!CORBA::is_nil(aCORBAObject)) {
+         VISU::RemovableObject_var aRemovableObj = VISU::RemovableObject::_narrow(aCORBAObject);
+         if (CORBA::is_nil(aRemovableObj)) {
+            // Not removable CORBA object
+            return false;
+          }
+       } else {
+          // Can be removed, if lays directly under VISU
+          // (first sub-level) or is a child of such an object
+          string aNAME, aVisuNAME = GetVisuGen()->ComponentDataType();
+          SALOMEDS::GenericAttribute_var anAttr;
+          SALOMEDS::AttributeComment_var aComment;
+
+          bool isUnderVISU = false;
+          SALOMEDS::SObject_var aFatherSObject = aSObject->GetFather();
+          if (aFatherSObject->FindAttribute(anAttr, "AttributeComment")) {
+            aComment = SALOMEDS::AttributeComment::_narrow(anAttr);
+            aNAME = aComment->Value();
+            if (aNAME == aVisuNAME) {
+              isUnderVISU = true;
+            }
+          }
+          if (!isUnderVISU) {
+            // Not directly under VISU component, check father
+            aCORBAObject = VISU::SObjectToObject(aFatherSObject);
+            if (!CORBA::is_nil(aCORBAObject)) {
+              // Father has IOR
+              return false;
+            }
+
+            isUnderVISU = false;
+            aFatherSObject = aFatherSObject->GetFather();
+            if (aFatherSObject->FindAttribute(anAttr, "AttributeComment")) {
+              aComment = SALOMEDS::AttributeComment::_narrow(anAttr);
+              aNAME = aComment->Value();
+              if (aNAME == aVisuNAME) {
+                isUnderVISU = true;
+              }
+            }
+            if (!isUnderVISU) {
+              // Father is not directly under VISU component
+              return false;
+            }
+          }
+          //if (!IsSObjectTable(aSObject)) {
+          //  CORBA::Long aTag = 1;
+          //  SALOMEDS::SObject_var aSubObject;
+          //  if (!aSObject->FindSubObject(aTag, aSubObject) ||
+          //      !IsSObjectTable(aSubObject)) {
+          //    // Neither table, nor a set of tables
+          //    return false;
+          //  }
+          //}
+       }
+      }
+    }
+  }
+  return true;
+}
+
 //=====================================================================================
 // function : GetNbChildren() [ static ]
 // purpose  : get number of children
@@ -2810,8 +2911,8 @@ int GetNbChildren( SALOMEDS::SObject_var SO, bool refToo )
 // function : CustomPopup()
 // purpose  :
 //=====================================================================================
-bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QString & theContext,
-                         const QString & theParent, const QString & theObject)
+bool VisuGUI::CustomPopup (QAD_Desktop* parent, QPopupMenu* thePopup, const QString & theContext,
+                           const QString & theParent, const QString & theObject)
 {
   QAD_ResourceMgr* rmgr = parent->createResourceManager();
 
@@ -2829,7 +2930,7 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
       thePopup->insertItem( "Save view parameters", visuGUI, SLOT( SaveViewParams() ) );
     return false;
   }
-  if( nbSel > 1 ) {
+  if ( nbSel > 1 ) {
     int selMode = checkHomoSelection();
     if(MYDEBUG) MESSAGE("VisuGUI::CustomPopup: multiple selection : selMode = "<<selMode );
     if ( selMode == homoCurves ) {
@@ -2864,6 +2965,11 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
        thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) );
        thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) );
       }
+    } else {
+    }
+
+    if (isRemovable()) {
+      thePopup->insertItem( "Delete", visuGUI, SLOT( DeleteManyObjects() ) );
     }
     return true;
   }
@@ -2915,7 +3021,8 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
            thePopup->insertItem( "Display", visuGUI, SLOT( DisplayPrs() ) );
          thePopup->insertItem( "Display Only", visuGUI, SLOT( DisplayOnlyPrs() ) );
        }
-       if ( !aIsLocked ) thePopup->insertItem("Delete", visuGUI, SLOT(DeletePrs()));
+       //if ( !aIsLocked ) thePopup->insertItem("Delete", visuGUI, SLOT(DeletePrs()));
+       if ( !aIsLocked ) thePopup->insertItem("Delete", visuGUI, SLOT(DeleteObject()));
        break;
 
       case VISU::TCONTAINER:
@@ -3076,7 +3183,8 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
              
              thePopup->insertItem("Display Only", visuGUI, SLOT(DisplayOnlyPrs()));
            }
-           thePopup->insertItem("Delete", visuGUI, SLOT(DeletePrs()));
+           //thePopup->insertItem("Delete", visuGUI, SLOT(DeletePrs()));
+           thePopup->insertItem("Delete", visuGUI, SLOT(DeleteObject()));
            if ((aType != VISU::TMESH) && (!aIsLocked)) {
              thePopup->insertSeparator();
              thePopup->insertItem("Same As", visuGUI, SLOT(CopyPresentation()));
@@ -3598,7 +3706,8 @@ bool FNAME(SALOMEDS::SObject_var theField) { \
       if (aDlg->exec() && (aDlg->storeToPrsObject(pPresent))) { \
         delete aDlg; \
       } else { \
-        DeletePresentation(pPresent); \
+        pPresent->RemoveFromStudy(); \
+        GetActiveStudy()->updateObjBrowser(); \
         delete aDlg; \
         return false; \
       } \
@@ -4274,51 +4383,6 @@ void VisuGUI::ErasePrs(VISU::Prs3d_i* thePrs) {
   }
 }
 
-/**
- * Deletes given presentation from Data structure
- */
-void VisuGUI::DeletePresentation(VISU::Prs3d_i* thePrs) {
-  if(checkLock(GetStudyDocument()) || !thePrs) return;
-  GetActiveStudy()->unHighlightAll();
-  for(int i = 0, nbFrames = GetActiveStudy()->getStudyFramesCount(); i < nbFrames; i++)
-    if(QAD_StudyFrame* aFrame = GetActiveStudy()->getStudyFrame(i)){
-      QAD_ViewFrame* aVFrame = aFrame->getRightFrame()->getViewFrame();
-      if(VTKViewer_ViewFrame* aViewFrame = dynamic_cast<VTKViewer_ViewFrame*>(aVFrame)){
-       if(VISU_Actor* anActor = GetActor(thePrs,aViewFrame)){
-         aViewFrame->RemoveActor(anActor);
-         anActor->Delete();
-       }
-       aViewFrame->unHighlightAll();
-      }
-    }
-  thePrs->RemoveFromStudy(); 
-  GetActiveStudy()->updateObjBrowser(); //update Object browser
-}
-
-/**
- * Deletes given curve presentation from Data structure
- */
-void VisuGUI::DeletePresentation(VISU::Curve_i* theCurve) {
-  if(checkLock(GetStudyDocument()) || !theCurve) return;
-  GetActiveStudy()->unHighlightAll();
-  for(int i = 0, nbFrames = GetActiveStudy()->getStudyFramesCount(); i < nbFrames; i++)
-    if(QAD_StudyFrame* aFrame = GetActiveStudy()->getStudyFrame(i)){
-      QAD_ViewFrame* aVFrame = aFrame->getRightFrame()->getViewFrame();
-      if(Plot2d_ViewFrame* aViewFrame = dynamic_cast<Plot2d_ViewFrame*>(aVFrame)){
-       QList<Plot2d_Curve> clist;
-       aViewFrame->getCurves( clist );
-       for ( int i = 0; i < clist.count(); i++ ) {
-         if ( clist.at( i )->hasIO() && !strcmp( clist.at( i )->getIO()->getEntry(), theCurve->GetEntry() ) )
-           aViewFrame->eraseCurve( clist.at( i ) );
-       }
-       aViewFrame->Repaint();
-       aViewFrame->unHighlightAll();
-      }
-    }
-  theCurve->RemoveFromStudy(); 
-  GetActiveStudy()->updateObjBrowser(); //update Object browser
-}
-
 /**
  * Creates new actor of presentation
  */
index 0cbf43a072b55617540c9381ad11fe6ec2828b20..a65d75f8bbf12e13a6e236de32d3c52e6d76d2ea 100644 (file)
@@ -59,6 +59,7 @@ class vtkRenderer;
 namespace VISU{
   class VISU_Gen_i;
 
+  class PrsObject_i;
   class Result_i;
 
   class Prs3d_i;
@@ -154,6 +155,7 @@ class VisuGUI : public SALOMEGUI{
   
   static QString getValue(SALOMEDS::SObject_var theSObject, QString theKey);
   static int checkHomoSelection();
+  static bool isRemovable();
   
   static VISU_Actor* UpdateViewer(VISU::Prs3d_i* thePrs, bool theDispOnly=false);
   static bool IsDisplayed(VISU::Prs3d_i* thePrs);
@@ -167,8 +169,6 @@ class VisuGUI : public SALOMEGUI{
   static VISU_Actor* GetActor(VISU::Prs3d_i* thePrs, VTKViewer_ViewFrame* theViewFrame = NULL);
   
   void VisuGUI::ChangeRepresentation(VISU::PresentationType theType);
-  void DeletePresentation(VISU::Prs3d_i* thePrs);
-  void DeletePresentation(VISU::Curve_i* theCurve);
   
   void         SetState(int aState );
   void         ResetState();
@@ -249,6 +249,7 @@ public slots:
   void ShowTable();
   void CreateTable();
   void DeleteObject();
+  void DeleteManyObjects();
   void PlotData();
   void CurveProperties();
   void ClearContainer();
@@ -258,8 +259,7 @@ public slots:
   
   void SaveViewParams();
   void RestoreViewParams();
-  
-  void DeletePrs();
+
   void Rename();
   void RenameTable();
   void RenameContainer();
index a92048576ae44c5c3fe87ee0283fc5d69984cde1..354c5fce88788f35e1b652d942f89b8ce9de2b3b 100644 (file)
@@ -675,7 +675,7 @@ void VisuGUI_CutLinesDlg::accept() {
 
 void VisuGUI_CutLinesDlg::reject() {
   if (myIsCreation) {
-    visuGUI->DeletePresentation(myPrs); 
+    myPrs->RemoveFromStudy();
     myStudy->updateObjBrowser();
   }
   QDialog::reject();
index 7758df1e5f2e3cb768499dd7b63551ee6539a28f..0057db19d9b096a9144976d6f38462cd067e32c5 100644 (file)
@@ -538,7 +538,8 @@ void VisuGUI_CutPlanesDlg::accept() {
        }
       } else {
        if (myIsCreation) {
-         visuGUI->DeletePresentation(myPrs);
+          myPrs->RemoveFromStudy();
+          myStudy->updateObjBrowser();
        }
       }
     }
@@ -548,8 +549,8 @@ void VisuGUI_CutPlanesDlg::accept() {
 
 void VisuGUI_CutPlanesDlg::reject() {
   if (myIsCreation && (!isModal())) {
-    visuGUI->DeletePresentation(myPrs);
-    myStudy -> updateObjBrowser();
+    myPrs->RemoveFromStudy();
+    myStudy->updateObjBrowser();
   }
   QDialog::reject();
 }
index ca83125f74ec778ed596969614168b2017bb9cc8..f87c88730a663e8bcfef52ef8c65f45f22b5376c 100644 (file)
@@ -114,6 +114,13 @@ namespace VISU{
     static void DataToStream(std::ostringstream& theStr, const QString& theName, const double theVal);
   };
 
+  //===========================================================================
+  class RemovableObject_i : public virtual POA_VISU::RemovableObject,
+                            public virtual Storable
+  {
+  public:
+    virtual void RemoveFromStudy() = 0;
+  };
 
   //===========================================================================
   const CORBA::Boolean IsMultifile();
index 8459b5bc0faf9e15b1948e1606b73ac9da015803..00ab52bb50a5e6ae2e051b8ee16a82cf81317789 100644 (file)
 //  Author : Alexey PETROV
 //  Module : VISU
 
-#include "VISU_MeshPL.hxx"
-#include "VISU_Result_i.hh"
 #include "VISU_Mesh_i.hh"
+
+#include "VISU_Result_i.hh"
+#include "VISU_ViewManager_i.hh"
+
+#include "VISU_MeshPL.hxx"
 #include "VISU_MeshAct.h"
 
 using namespace VISU;
@@ -56,7 +59,9 @@ VISU::Mesh_i::Mesh_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject) :
 }
 
 
-void VISU::Mesh_i::RemoveFromStudy(){
+void VISU::Mesh_i::RemoveFromStudy()
+{
+  VISU::DeleteActors(this);
   VISU::RemoveFromStudy(mySObject);
 }
 
index d2a01dc3396910121d54abb1004a30c94a8b0963..20c8431919a2a5463d4bd3a1e7faf198988c9da8 100644 (file)
@@ -56,7 +56,7 @@ namespace VISU{
     Prs3d_i(Result_i* theResult, SALOMEDS::SObject_ptr theSObject = SALOMEDS::SObject::_nil());
     virtual void SameAs(const Prs3d_i* theOrigin);
     virtual ~Prs3d_i();
-    virtual void RemoveFromStudy() = 0;
+    //virtual void RemoveFromStudy() = 0;
 
   protected:
     bool myAddToStudy;
index 304df61bf57de95c61cf2eea9ff3233a36c2813e..81f2b162fd2d0be8890193577e20ec9961949b1e 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace VISU{
   class PrsObject_i : public virtual POA_VISU::PrsObject,
-                      public virtual Storable
+                      public virtual RemovableObject_i
   {
     PrsObject_i(const PrsObject_i&);
 
index d4e1ee61553726f19241a932ee11cc96c2b91ee4..30c13e228498f73b01f2e61ed5a8094563807f17 100644 (file)
 //  Module : VISU
 
 #include "VISU_Result_i.hh"
+
+#include "VISU_Prs3d_i.hh"
+#include "VISU_ViewManager_i.hh"
+
 #include "VISU_Convertor_impl.hxx"
 #include "VISU_CorbaMedConvertor.hxx"
 #include "VISU_PipeLine.hxx"
 
+#include "VISU_Actor.h"
+
+#include "VTKViewer_ViewFrame.h"
+
+#include "QAD_Desktop.h"
+#include "QAD_Application.h"
+#include "QAD_Study.h"
+#include "QAD_StudyFrame.h"
+#include "QAD_RightFrame.h"
+
 #include "QAD_Config.h"
 #include "SALOMEDS_Tool.hxx"
 #include "HDFascii.hxx"
@@ -39,6 +53,9 @@
 #include <memory>
 #include <fstream>     
 
+//#include <vtkRenderer.h>
+//#include <vtkActorCollection.h>
+
 #include <vtkUnstructuredGridReader.h>
 #include <vtkUnstructuredGridWriter.h>
 
@@ -68,11 +85,12 @@ VISU::Result_var VISU::FindResult(SALOMEDS::SObject_ptr theSObject){
   return aResult;
 }
 
-void VISU::RemoveFromStudy(SALOMEDS::SObject_ptr theSObject, int theIsAttrOnly){
-  if(!theSObject->_is_nil()){
+void VISU::RemoveFromStudy (SALOMEDS::SObject_ptr theSObject, int theIsAttrOnly)
+{
+  if (!theSObject->_is_nil()) {
     SALOMEDS::Study_var aStudy = theSObject->GetStudy();
     SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-    if(theIsAttrOnly)
+    if (theIsAttrOnly)
       aStudyBuilder->RemoveAttribute(theSObject,"AttributeIOR");
     else
       aStudyBuilder->RemoveObjectWithChildren(theSObject);
@@ -137,7 +155,24 @@ VISU::Result_i::Result_i(SALOMEDS::Study_ptr theStudy, const TSourceId& aSourceI
 }
 
 
-void VISU::Result_i::RemoveFromStudy(){
+void VISU::Result_i::RemoveFromStudy()
+{
+  // Remove presentations
+  SALOMEDS::Study_var aStudyDocument = mySObject->GetStudy();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudyDocument->NewBuilder();
+  SALOMEDS::ChildIterator_var aChildIter = aStudyDocument->NewChildIterator(mySObject);
+  for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) {
+    SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
+    CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
+    if (CORBA::is_nil(aChildObj)) continue;
+
+    VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aChildObj);
+    if (CORBA::is_nil(aPrs3d)) continue;
+
+    aPrs3d->RemoveFromStudy();
+  }
+
+  // Remove the result itself
   VISU::RemoveFromStudy(mySObject,false);
 }
 
index d172f3f94ec1442b9c41b865635cd200b93b8d31..da77676f807bda1bdc2ec0563d403b9d502b48ef 100644 (file)
@@ -34,7 +34,7 @@ class VISU_Convertor;
 
 namespace VISU{
   class Result_i : public virtual POA_VISU::Result,
-                   public virtual Storable,
+                   public virtual RemovableObject_i,
                   public virtual SALOME::GenericObj_i
   {
     Result_i();
index 2fbf7b591da9fcca3b1e34ec07096530b58af40c..3a9d84694f24c35f8d67d85c0873eb41bcd6cf4a 100644 (file)
 //  Author : Alexey PETROV
 //  Module : VISU
 
-#include "VISU_ScalarMapPL.hxx"
-#include "VISU_Result_i.hh"
 #include "VISU_ScalarMap_i.hh"
+
+#include "VISU_Result_i.hh"
+#include "VISU_ViewManager_i.hh"
+
+#include "VISU_ScalarMapPL.hxx"
 #include "VISU_ScalarMapAct.h"
+
 #include "QAD_Config.h"
 
 #include <vtkDataSetMapper.h>
@@ -79,8 +83,10 @@ VISU::ScalarMap_i::ScalarMap_i(Result_i* theResult, bool theAddToStudy, SALOMEDS
 }
 
 
-void VISU::ScalarMap_i::RemoveFromStudy(){
-  VISU::RemoveFromStudy(mySObject,false);
+void VISU::ScalarMap_i::RemoveFromStudy()
+{
+  VISU::DeleteActors(this);
+  VISU::RemoveFromStudy(mySObject, false);
 }
 
 
index d588e45c279085e0ab0ec3e629e6c18b58fc14f9..a54fe6dec45839401f4889a4f2f210dbd9cd6313 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "VISU_CutLines_i.hh"
 #include "VISU_Result_i.hh"
+#include "VISU_ViewManager_i.hh"
 
 #include <memory>      
 #include <fstream>     
@@ -250,7 +251,24 @@ const char* VISU::Table_i::GetTableTitle()
   return ""; 
 }
 
-void VISU::Table_i::RemoveFromStudy(){
+void VISU::Table_i::RemoveFromStudy()
+{
+  // Remove presentations
+  SALOMEDS::Study_var aStudyDocument = mySObj->GetStudy();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudyDocument->NewBuilder();
+  SALOMEDS::ChildIterator_var aChildIter = aStudyDocument->NewChildIterator(mySObj);
+  for (aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()) {
+    SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
+    CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
+    if (CORBA::is_nil(aChildObj)) continue;
+
+    VISU::RemovableObject_ptr aCurve = VISU::Curve::_narrow(aChildObj);
+    if (CORBA::is_nil(aCurve)) continue;
+
+    aCurve->RemoveFromStudy();
+  }
+
+  // Remove the table itself
   VISU::RemoveFromStudy(mySObj,false);
 }
 
@@ -646,8 +664,15 @@ VISU::Storable* VISU::Curve_i::Restore(SALOMEDS::SObject_ptr theSObject,
   return NULL;
 }
 
-void VISU::Curve_i::RemoveFromStudy(){
-  VISU::RemoveFromStudy(mySObj,false);
+void VISU::Curve_i::RemoveFromStudy()
+{
+  VISU::DeleteActors(this);
+  VISU::RemoveFromStudy(mySObj, false);
+}
+
+SALOMEDS::SObject_var VISU::Curve_i::GetSObject()
+{
+  return mySObj;
 }
 
 //----------------------------------------------------------------
@@ -913,7 +938,8 @@ VISU::Storable* VISU::Container_i::Restore(SALOMEDS::SObject_ptr theSObject,
   return pResent->Restore( theMap, theSObject );
 }
 
-void VISU::Container_i::RemoveFromStudy(){
+void VISU::Container_i::RemoveFromStudy()
+{
   VISU::RemoveFromStudy(mySObj,false);
 }
 
index 38311147eb692f26e04394fb18551bb38d5b5afc..5e5bcb4ddb463a4ce6daa3aeee69da29e3295086 100644 (file)
@@ -107,6 +107,8 @@ namespace VISU{
 
     virtual void RemoveFromStudy();
 
+    virtual SALOMEDS::SObject_var GetSObject();
+
   protected:
     Storable* Build(int theRestoring);
 
index 53950f0b30b83234d544a01267507318e88765b0..140c3ff22f81fd4ec26a01dbc5e8352e1f76cb8e 100644 (file)
@@ -39,6 +39,7 @@
 #include "VISU_CutLines_i.hh"
 #include "VISU_Vectors_i.hh"
 #include "VISU_StreamLines_i.hh"
+#include "VISU_Table_i.hh"
 
 #include "VISU_Table_i.hh"
 #include "VISU_ScalarBarActor.hxx"
@@ -101,57 +102,57 @@ namespace VISU{
     }
   };
 
-  class TSetViewRepresentation: public SALOME_Event{
-    VISU::View::ViewRepresentation myViewRepr;
+  class TSetViewRepresentation: public SALOME_Event {
     View_i*                        myView;
+    VISU::View::ViewRepresentation myViewRepr;
     CORBA::Boolean                 myState;
- public:
-    TSetViewRepresentationView_i*  aView, 
 public:
+    TSetViewRepresentation (View_i*  aView, 
                            VISU::View::ViewRepresentation ViewRepr,
-                           CORBA::Boolean State ):
+                           CORBA::Boolean State):
       SALOME_Event(), myViewRepr( ViewRepr ), myView( aView ), myState( State )
-    {}
-    virtual void Execute(){
+      {}
 
-  bool old = myView->IsPartShown( myViewRepr );
+    virtual void Execute() {
+      bool old = myView->IsPartShown( myViewRepr );
 
-  QAD_RightFrame* fr = myView->myStudyFrame->getRightFrame();
+      QAD_RightFrame* fr = myView->myStudyFrame->getRightFrame();
 
-  if( myView->myStudyFrame != NULL ){
-    switch( myViewRepr )
-      {
-      case VISU::View::OBJECTBROWSER:
-       if( myState!=old )
-         if( myState )
-           myView->myStudyFrame->unCompressLeft();
-         else
-           myView->myStudyFrame->compressLeft();
-       break;
-      case VISU::View::VIEWER:
-       if( myState!=old )
-         if( myState )
-           fr->unCompressUp();
-         else
-           fr->compressUp();
-       break;
-      case VISU::View::PYTHON:
-       if( myState!=old )
-         if( myState )
-           fr->unCompressLeft();
-         else
-           fr->compressLeft();
-       break;
-      case VISU::View::MESSAGES:
-       if( myState!=old )
-         if( myState )
-           fr->unCompressRight();
-         else
-           fr->compressRight();
-       break;
-      };
+      if( myView->myStudyFrame != NULL ){
+       switch( myViewRepr )
+       {
+       case VISU::View::OBJECTBROWSER:
+         if( myState!=old )
+           if( myState )
+             myView->myStudyFrame->unCompressLeft();
+           else
+             myView->myStudyFrame->compressLeft();
+         break;
+       case VISU::View::VIEWER:
+         if( myState!=old )
+           if( myState )
+             fr->unCompressUp();
+           else
+             fr->compressUp();
+         break;
+       case VISU::View::PYTHON:
+         if( myState!=old )
+           if( myState )
+             fr->unCompressLeft();
+           else
+             fr->compressLeft();
+         break;
+       case VISU::View::MESSAGES:
+         if( myState!=old )
+           if( myState )
+             fr->unCompressRight();
+           else
+             fr->compressRight();
+         break;
+       };
+      }
     }
-  }
-};
+  };
 
   class TGetViewRepresentation: public SALOME_Event
   {
@@ -183,7 +184,7 @@ namespace VISU{
       }
   };
 
-  class TSetViewWidthHeight: public SALOME_Event{
+  class TSetViewWidthHeight: public SALOME_Event {
     CORBA::Long mySize;
     bool myIsWidth;
     View_i*  myView;
@@ -209,7 +210,7 @@ namespace VISU{
       }
   };    
 
-  class TGetViewWidthHeight: public SALOME_Event{
+  class TGetViewWidthHeight: public SALOME_Event {
   public:
     typedef CORBA::Long TResult;
     TResult myResult;
@@ -232,7 +233,7 @@ namespace VISU{
            }
   };
 
-  class TSetViewPositionHorizontal: public SALOME_Event{
+  class TSetViewPositionHorizontal: public SALOME_Event {
     VISU::View::ViewPosition     myViewPos;
     View_i*                      myView;   
   public:
@@ -260,7 +261,7 @@ namespace VISU{
     }
   };
 
-  class TSetViewPositionVertical: public SALOME_Event{
+  class TSetViewPositionVertical: public SALOME_Event {
     VISU::View::ViewPosition     myViewPos;
     View_i*                      myView;
   public:
@@ -329,7 +330,7 @@ namespace VISU{
 
 
 
-  class TSavePictureEvent: public SALOME_Event{
+  class TSavePictureEvent: public SALOME_Event {
     QWidget* myWidget;
     const char* myFileName;
   public:
@@ -357,7 +358,8 @@ namespace VISU{
 
 
   void RepaintView(QAD_StudyFrame* theStudyFrame);
-  class TRepaintViewEvent: public SALOME_Event{
+
+  class TRepaintViewEvent: public SALOME_Event {
     QAD_StudyFrame* myStudyFrame;
   public:
     TRepaintViewEvent(QAD_StudyFrame* theStudyFrame):
@@ -391,7 +393,8 @@ namespace VISU{
   }
 
 
-  VISU_Actor* UpdateViewer(QAD_StudyFrame* theStudyFrame, int theDisplaing, Prs3d_i* thePrs){
+  VISU_Actor* UpdateViewer (QAD_StudyFrame* theStudyFrame, int theDisplaing, Prs3d_i* thePrs)
+  {
     VTKViewer_ViewFrame* vf = GetViewFrame(theStudyFrame);
     if (!vf) return NULL;
     if(MYDEBUG) MESSAGE("UpdateViewer - theDisplaing = "<<theDisplaing<<"; thePrs = "<<thePrs);
@@ -435,7 +438,8 @@ namespace VISU{
     RepaintView(theStudyFrame);
     return anVISUActor;
   }
-  void UpdatePlot2d(Plot2d_ViewFrame *theView,int theDisplaying, Curve_i* theCurve) {
+
+  void UpdatePlot2d (Plot2d_ViewFrame *theView,int theDisplaying, Curve_i* theCurve) {
     if(MYDEBUG) MESSAGE("UpdatePlot2d - theDisplaying = "<<theDisplaying);
     if ( !theView )
       return;
@@ -544,7 +548,7 @@ namespace VISU{
     }
   }
 
-  QAD_Study* CheckStudy( SALOMEDS::Study_ptr theStudy ) {
+  QAD_Study* CheckStudy ( SALOMEDS::Study_ptr theStudy ) {
     QAD_Desktop* aDesktop = QAD_Application::getDesktop();
     QAD_Study* aStudy = aDesktop->findStudy(theStudy);
     if(!aStudy){
@@ -560,6 +564,7 @@ namespace VISU{
     }
     return aStudy;
   }
+
   //===========================================================================
   ViewManager_i::ViewManager_i(SALOMEDS::Study_ptr theStudy) {
     if(MYDEBUG) MESSAGE("ViewManager_i::ViewManager_i");
@@ -567,7 +572,7 @@ namespace VISU{
   }
 
 
-  class TGetCurrentViewEvent: public SALOME_Event{
+  class TGetCurrentViewEvent: public SALOME_Event {
     SALOMEDS::Study_ptr myStudyDocument;
   public:
     TGetCurrentViewEvent( SALOMEDS::Study_ptr theStudy):
@@ -611,7 +616,7 @@ namespace VISU{
 
 
   template<class TViewFrame>
-  class TCreateViewFrameEvent: public TCreateViewEvent{
+  class TCreateViewFrameEvent: public TCreateViewEvent {
   public:
     typedef typename TViewFrame::TInterface TInterface;
     typedef typename TInterface::_ptr_type TResult;
@@ -642,7 +647,7 @@ namespace VISU{
   }
 
 
-  class TCreateTableViewEvent: public TCreateViewEvent{
+  class TCreateTableViewEvent: public TCreateViewEvent {
     Table_ptr myTable;
   public:
     TCreateTableViewEvent(SALOMEDS::Study_ptr theStudy,
@@ -792,7 +797,7 @@ namespace VISU{
   }
 
 
-  class TEnbleGridEvent: public SALOME_Event{
+  class TEnbleGridEvent: public SALOME_Event {
   public:
     typedef void (Plot2d_ViewFrame::* TFun)(bool, const int, bool, const int, bool = true);
     TEnbleGridEvent(Plot2d_ViewFrame* theView, TFun theFun,
@@ -861,7 +866,7 @@ namespace VISU{
   }
 
 
-  class TSetTitleEvent: public SALOME_Event{
+  class TSetTitleEvent: public SALOME_Event {
   public:
     typedef void (Plot2d_ViewFrame::* TFun)(bool, const QString&, bool = true);
     TSetTitleEvent(Plot2d_ViewFrame* theView, TFun theFun, const char* theTitle):
@@ -1609,94 +1614,130 @@ namespace VISU{
   //===========================================================================
 
 
-  VISU_Actor* GetActor(VISU::Prs3d_i* thePrs3d, VTKViewer_ViewFrame* theVTKFrame){
+  VISU_Actor* GetActor (VISU::Prs3d_i* thePrs3d, VTKViewer_ViewFrame* theVTKFrame)
+  {
     vtkActorCollection *anActColl = theVTKFrame->getRenderer()->GetActors();
     anActColl->InitTraversal();
-    while(vtkActor *anActor = anActColl->GetNextActor())
-      if(VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(anActor))
-       if(thePrs3d == anVISUActor->GetPrs3d())
+    while (vtkActor *anActor = anActColl->GetNextActor())
+      if (VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(anActor))
+       if (thePrs3d == anVISUActor->GetPrs3d())
          return anVISUActor->GetParent();
     return NULL;
   }
 
+  void DeleteActors (VISU::Curve_i* thePrs)
+  {
+    if (!thePrs) return;
 
-  void DeletePrs3d(Prs3d_ptr thePrs3d){
-    if(Prs3d_i* aPrs3d = dynamic_cast<Prs3d_i*>(GetServant(thePrs3d).in())){
-      SALOMEDS::SObject_var aSObject = aPrs3d->GetSObject();
-      SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
-      if(QAD_Desktop* aDesktop = QAD_Application::getDesktop()){
-       if(QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument)){
-         aStudy->unHighlightAll();
-         int aNbStudyFrames = aStudy->getStudyFramesCount();
-         for(int aFrameId = 0; aFrameId < aNbStudyFrames; aFrameId++){
-           if(QAD_StudyFrame* aFrame = aStudy->getStudyFrame(aFrameId)){
-             QAD_ViewFrame* aViewFrame = aFrame->getRightFrame()->getViewFrame();
-             if(VTKViewer_ViewFrame* aVTKFrame = dynamic_cast<VTKViewer_ViewFrame*>(aViewFrame)){
-               if(VISU_Actor* anActor = VISU::GetActor(aPrs3d,aVTKFrame)){
-                 aVTKFrame->RemoveActor(anActor);
-                 anActor->Delete();
-               }
-               aVTKFrame->unHighlightAll();
-             }
+    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
+    SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
+
+    QAD_Desktop* aDesktop = QAD_Application::getDesktop();
+    if (!aDesktop) return;
+
+    QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument);
+    if (!aStudy) return;
+
+    aStudy->unHighlightAll();
+    for (int i = 0, nbFrames = aStudy->getStudyFramesCount(); i < nbFrames; i++) {
+      if (QAD_StudyFrame* aFrame = aStudy->getStudyFrame(i)) {
+       QAD_ViewFrame* aVFrame = aFrame->getRightFrame()->getViewFrame();
+       Plot2d_ViewFrame* aViewFrame = dynamic_cast<Plot2d_ViewFrame*>(aVFrame);
+       if (aViewFrame) {
+         QList<Plot2d_Curve> clist;
+         aViewFrame->getCurves(clist);
+         for (int i = 0; i < clist.count(); i++) {
+           if (clist.at(i)->hasIO() &&
+               strcmp(clist.at(i)->getIO()->getEntry(), thePrs->GetEntry()) == 0) {
+             aViewFrame->eraseCurve(clist.at(i));
            }
          }
+         aViewFrame->Repaint();
+         aViewFrame->unHighlightAll();
+       }
+      }
+    }
+  }
+
+  void DeleteActors (VISU::Prs3d_i* thePrs)
+  {
+    if (!thePrs) return;
 
-         aPrs3d->RemoveFromStudy(); 
-         aPrs3d->Destroy(); 
+    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
+    SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
 
-         aStudy->updateObjBrowser(); //update Object browser
+    QAD_Desktop* aDesktop = QAD_Application::getDesktop();
+    if (!aDesktop) return;
+
+    QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument);
+    if (!aStudy) return;
+
+    aStudy->unHighlightAll();
+    for (int i = 0, nbFrames = aStudy->getStudyFramesCount(); i < nbFrames; i++) {
+      if (QAD_StudyFrame* aFrame = aStudy->getStudyFrame(i)) {
+       QAD_ViewFrame* aVFrame = aFrame->getRightFrame()->getViewFrame();
+       VTKViewer_ViewFrame* aViewFrame = dynamic_cast<VTKViewer_ViewFrame*>(aVFrame);
+       if (aViewFrame) {
+         if (VISU_Actor* anActor = GetActor(thePrs,aViewFrame)) {
+           aViewFrame->RemoveActor(anActor);
+           anActor->Delete();
+         }
+         aViewFrame->unHighlightAll();
        }
       }
     }
   }
 
-
-  void VISU_Gen_i::DeleteResult(Result_ptr theResult)
+  void VISU_Gen_i::DeleteResult (Result_ptr theResult)
   {
-    class TEvent: public SALOME_Event{
+    class TEvent: public SALOME_Event {
       Result_ptr myResult;
     public:
       TEvent(Result_ptr theResult): myResult(theResult) {}
-      virtual void Execute(){
-       if(Result_i* aResult = dynamic_cast<Result_i*>(GetServant(myResult).in())){
-         SALOMEDS::SObject_var aSObject = aResult->GetSObject();
-         SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
-         SALOMEDS::ChildIterator_var aChildIter = aStudyDocument->NewChildIterator(aSObject);
-         for(aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()){
-           SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
-           CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
-           if(CORBA::is_nil(aChildObj)) continue;
-           VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aChildObj);
-           if(CORBA::is_nil(aPrs3d)) continue;
-           VISU::DeletePrs3d(aPrs3d);
+      virtual void Execute()
+      {
+       myResult->RemoveFromStudy();
+
+       //update Object browser
+       if (QAD_Desktop* aDesktop = QAD_Application::getDesktop()) {
+         if (Result_i* aResult = dynamic_cast<Result_i*>(GetServant(myResult).in())) {
+           SALOMEDS::SObject_var aSObject = aResult->GetSObject();
+           SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
+           if (QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument))
+             aStudy->updateObjBrowser();
          }
-
-         aResult->RemoveFromStudy(); 
-         aResult->Destroy(); 
-
-         if(QAD_Desktop* aDesktop = QAD_Application::getDesktop())
-           if(QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument))
-             aStudy->updateObjBrowser(); //update Object browser
        }
+
+       myResult->Destroy();
       }
     };
 
     ProcessVoidEvent(new TEvent(theResult));
   }
 
-
   void VISU_Gen_i::DeletePrs3d(Prs3d_ptr thePrs3d)
   {
-    class TEvent: public SALOME_Event{
+    class TEvent: public SALOME_Event {
       Prs3d_ptr myPrs3d;
     public:
       TEvent(Prs3d_ptr thePrs3d): myPrs3d(thePrs3d) {}
-      virtual void Execute(){
-       VISU::DeletePrs3d(myPrs3d);
+      virtual void Execute() {
+       myPrs3d->RemoveFromStudy();
+
+       //update Object browser
+       if (QAD_Desktop* aDesktop = QAD_Application::getDesktop()) {
+         if (Prs3d_i* aPrs3d = dynamic_cast<Prs3d_i*>(GetServant(myPrs3d).in())) {
+           SALOMEDS::SObject_var aSObject = aPrs3d->GetSObject();
+           SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
+           if (QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument))
+             aStudy->updateObjBrowser();
+         }
+       }
+
+       myPrs3d->Destroy();
       }
     };
 
     ProcessVoidEvent(new TEvent(thePrs3d));
   }
-
 }
index c647ea6de970d61784c081cf850d952fea59e778..c9628f7b43ef1a5ce3a7c32f7801f8b53689f48c 100644 (file)
@@ -43,6 +43,8 @@ class vtkCamera;
 
 namespace VISU{
   class Prs3d_i;
+  class Curve_i;
+
   class ViewManager_i : public virtual POA_VISU::ViewManager,
                         public virtual Base_i
   {
@@ -284,6 +286,10 @@ namespace VISU{
 
   enum Displaing {eDisplayAll, eDisplay, eDisplayOnly, eErase, eEraseAll};
   VISU_Actor* UpdateViewer(QAD_StudyFrame* theStudyFrame, int theDisplaing, Prs3d_i* thePrs = NULL);
+
+  VISU_Actor* GetActor (VISU::Prs3d_i* thePrs, VTKViewer_ViewFrame* theViewFrame);
+  void DeleteActors (VISU::Prs3d_i* thePrs);
+  void DeleteActors (VISU::Curve_i* thePrs);
 }
 
 #endif