Salome HOME
Merge commit '4823245056426a9ccf9c7965daecf11459f58af5' into V9_11_BR
[modules/geom.git] / src / DependencyTree / DependencyTree_View.cxx
index b1afd4085087530b5bf100b6226b02d02df3fb89..a4ef11eafaba54c92c78bea7dd96f071f23d954c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2014-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -48,9 +48,6 @@ myIsUpdate( true )
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   if ( !app ) return;
 
-  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-  myStudy = GeometryGUI::ClientStudyToStudy( study->studyDS());
-
   mySelectionMgr = app->selectionMgr();
   if ( !mySelectionMgr ) return;
 
@@ -183,15 +180,6 @@ QString DependencyTree_View::getViewName() const
   return tr( "DEPENDENCY_TREE" );
 }
 
-//=================================================================================
-// function : getStudyId()
-// purpose  : return Id of current study
-//=================================================================================
-int DependencyTree_View::getStudyId() const
-{
-  return myStudy->StudyId();
-}
-
 //=================================================================================
 // function : getObjectByEntry()
 // purpose  : return DependencyTree_Object by entry
@@ -351,6 +339,18 @@ void DependencyTree_View::onRebuildModel()
   updateModel( true, false );
 }
 
+//=================================================================================
+// function : resizeEvent()
+// purpose  : reimplemented from QGraphicsView::resizeEvent()
+//=================================================================================
+void DependencyTree_View::resizeEvent(QResizeEvent *event)
+{
+  QPointF aCenter = mapToScene( event->oldSize().width()/2,
+                                event->oldSize().height()/2 );
+  QGraphicsView::resizeEvent( event );
+  centerOn( aCenter.x(),aCenter.y() );
+}
+
 //=================================================================================
 // function : onUpdateModel()
 // purpose  : slot for updating tree model for main objects in viewer
@@ -463,10 +463,10 @@ void DependencyTree_View::parseTree()
     std::string objectEntry = i->first;
     addNode( objectEntry );
     parseTreeWard( i->second.first );
-    if( i->second.first.size() > myMaxUpwardLevelsNumber )
+    if((int) i->second.first.size() > myMaxUpwardLevelsNumber )
       myMaxUpwardLevelsNumber = i->second.first.size();
     parseTreeWard( i->second.second );
-    if( i->second.second.size() > myMaxDownwardLevelsNumber )
+    if((int) i->second.second.size() > myMaxDownwardLevelsNumber )
       myMaxDownwardLevelsNumber = i->second.second.size();
   }
 
