]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
- add new method for view
authormpa <mpa@opencascade.com>
Wed, 28 May 2014 11:07:18 +0000 (15:07 +0400)
committermpa <mpa@opencascade.com>
Wed, 28 May 2014 11:07:18 +0000 (15:07 +0400)
- edit the work of thread

src/DependencyTree/DependencyTree_View.cxx
src/DependencyTree/DependencyTree_View.h

index 674850696fb08f462ff96f449ad5c19b2caca9fe..a0e065fea80389dd625317c642de09df19e867cd 100644 (file)
 
 // Qt includes
 #include <QCloseEvent>
-#include <QTimerEvent>
+#include <QApplication>
 #include <QGraphicsScene>
 
+#define DRAW_EVENT  ( QEvent::User + 1 )
 
 #include <iostream>
 
@@ -96,7 +97,7 @@ void DependencyTree_View::init( GraphicsView_ViewFrame* theViewFrame )
   QWidgetAction* hierarchyDepthAction = new QWidgetAction( theViewFrame );
   hierarchyDepthAction->setDefaultWidget( myHierarchyDepth );
 
-  QPushButton* updateButton = new QPushButton( tr( "UPDATE" ) );
+  updateButton = new QPushButton( tr( "UPDATE" ) );
   QWidgetAction* updateAction = new QWidgetAction( theViewFrame );
   updateAction->setDefaultWidget( updateButton );
 
@@ -159,6 +160,7 @@ void DependencyTree_View::drawTree()
   std::cout << "\n\n\n TOTAL COST = " << myTotalCost << std::endl;
 
   clearSelected();
+  clearView( false );
 
   // draw nodes on scene
   std::map< std::string, int > entryLevelMap;
@@ -171,7 +173,6 @@ void DependencyTree_View::drawTree()
       return;
     currentLevel = 0;
     myComputedCost++;
-    sleep(1);
     std::string objectEntry = i->first;
     DependencyTree_Object* objectItem = myTreeMap[ objectEntry ];
     horDistance = 100 + int( objectItem->boundingRect().width() );
@@ -226,7 +227,6 @@ void DependencyTree_View::drawTree()
       drawWardArrows( j->second.second );
   }
   std::cout << "\n ComputedCost = " << myComputedCost << std::endl;
-  fitAll( true );
 }
 
 int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
@@ -248,6 +248,40 @@ int DependencyTree_View::select( const QRectF& theRect, bool theIsAppend )
   mySelectionMgr->setSelectedObjects( listIO, true );
 }
 
+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;
+      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);
+    }
+  }
+  event->accept();
+}
+
+void DependencyTree_View::addItem( QGraphicsItem* theObject )
+{
+  GraphicsView_ViewPort::addItem( theObject );
+  qthread->sleepDraw();
+  SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+  QApplication::postEvent( this, new QEvent( ( QEvent::Type )DRAW_EVENT ) );
+}
+
 void DependencyTree_View::mouseMoveEvent(QMouseEvent *event)
 {
   QGraphicsView::mouseMoveEvent( event );
@@ -362,23 +396,23 @@ bool DependencyTree_View::getIsCompute()
   return myIsCompute;
 }
 
