Salome HOME
- add possibility to rebuild dependency tree by selecting objects
authormpa <mpa@opencascade.com>
Thu, 29 May 2014 11:18:22 +0000 (15:18 +0400)
committermpa <mpa@opencascade.com>
Thu, 29 May 2014 11:18:22 +0000 (15:18 +0400)
src/DependencyTree/DependencyTree.cxx
src/DependencyTree/DependencyTree_Object.cxx
src/DependencyTree/DependencyTree_View.cxx
src/DependencyTree/DependencyTree_View.h
src/DependencyTree/DependencyTree_ViewModel.cxx

index 6fdc892babb967b2008af0ceb4557dc1f3a0f71e..583ba43e88cf9a2141f722de7754a34ba43c485a 100644 (file)
@@ -86,33 +86,3 @@ DependencyTree::DependencyTree()
 DependencyTree::~DependencyTree()
 {
 }
-
-//void DependencyTree::setBackgroundColor( const QColor& theColor )
-//{
-//  //myView->setBackgroundColor( theColor );
-//     myBackgroundColor = theColor;
-//}
-//void DependencyTree::setNodeColor( const QColor& theColor )
-//{
-//  myView->setNodeColor( theColor );
-//}
-//void DependencyTree::setMainNodeColor( const QColor& theColor )
-//{
-//  myView->setMainNodeColor( theColor );
-//}
-//void DependencyTree::setSelectNodeColor( const QColor& theColor )
-//{
-//  myView->setSelectNodeColor( theColor );
-//}
-//void DependencyTree::setArrowColor( const QColor& theColor )
-//{
-//  myView->setArrowColor( theColor );
-//}
-//void DependencyTree::setHighlightArrowColor( const QColor& theColor )
-//{
-//  myView->setHighlightArrowColor( theColor );
-//}
-//void DependencyTree::setSelectArrowColor( const QColor& theColor )
-//{
-//  myView->setSelectArrowColor( theColor );
-//}
index 21d2f79718b8f3f245b9df649e8c13d508e9c264..cffd24a1da0994e50fb79b533bc688a7ee8eab71 100644 (file)
@@ -169,6 +169,7 @@ void DependencyTree_Object::updateName()
 
   QString name = myGeomObject->GetName();
   QString studyEntry = myGeomObject->GetStudyEntry();
+  std::cout<<"\n\n name = " << name.toStdString() << " studyEntry = " << studyEntry.toStdString() << std::endl;
 
   if( studyEntry.isEmpty() ) {
        if( name.isEmpty() )
index a0e065fea80389dd625317c642de09df19e867cd..5d1323278c0f72763511a94e8249c568aa623c41 100644 (file)
@@ -47,7 +47,7 @@ DependencyTree_View::DependencyTree_View( QWidget* theParent )
 myMaxDownwardLevelsNumber(0),
 myMaxUpwardLevelsNumber(0),
 myLevelsNumber(0),
-myIsCompute(true),
+myIsCompute(false),
 myIsUpdate( true ),
 myTotalCost(0),
 myComputedCost(0)
@@ -70,6 +70,8 @@ DependencyTree_View::~DependencyTree_View()
 
 void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
 {
+  qthread = new DependencyTree_ComputeDlg_QThread( this );
+
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
 
   myNodesMovable = new QCheckBox( tr( "MOVE_NODES" ) );
@@ -134,7 +136,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
   connect( myHierarchyDepth, SIGNAL( valueChanged ( int ) ), this, SLOT( onHierarchyType() ) );
   connect( myDisplayAscendants , SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) );
   connect( myDisplayDescendants, SIGNAL( toggled( bool ) ), this, SLOT( onHierarchyType() ) );
-  connect( updateButton, SIGNAL( clicked() ), this, SLOT( updateView() ) );
+  connect( updateButton, SIGNAL( clicked() ), this, SLOT( onUpdateModel( false ) ) );
   connect( cancelButton, SIGNAL( clicked() ), this, SLOT( onCancel() ) );
 
   setPrefBackgroundColor( resMgr->colorValue( "Geometry", "dependency_tree_background_color", QColor( 255, 255, 255 ) ) );
@@ -142,9 +144,9 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
   setHierarchyType( resMgr->integerValue( "Geometry", "dependency_tree_hierarchy_type", 0 ) );
 }
 