@@ -506,13 +506,13 @@ void DependencyTree_View::parseTreeWard( const GEOMUtils::LevelsList& theWard )
 //=================================================================================
 void DependencyTree_View::parseTreeWardArrow( const GEOMUtils::LevelsList& theWard)
 {
-  for( int j = 0; j < theWard.size(); j++ ) {
+  for( size_t j = 0; j < theWard.size(); j++ ) {
     GEOMUtils::LevelInfo Level = theWard.at(j);
     GEOMUtils::LevelInfo::const_iterator node;
     for( node = Level.begin(); node != Level.end(); node++ ) {
       DependencyTree_Object* object = myTreeMap[ node->first ];
       std::vector<std::string> Links = node->second;
-      for( int link = 0; link < Links.size(); link++ ) {
+      for( size_t link = 0; link < Links.size(); link++ ) {
         DependencyTree_Object* LinkObject = myTreeMap[ Links[ link ] ];
         if( object && LinkObject )
           addArrow( LinkObject, object );
@@ -595,7 +595,7 @@ void DependencyTree_View::drawTree()
   std::map< int, std::vector< std::string > >::const_iterator level;
   for( level = levelObjects.begin(); level != levelObjects.end(); level++ ) {
     int step = -horDistance * ( int(level->second.size()) - 1 ) / 2;
-    for( int objIter = 0; objIter < level->second.size(); objIter++ ) {
+    for( size_t objIter = 0; objIter < level->second.size(); objIter++ ) {
       DependencyTree_Object* anObject = myTreeMap[ level->second.at( objIter ) ];
       anObject->setPos( step, verDistance * level->first );
       step += horDistance;
@@ -635,7 +635,7 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard,
                                     std::map< int, std::vector< std::string > >& theLevelObjects,
                                     int theCurrentLevel, const int theLevelStep )
 {
-  for( int level = 0; level < theWard.size(); level++ ) {
+  for( int level = 0, size = theWard.size(); level < size; level++ ) {
     if( level >= myLevelsNumber )
       return;
     theCurrentLevel += theLevelStep;
@@ -659,7 +659,7 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard,
 //=================================================================================
 void DependencyTree_View::drawWardArrows( const GEOMUtils::LevelsList& theWard )
 {
-  for( int j = 0; j < theWard.size(); j++ ) {
+  for( int j = 0, size = theWard.size(); j < size; j++ ) {
     if( j >= myLevelsNumber )
       break;
     GEOMUtils::LevelInfo Level = theWard.at(j);
@@ -667,7 +667,7 @@ void DependencyTree_View::drawWardArrows( const GEOMUtils::LevelsList& theWard )
     for( node = Level.begin(); node != Level.end(); node++ ) {
       DependencyTree_Object* object = myTreeMap[ node->first ];
       GEOMUtils::NodeLinks Links = node->second;
-      for( int link = 0; link < Links.size(); link++ ) {
+      for( size_t link = 0; link < Links.size(); link++ ) {
         DependencyTree_Object* LinkObject = myTreeMap[ Links[ link ] ];
         if( isItemAdded( object ) && isItemAdded( LinkObject ) ) {
           DependencyTree_Arrow* arrow = myArrows[ std::pair<DependencyTree_Object*,DependencyTree_Object*>( LinkObject, object ) ];
@@ -689,7 +689,7 @@ void DependencyTree_View::updateView()
     return;
 
   drawTree();
-  fitAll();
+  fitWindow();
 }
 
 //=================================================================================
@@ -734,6 +734,23 @@ void DependencyTree_View::clearView( bool isClearModel )
   }
 }
 
+//=================================================================================
+// function : fitWindow()
+// purpose  : scale the window considering a size of scene
+//=================================================================================
+void DependencyTree_View::fitWindow()
+{
+  int sizeFactor = 4;
+  if( objectsBoundingRect(true).width() > sizeFactor*size().width() ||
+      objectsBoundingRect(true).height() > sizeFactor*size().width() ) {
+    QRectF aRect = QRectF( -sizeFactor*size().width()/2, -sizeFactor*size().height()/2,
+                           sizeFactor*size().width(), sizeFactor*size().height() );
+    fitInView( aRect, Qt::KeepAspectRatio );
+  }
+  else
+    fitAll();
+}
+
 //=================================================================================
 // function : getNewTreeModel()
 // purpose  : get dependency tree model from engine
@@ -756,7 +773,7 @@ void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUs
         GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil();
         geomObject = GEOMBase::ConvertIOinGEOMObject( io );
         QString entry = geomObject->GetEntry();
-        objectsEntry[ iter ] = entry.toLatin1().constData();
+        objectsEntry[ iter ] = entry.toUtf8().constData();
       }
     }
     else {
@@ -770,7 +787,7 @@ void DependencyTree_View::getNewTreeModel( bool theUseSelectedObject, bool theUs
 
   // get string which describes dependency tree structure
   SALOMEDS::TMPFile_var SeqFile =
-    GeometryGUI::GetGeomGen()->GetDependencyTree( myStudy, myMainEntries );
+    GeometryGUI::GetGeomGen()->GetDependencyTree( myMainEntries );
   char* buf = (char*)&SeqFile[0];
 
   clearView( true );
@@ -795,4 +812,5 @@ int DependencyTree_View::checkMaxLevelsNumber()
     return myMaxUpwardLevelsNumber;
   else if( myDisplayDescendants->isChecked() )
     return  myMaxDownwardLevelsNumber;
+  return 0;
 }