Salome HOME
Python console has been added for HYDRO module (Bug #22).
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Tool.cxx
index 5aeadb6178fd74df3e50021d8317ca55c17379f8..29d053f046bb210563677941224d417d9c8f979d 100644 (file)
@@ -44,6 +44,7 @@
 #include <SUIT_ViewWindow.h>
 
 #include <QTextCodec>
+#include <QDockWidget>
 
 // Definition of this id allows to use 'latin1' (Qt alias for 'ISO-8859-1')
 // encoding instead of default 'System'
@@ -332,3 +333,79 @@ QList<size_t> HYDROGUI_Tool::GetGraphicsViewIdList( HYDROGUI_Module* theModule )
   }
   return aList;
 }
+
+void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Image)& theImage,
+                                         HYDROData_SequenceOfObjects& theRefObjects,
+                                         QStringList& theRefNames )
+{
+  if( theImage.IsNull() )
+    return;
+
+  for( int anIndex = 0, aNbRef = theImage->NbReferences(); anIndex < aNbRef; anIndex++ )
+  {
+    Handle(HYDROData_Object) 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 );
+        }
+      }
+    }
+  }
+}
+
+void HYDROGUI_Tool::GetObjectBackReferences( HYDROGUI_Module* theModule,
+                                             const Handle(HYDROData_Object)& theObj,
+                                             HYDROData_SequenceOfObjects& theBackRefObjects,
+                                             QStringList& theBackRefNames )
+{
+  if( theObj.IsNull() )
+    return;
+
+  Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() );
+  if( aDocument.IsNull() )
+    return;
+
+  QString aName = theObj->GetName();
+
+  HYDROData_Iterator anIterator( aDocument, KIND_IMAGE );
+  for( ; anIterator.More(); anIterator.Next() )
+  {
+    Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anIterator.Current() );
+    if( !anImage.IsNull() )
+    {
+      HYDROData_SequenceOfObjects aRefObjects;
+      QStringList aRefNames;
+      GetObjectReferences( anImage, aRefObjects, aRefNames );
+      if( aRefNames.contains( aName ) )
+      {
+        theBackRefObjects.Append( anImage );
+        theBackRefNames.append( anImage->GetName() );
+      }
+    }
+  }
+}
+
+
+QDockWidget* HYDROGUI_Tool::WindowDock( QWidget* wid )
+{
+  if ( !wid )
+    return 0;
+
+  QDockWidget* dock = 0;
+  QWidget* w = wid->parentWidget();
+  while ( w && !dock )
+  {
+    dock = ::qobject_cast<QDockWidget*>( w );
+    w = w->parentWidget();
+  }
+  return dock;
+}