-void DependencyTree_View::updateModel()
+void DependencyTree_View::updateModel( bool getSelectedObjects )
 {
-  getNewTreeModel();
+  getNewTreeModel( getSelectedObjects );
 
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
 
@@ -159,8 +161,11 @@ void DependencyTree_View::drawTree()
   calcTotalCost();
   std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl;
 
-  clearSelected();
+       if( !myIsCompute )
+    return;
+
   clearView( false );
+  clearSelected();
 
   // draw nodes on scene
   std::map< std::string, int > entryLevelMap;
@@ -180,7 +185,7 @@ void DependencyTree_View::drawTree()
     if( isItemAdded( objectItem ) )
       currentLevel = entryLevelMap[ objectEntry ];
     else {
-      addItem( objectItem );
+      addNewItem( objectItem );
       objectItem->unselect();
       entryLevelMap[ objectEntry ] = currentLevel;
       levelObjects[ currentLevel ].push_back( objectEntry );
@@ -217,7 +222,7 @@ void DependencyTree_View::drawTree()
           DependencyTree_Object* object = myTreeMap[node->first];
           DependencyTree_Arrow* arrow = myArrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(Main_object, object)];
           if( arrow && !isItemAdded( arrow) )
-            addItem( arrow );
+            addNewItem( arrow );
         }
       }
     }
@@ -227,6 +232,7 @@ void DependencyTree_View::drawTree()
       drawWardArrows( j->second.second );
   }
   std::cout << "\n ComputedCost = " << myComputedCost << std::endl;
+
 }
 
 int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
@@ -248,36 +254,33 @@ int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
   mySelectionMgr->setSelectedObjects( listIO, true );
 }
 
-void DependencyTree_View::customEvent ( QEvent * event )
+void DependencyTree_View::customEvent( QEvent * event )
 {
   if( event->type() == DRAW_EVENT ) {
-       //qthread->sleepDraw();
 
-       std::cout << "\n\n\n DRAW_EVENT!!! " << std::endl;
     QPushButton* cancelButton = dynamic_cast<QPushButton*>( cancelAction->defaultWidget() );
     QProgressBar* progressBar = dynamic_cast<QProgressBar*>( progressAction->defaultWidget() );
 
-    std::cout << "\n\n *** myIsCompute " << myIsCompute << std::endl;
-    if ( !cancelButton->isChecked() ) {
-      std::cout << "\n\n *** getComputeProgress = " << getComputeProgress() << std::endl;
+    if ( !cancelButton->isChecked() )
       progressBar->setValue( progressBar->maximum() * getComputeProgress() );
 
-    }
-
     std::cout << "\n\n *** qthread->isFinished() = " << qthread->isFinished() << std::endl;
     if( !myIsCompute || qthread->isFinished() ) {
       changeWidgetState( false );
       cancelButton->setChecked( false );
       progressBar->setValue(0);
+      fitAll();
+      QApplication::removePostedEvents( this, ( QEvent::Type )DRAW_EVENT );
     }
   }
   event->accept();
 }
 
-void DependencyTree_View::addItem( QGraphicsItem* theObject )
+void DependencyTree_View::addNewItem( QGraphicsItem* theObject )
 {
-  GraphicsView_ViewPort::addItem( theObject );
   qthread->sleepDraw();
+  if( theObject )
+    addItem( theObject );
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   QApplication::postEvent( this, new QEvent( ( QEvent::Type )DRAW_EVENT ) );
 }
@@ -424,19 +427,23 @@ void DependencyTree_View::closeEvent( QCloseEvent* event )
   event->accept();
 }
 