-void DependencyTree_View::timerEvent(QTimerEvent *event)
-{
-  QPushButton* cancelButton = dynamic_cast<QPushButton*>( cancelAction->defaultWidget() );
-  QProgressBar* progressBar = dynamic_cast<QProgressBar*>( progressAction->defaultWidget() );
-
-  std::cout << "TIMER! " << std::endl;
-  if ( !cancelButton->isChecked() )
-    progressBar->setValue( progressBar->maximum() * getComputeProgress() );
-
-  if( !myIsCompute || qthread->isFinished() ) {
-    changeWidgetState( false );
-    killTimer( myTimer );
-    cancelButton->setChecked( false );
-    progressBar->setValue(0);
-  }
-  event->accept();
-}
+//void DependencyTree_View::timerEvent(QTimerEvent *event)
+//{
+//  QPushButton* cancelButton = dynamic_cast<QPushButton*>( cancelAction->defaultWidget() );
+//  QProgressBar* progressBar = dynamic_cast<QProgressBar*>( progressAction->defaultWidget() );
+//
+//  std::cout << "TIMER! " << std::endl;
+//  if ( !cancelButton->isChecked() )
+//    progressBar->setValue( progressBar->maximum() * getComputeProgress() );
+//
+//  if( !myIsCompute || qthread->isFinished() ) {
+//    changeWidgetState( false );
+//    killTimer( myTimer );
+//    cancelButton->setChecked( false );
+//    progressBar->setValue(0);
+//  }
+//  event->accept();
+//}
 
 void DependencyTree_View::closeEvent( QCloseEvent* event )
 {
@@ -395,13 +429,13 @@ void DependencyTree_View::updateView()
   if( !myIsUpdate )
     return;
 
-  clearView( false );
+//  clearView( false );
 
   qthread = new DependencyTree_ComputeDlg_QThread( this );
 
   changeWidgetState( true );
 
-  myTimer = startTimer( 100 ); // millisecs
+  //myTimer = startTimer( 100 ); // millisecs
   qthread->start();
 }
 
@@ -535,7 +569,6 @@ void DependencyTree_View::drawWard( const GEOMUtils::LevelsList& theWard,
     if( level >= myLevelsNumber || !myIsCompute )
       return;
     myComputedCost++;
-    sleep(1);
     theCurrentLevel += theLevelStep;
     GEOMUtils::LevelInfo levelInfo = theWard.at( level );
     GEOMUtils::LevelInfo::const_iterator node;
@@ -557,7 +590,6 @@ void DependencyTree_View::drawWardArrows( GEOMUtils::LevelsList theWard )
     if( j >= myLevelsNumber || !myIsCompute )
       break;
     myComputedCost++;
-    sleep(1);
     GEOMUtils::LevelInfo Level = theWard.at(j);
     GEOMUtils::LevelInfo::const_iterator node;
     for (node = Level.begin(); node != Level.end(); node++ ) {
@@ -672,6 +704,7 @@ void DependencyTree_View::changeWidgetState( bool theIsCompute )
   myHierarchyDepth->setEnabled( !theIsCompute );
   myDisplayAscendants->setEnabled( !theIsCompute );
   myDisplayDescendants->setEnabled( !theIsCompute );
+  updateButton->setEnabled( !theIsCompute );
 }
 
 DependencyTree_ComputeDlg_QThread::DependencyTree_ComputeDlg_QThread( DependencyTree_View* theView )
@@ -683,11 +716,14 @@ void DependencyTree_ComputeDlg_QThread::run()
 {
   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 ) );
 }
 
-bool DependencyTree_ComputeDlg_QThread::result()
+void DependencyTree_ComputeDlg_QThread::sleepDraw()
 {
-
+  msleep(10);
 }
 
 void DependencyTree_ComputeDlg_QThread::cancel()
index a640462ca4cb5ce39d5fb5a0ff4d2acc71597636..13a3a976e93c7f0456c4256f85d3172cac503f75 100644 (file)
@@ -46,7 +46,7 @@ class DependencyTree_ComputeDlg_QThread : public QThread
 public:
 
   DependencyTree_ComputeDlg_QThread( DependencyTree_View* );
-  bool result();
+  void sleepDraw();
   void cancel();
 
   DependencyTree_View*   getView() { return myView; };
@@ -75,6 +75,8 @@ public:
   void drawTree();
 
   virtual int select( const QRectF&, bool );
+  virtual void customEvent ( QEvent* );
+  void addItem( QGraphicsItem* );
   void mouseMoveEvent(QMouseEvent *event);
 
   void setHierarchyType( const int );
@@ -91,7 +93,7 @@ public:
   bool getIsCompute();
 
 protected:
-  void timerEvent( QTimerEvent* );
+//  void timerEvent( QTimerEvent* );
   void closeEvent( QCloseEvent* );
 
 private slots:
@@ -139,6 +141,7 @@ private:
   QCheckBox* myDisplayDescendants;
   QWidgetAction*  cancelAction;
   QWidgetAction*  progressAction;
+  QPushButton* updateButton;
 
   int myTimer;