Salome HOME
Fix for the bug #45: check and warning when the same image is used in 2 arguments.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Tool.cxx
index bb9da6793499fe2edde551c0a4f1138e9af0a965..ce0d25b3dd6a7363bd1b8b2dec0061f283aa7995 100644 (file)
@@ -222,7 +222,9 @@ void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule,
         ( anObject->GetKind() == KIND_BATHYMETRY ) ||
         ( anObject->GetKind() == KIND_ZONE ) ||
         ( anObject->GetKind() == KIND_OBSTACLE ) ||
-        ( anObject->GetKind() == KIND_PROFILE ) ) )
+        ( anObject->GetKind() == KIND_PROFILE ) ||
+        ( anObject->GetKind() == KIND_STREAM ) ||
+        ( anObject->GetKind() == KIND_CHANNEL ) ) )
       {
         theSeq.Append( anObject );
       }
@@ -499,66 +501,88 @@ void HYDROGUI_Tool::setOCCActionShown( HYDROGUI_Module* theModule,
   }
 }
 
-void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Image)& theImage,
+void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Entity)& theObj,
                                          HYDROData_SequenceOfObjects& theRefObjects,
                                          QStringList& theRefNames )
 {
-  if( theImage.IsNull() )
+  if( theObj.IsNull() )
     return;
 
-  for( int anIndex = 0, aNbRef = theImage->NbReferences(); anIndex < aNbRef; anIndex++ )
+  HYDROData_SequenceOfObjects anAllRefObjects = theObj->GetAllReferenceObjects();
+  theRefObjects.Append( anAllRefObjects );
+
+  for( int i = 1, n = anAllRefObjects.Length(); i <= n; ++i )
   {
-    Handle(HYDROData_Entity) aRefObj = theImage->Reference( anIndex );
-    if( !aRefObj.IsNull() && !aRefObj->IsRemoved() )
-    {
-      QString aName = aRefObj->GetName();
-      if( !theRefNames.contains( aName ) )
-      {
-        theRefObjects.Append( aRefObj );
-        theRefNames.append( aRefObj->GetName() );
-        if( aRefObj->GetKind() == KIND_IMAGE )
-        {
-          Handle(HYDROData_Image) aRefImage = Handle(HYDROData_Image)::DownCast( aRefObj );
-          if( !aRefImage.IsNull() )
-            GetObjectReferences( aRefImage, theRefObjects, theRefNames );
-        }
-      }
-    }
+    Handle(HYDROData_Entity) aRefObj = theRefObjects.Value( i );
+    if( aRefObj.IsNull() || aRefObj->IsRemoved() )
+      continue;
+
+    QString aRefObjectName = aRefObj->GetName();
+    if( theRefNames.contains( aRefObjectName ) )
+      continue;
+
+    theRefObjects.Append( aRefObj );
+    theRefNames.append( aRefObjectName );
+
+    GetObjectReferences( aRefObj, theRefObjects, theRefNames );
   }
 }
 
-void HYDROGUI_Tool::GetObjectBackReferences( HYDROGUI_Module* theModule,
-                                             const Handle(HYDROData_Entity)& theObj,
-                                             HYDROData_SequenceOfObjects& theBackRefObjects,
-                                             QStringList& theBackRefNames )
+HYDROData_SequenceOfObjects HYDROGUI_Tool::GetObjectBackReferences( 
+  HYDROGUI_Module*                theModule,
+  const Handle(HYDROData_Entity)& theObj )
 {
   if( theObj.IsNull() )
-    return;
+    return HYDROData_SequenceOfObjects();
+
+  QString anObjName = theObj->GetName();
+
+  QMap<QString,HYDROData_SequenceOfObjects> aMapOfBackRefs =
+    GetObjectsBackReferences( theModule, QStringList() << anObjName );
+
+  return aMapOfBackRefs[ anObjName ];
+}
+
+QMap<QString,HYDROData_SequenceOfObjects> HYDROGUI_Tool::GetObjectsBackReferences(
+  HYDROGUI_Module*   theModule, const QStringList& theObjectNames )
+{
+  QMap<QString,HYDROData_SequenceOfObjects> aResMap;
+
+  if( theObjectNames.isEmpty() )
+    return aResMap;
 
   Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() );
   if( aDocument.IsNull() )
-    return;
-
-  QString aName = theObj->GetName();
+    return aResMap;
 
-  HYDROData_Iterator anIterator( aDocument, KIND_IMAGE );
+  HYDROData_Iterator anIterator( aDocument );
   for( ; anIterator.More(); anIterator.Next() )
   {
-    Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anIterator.Current() );
-    if( !anImage.IsNull() )
+    Handle(HYDROData_Entity) anObject = anIterator.Current();
+    if( anObject.IsNull() || anObject->IsRemoved() )
+      continue;
+
+    QString anObjectName = anObject->GetName();
+    if ( theObjectNames.contains( anObjectName ) )
+      continue;
+
+    HYDROData_SequenceOfObjects aRefObjects = anObject->GetAllReferenceObjects();
+    for ( int i = 1, n = aRefObjects.Length(); i <= n; ++i )
     {
-      HYDROData_SequenceOfObjects aRefObjects;
-      QStringList aRefNames;
-      GetObjectReferences( anImage, aRefObjects, aRefNames );
-      if( aRefNames.contains( aName ) )
-      {
-        theBackRefObjects.Append( anImage );
-        theBackRefNames.append( anImage->GetName() );
-      }
+      Handle(HYDROData_Entity) aRefObject = aRefObjects.Value( i );
+      if( aRefObject.IsNull() || aRefObject->IsRemoved() )
+        continue;
+
+      QString aRefObjectName = aRefObject->GetName();
+      if ( !theObjectNames.contains( aRefObjectName ) )
+        continue;
+
+      aResMap[ aRefObjectName ].Append( anObject );
     }
   }
-}
 
+  return aResMap;
+}
 
 QDockWidget* HYDROGUI_Tool::WindowDock( QWidget* wid )
 {
@@ -629,3 +653,8 @@ QStringList HYDROGUI_Tool::FindExistingObjectsNames( const Handle(HYDROData_Docu
 
   return aNames;
 }
+
+QString HYDROGUI_Tool::GetCoordinateString( const double theNumber )
+{
+  return QString::number( theNumber, 'f', 2 );
+}
\ No newline at end of file