+void DependencyTree_View::onUpdateModel( bool getSelectedObjects )
+{
+  updateModel( getSelectedObjects );
+}
+
 void DependencyTree_View::updateView()
 {
   if( !myIsUpdate )
     return;
 
-//  clearView( false );
-
-  qthread = new DependencyTree_ComputeDlg_QThread( this );
-
   changeWidgetState( true );
 
-  //myTimer = startTimer( 100 ); // millisecs
   qthread->start();
+
+
+
+
 }
 
 void DependencyTree_View::onMoveNodes( bool theIsMoveNodes )
@@ -575,7 +582,7 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard,
     for (node = levelInfo.begin(); node != levelInfo.end(); node++ ) {
       DependencyTree_Object* object = myTreeMap[ node->first ];
       if( !isItemAdded( object ) ) {
-        addItem( object );
+        addNewItem( object );
         object->unselect();
         theEntryLevelMap[ node->first ] = theCurrentLevel;
         theLevelObjects[ theCurrentLevel ].push_back( node->first );
@@ -600,25 +607,25 @@ void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard )
         if( isItemAdded( object ) && isItemAdded( LinkObject ) ) {
           DependencyTree_Arrow* arrow = myArrows[std::pair<DependencyTree_Object*,DependencyTree_Object*>(object, LinkObject)];
           if( arrow && !isItemAdded( arrow) )
-            addItem( arrow );
+            addNewItem( arrow );
         }
       }
     }
   }
 }
 
-void DependencyTree_View::getNewTreeModel()
+void DependencyTree_View::getNewTreeModel( bool getSelectedObjects )
 {
   clearView( true );
 
-  SALOME_ListIO aSelList;
-  mySelectionMgr->selectedObjects( aSelList );
+  if( getSelectedObjects )
+    mySelectionMgr->selectedObjects( myMainObjects );
 
   // create a list of selected object entry
   GEOM::string_array_var objectsEntry = new GEOM::string_array();
-  objectsEntry->length( aSelList.Extent());
+  objectsEntry->length( myMainObjects.Extent());
   int iter = 0;
-  for ( SALOME_ListIteratorOfListIO It( aSelList ); It.More(); It.Next(), iter++ ) {
+  for ( SALOME_ListIteratorOfListIO It( myMainObjects ); It.More(); It.Next(), iter++ ) {
     Handle( SALOME_InteractiveObject ) io = It.Value();
     GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil();
     geomObject = GEOMBase::ConvertIOinGEOMObject( io );
@@ -647,14 +654,16 @@ void DependencyTree_View::clearView( bool isClearModel )
   EntryObjectMap::const_iterator objectIter;
   for( objectIter = myTreeMap.begin(); objectIter != myTreeMap.end(); objectIter++ ) {
     DependencyTree_Object* object = objectIter->second;
-    if( isItemAdded( object ) && object )
+    if( object )
+      if( isItemAdded( object ) )
       removeItem( object );
   }
 
   ArrowsInfo::const_iterator arrowIter;
   for( arrowIter = myArrows.begin(); arrowIter != myArrows.end(); arrowIter++ ) {
     DependencyTree_Arrow* object = arrowIter->second;
-    if( isItemAdded( object ) && object )
+    if( object )
+      if( isItemAdded( object ) )
       removeItem( object );
   }
   if( isClearModel ) {
@@ -664,7 +673,7 @@ void DependencyTree_View::clearView( bool isClearModel )
     myMaxDownwardLevelsNumber = 0;
     myMaxUpwardLevelsNumber = 0;
     myLevelsNumber = 0;
-    myIsCompute = true;
+    myIsCompute = false;
     myIsUpdate = true;
   }
 }
@@ -714,16 +723,19 @@ DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( Dependency
 
 void DependencyTree_ComputeDlg_QThread::run()
 {
+  myView->myMutex.lock();
+ // QMutexLocker lock( &myView->myMutex );
   myView->setIsCompute( true );
   myView->drawTree();
-  myView->fitAll( true );
-  SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+
   QApplication::postEvent( myView, new QEvent( ( QEvent::Type )DRAW_EVENT ) );
+  myView->myMutex.unlock();
+  //exec();
 }
 
 void DependencyTree_ComputeDlg_QThread::sleepDraw()
 {
-  msleep(10);
+  msleep(1);
 }
 
 void DependencyTree_ComputeDlg_QThread::cancel()
index 13a3a976e93c7f0456c4256f85d3172cac503f75..e9b52f35747d5aab8eb7464e264947e95a5a9355 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <SalomeApp_Application.h>
 
+#include <SALOME_ListIO.hxx>
+
 #include <GEOMUtils.hxx>
 
 #include <QWidgetAction>
@@ -34,6 +36,7 @@
 #include <QCheckBox>
 #include <QProgressBar>
 #include <QThread>
+#include <QMutex>
 
 class DependencyTree_Object;
 class DependencyTree_Arrow;
@@ -71,12 +74,11 @@ public:
   ~DependencyTree_View();
 
   void init( GraphicsView_ViewFrame* );
-  void updateModel();
+  void updateModel( bool = true );
   void drawTree();
 
   virtual int select( const QRectF&, bool );
   virtual void customEvent ( QEvent* );
-  void addItem( QGraphicsItem* );
   void mouseMoveEvent(QMouseEvent *event);
 
   void setHierarchyType( const int );
@@ -92,8 +94,13 @@ public:
   void setIsCompute( bool );
   bool getIsCompute();
 
+
+  QMutex myMutex;
+
+public slots:
+  void onUpdateModel( bool = true );
+
 protected:
-//  void timerEvent( QTimerEvent* );
   void closeEvent( QCloseEvent* );
 
 private slots:
@@ -108,6 +115,7 @@ private:
 
   void addNode( const std::string& );
   void addArrow( DependencyTree_Object*, DependencyTree_Object* );
+  void addNewItem( QGraphicsItem* );
 
   void parseTree();
   void parseTreeWard(const GEOMUtils::LevelsList);
@@ -117,7 +125,7 @@ private:
                  std::map< int, std::vector< std::string > >&, int, const int );
   void drawWardArrows( GEOMUtils::LevelsList );
 
-  void getNewTreeModel();
+  void getNewTreeModel( bool = true );
   void clearView( bool );
 
   int checkMaxLevelsNumber();
@@ -154,10 +162,12 @@ private:
 
   DependencyTree_ComputeDlg_QThread* qthread;
 
+  SALOME_ListIO myMainObjects;
 
   SALOMEDS::Study_var myStudy;
   LightApp_SelectionMgr* mySelectionMgr;
 
+
 };
 
 #endif
index b3301b981fdf6f7cd1961f96b76d540c3bb0c710..813e94c728200cfb5f83604bb30c9a904f3a592b 100644 (file)
@@ -119,13 +119,16 @@ void DependencyTree_ViewModel::contextMenuPopup( QMenu* theMenu )
   GraphicsView_Viewer::contextMenuPopup( theMenu );
   std::cout<<"\n\n\n\n *****contextMenuPopup " << std::endl;
 
+
   if( DependencyTree_View* aViewPort = dynamic_cast<DependencyTree_View*>(getActiveViewPort()) )
   {
     int aNbSelected = aViewPort->nbSelected();
     std::cout<<"\n  aNbSelected " << aNbSelected << std::endl;
     if( aNbSelected > 0 ) {
+      theMenu->clear();
       theMenu->addAction( tr( "MEN_DISPLAY" ), this, SLOT( onShowSelected() ) );
       theMenu->addAction( tr( "MEN_DISPLAY_ONLY" ), this, SLOT( onShowOnlySelected() ) );
+      theMenu->addAction( tr( "REBUILD_THE_TREE"), aViewPort, SLOT( onUpdateModel() ) );
     }
   }