Salome HOME
SMH: 3.0.0 preparation - merged and adopted version (POLYWORK+HEAD)
[modules/visu.git] / src / VISUGUI / VisuGUI_TimeAnimation.cxx
index 2c971c41f8ab08a87af788815e2a9c4811684078..8133f9548a87cdef9bd6784400617905db282781 100644 (file)
@@ -9,49 +9,62 @@
 //  Module : VISU
 
 #include "VisuGUI_TimeAnimation.h"
+
 #include "VisuGUI.h"
+#include "VisuGUI_Tools.h"
+//#include "VisuGUI_MagnitudeDlg.h"
+#include "VisuGUI_CutPlanesDlg.h"
+#include "VisuGUI_VectorsDlg.h"
+#include "VisuGUI_IsoSurfacesDlg.h"
+#include "VisuGUI_StreamLinesDlg.h"
+
+#include "VISU_TimeAnimation.h"
+
+#include "VISU_ScalarMap_i.hh"
+#include "VISU_IsoSurfaces_i.hh"
+#include "VISU_DeformedShape_i.hh"
+#include "VISU_CutPlanes_i.hh"
+#include "VISU_CutLines_i.hh"
+#include "VISU_Vectors_i.hh"
+#include "VISU_StreamLines_i.hh"
+
+#include "VISU_ScalarBarActor.hxx"
+
+#include "SalomeApp_Application.h"
+
+#include "SUIT_OverrideCursor.h"
+#include "SUIT_MessageBox.h"
+#include "SUIT_Desktop.h"
+#include "SUIT_FileDlg.h"
+
+#include "VTKViewer_ViewWindow.h"
 
 #include <qlayout.h>
 #include <qhbox.h>
 #include <qhgroupbox.h>
-#include <qmessagebox.h>
 #include <qwt_wheel.h>
 #include <qlcdnumber.h>
 #include <qlistbox.h>
 #include <qvgroupbox.h>
-#include <qthread.h> 
+#include <qthread.h>
 
-#include "QAD_Application.h"
-#include "QAD_Desktop.h"
-#include "QAD_FileDlg.h"
+//static double MAXVALUE = 1.0E+300;
 
-#include "VTKViewer_ViewFrame.h"
-#include "VISU_ScalarBarActor.hxx"
 
-#include "VisuGUI_MagnitudeDlg.h"
-#include "VisuGUI_CutPlanesDlg.h"
-#include "VisuGUI_VectorsDlg.h"
-#include "VisuGUI_IsoSurfacesDlg.h"
-#include "VisuGUI_StreamLinesDlg.h"
-#include "VISU_TimeAnimation.h"
-
-static double MAXVALUE = 1.0E+300;
-
-
-
-SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator) 
-  : QDialog( theParent, "SetupDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )  
+SetupDlg::SetupDlg (QWidget* theParent, VISU_TimeAnimation* theAnimator)
+     : QDialog(theParent, "SetupDlg", true, WStyle_Customize |
+               WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
 {
   setCaption("Setup Animation");
   setSizeGripEnabled( TRUE );
   myAnimator = theAnimator;
-  
+
   QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
   aMainLayout->setSpacing(5);
 
 
   QFrame* aRangeGrp = new QFrame(this);
-  QGridLayout* aRangeLayout = new QGridLayout( aRangeGrp ); 
+  QGridLayout* aRangeLayout = new QGridLayout( aRangeGrp );
   aRangeLayout->setSpacing( 6 );
   aRangeLayout->setMargin( 11 );
   aRangeGrp->setFrameStyle(QFrame::Box | QFrame::Raised);
@@ -59,18 +72,18 @@ SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
   myUseRangeChk = new QCheckBox("Use range of time stamps", aRangeGrp);
   aRangeLayout->addMultiCellWidget(myUseRangeChk, 0, 0, 0, 3);
   myUseRangeChk->setChecked(myAnimator->isRangeDefined());
-  
+
   QLabel* aMinLbl = new QLabel("From", aRangeGrp);
   aMinLbl->setEnabled(myUseRangeChk->isChecked());
   aRangeLayout->addWidget(aMinLbl, 1, 0);
   double aStep = (myAnimator->getMaxTime() - myAnimator->getMinTime())/(theAnimator->getFieldData(0).myNbTimes - 1);
-  myMinVal = new QAD_SpinBoxDbl(aRangeGrp, myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep );
+  myMinVal = new QtxDblSpinBox( myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep, aRangeGrp );
   myMinVal->setEnabled(myUseRangeChk->isChecked());
   if (myUseRangeChk->isChecked())
     myMinVal->setValue( myAnimator->getMinRange() );
   else
     myMinVal->setValue( myAnimator->getMinTime() );
-    
+
   connect(myMinVal, SIGNAL( valueChanged(double)),
          this, SLOT( onMinValue(double) ));
   aRangeLayout->addWidget(myMinVal, 1, 1);
@@ -78,7 +91,7 @@ SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
   QLabel* aMaxLbl = new QLabel("To", aRangeGrp);
   aMaxLbl->setEnabled(myUseRangeChk->isChecked());
   aRangeLayout->addWidget(aMaxLbl, 1, 2);
-  myMaxVal = new QAD_SpinBoxDbl(aRangeGrp, myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep );
+  myMaxVal = new QtxDblSpinBox( myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep, aRangeGrp );
   myMaxVal->setEnabled(myUseRangeChk->isChecked());
   if (myUseRangeChk->isChecked())
     myMaxVal->setValue( myAnimator->getMaxRange() );
@@ -88,7 +101,7 @@ SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
   connect(myMaxVal, SIGNAL( valueChanged(double)),
          this, SLOT( onMaxValue(double) ));
   aRangeLayout->addWidget(myMaxVal, 1, 3);
-  
+
   connect(myUseRangeChk, SIGNAL( toggled(bool)),
          aMinLbl, SLOT( setEnabled(bool) ));
   connect(myUseRangeChk, SIGNAL( toggled(bool)),
@@ -98,61 +111,62 @@ SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
 
   aMainLayout->addWidget(aRangeGrp);
 
-  
+
   QHBox* aPropFrame = new QHBox(this);
   aPropFrame->setSpacing(5);
-  
-  QVGroupBox* aNamesBox = new QVGroupBox("Fields",aPropFrame);  
+
+  QVGroupBox* aNamesBox = new QVGroupBox("Fields",aPropFrame);
   myFieldLst = new QListBox(aNamesBox);
   QStringList aFieldNames;
   // Find names of fields
   for (int i = 0; i < theAnimator->getNbFields(); i++) {
-    aFieldNames.append(VisuGUI::getValue(theAnimator->getFieldData(i).myField, "myName"));
+    _PTR(SObject) aSO = theAnimator->getFieldData(i).myField;
+    aFieldNames.append(VISU::getValue(aSO, "myName"));
   }
   myFieldLst->insertStringList(aFieldNames);
   myFieldLst->setSelected(0, true);
-  connect( myFieldLst, SIGNAL( highlighted(int) ), 
+  connect( myFieldLst, SIGNAL( highlighted(int) ),
           this, SLOT( onFieldChange(int) ) );
 
-  
-  QVGroupBox* aPropBox = new QVGroupBox("Properties", aPropFrame);  
+
+  QVGroupBox* aPropBox = new QVGroupBox("Properties", aPropFrame);
   myTypeCombo = new QComboBox(aPropBox);
-  connect( myTypeCombo, SIGNAL( activated(int) ), 
+  connect( myTypeCombo, SIGNAL( activated(int) ),
           this, SLOT( onTypeChanged(int) ) );
-  
-  QPushButton* aBarBtn = new QPushButton("Scalar Bar...", aPropBox);
-  connect( aBarBtn, SIGNAL( clicked() ), 
-          this, SLOT( onScalarBarDlg() ) );
+
+  //  QPushButton* aBarBtn = new QPushButton("Scalar Bar...", aPropBox);
+  //connect( aBarBtn, SIGNAL( clicked() ),
+  //      this, SLOT( onScalarBarDlg() ) );
+
   myPropBtn = new QPushButton("Properties...", aPropBox);
-  myPropBtn->setEnabled(theAnimator->getFieldData(0).myPrsType != VISU::TSCALARMAP);
-  connect( myPropBtn, SIGNAL( clicked() ), 
+  //  myPropBtn->setEnabled(theAnimator->getFieldData(0).myPrsType != VISU::TSCALARMAP);
+  connect( myPropBtn, SIGNAL( clicked() ),
           this, SLOT( onPreferencesDlg() ) );
 
   onFieldChange(0);
   aMainLayout->addWidget(aPropFrame);
-  
+
   QHBox* aBtnBox = new QHBox(this);
-  QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout()); 
+  QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
   aBtnLayout->addStretch();
-  
-  QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
+
+  QPushButton* aCloseBtn = new QPushButton(tr("VISU_BUT_OK"), aBtnBox);
   connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
-  
+
   aMainLayout->addWidget(aBtnBox);
 }
 
-
 //************************************************************************
-void SetupDlg::onFieldChange(int theIndex) {
+void SetupDlg::onFieldChange (int theIndex)
+{
   FieldData& aData = myAnimator->getFieldData(theIndex);
   myTypeCombo->clear();
   myTypeCombo->insertItem("Scalar Map");
   myTypeCombo->insertItem("Iso Surfaces");
   myTypeCombo->insertItem("Cut Planes");
 
-  SALOMEDS::SObject_var aSObject = aData.myField;
-  long aNumComp = VisuGUI::getValue(aSObject, "myNumComponent").toLong();
+  _PTR(SObject) aSObject = aData.myField;
+  long aNumComp = VISU::getValue(aSObject, "myNumComponent").toLong();
   if (aNumComp > 1) {
     myTypeCombo->insertItem("Deformed Shape");
     myTypeCombo->insertItem("Vectors");
@@ -178,12 +192,13 @@ void SetupDlg::onFieldChange(int theIndex) {
     myTypeCombo->setCurrentItem(5);
     aData.myPrsType = VISU::TSTREAMLINES;
     break;
-  }  
-  myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
+  }
+  //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
 }
 
 //************************************************************************
-void SetupDlg::onTypeChanged(int theIndex) {
+void SetupDlg::onTypeChanged (int theIndex)
+{
   FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
   switch (theIndex) {
   case 0: //Scalar Map
@@ -206,16 +221,15 @@ void SetupDlg::onTypeChanged(int theIndex) {
     break;
   }
   myAnimator->clearData(aData);
-  myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
+  //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
   //myAnimator->generatePresentations(myFieldLst->currentItem());
 }
 
-
 //************************************************************************
-void SetupDlg::onScalarBarDlg() {
+/*void SetupDlg::onScalarBarDlg() {
   QApplication::setOverrideCursor( Qt::waitCursor );
   FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
-  if (aData.myPrs == 0) 
+  if (aData.myPrs == 0)
     myAnimator->generatePresentations(myFieldLst->currentItem());
   QApplication::restoreOverrideCursor();
 
@@ -226,72 +240,72 @@ void SetupDlg::onScalarBarDlg() {
       aScalarBarDlg->storeToPrsObject(aData.myPrs[i]);
   }
 }
+*/
 
 //************************************************************************
-void SetupDlg::onPreferencesDlg() {
-  QApplication::setOverrideCursor( Qt::waitCursor );
+void SetupDlg::onPreferencesDlg()
+{
+  MESSAGE("SetupDlg::onPreferencesDlg() is not implemented");
+/*  SUIT_OverrideCursor c;
   FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
-  if (aData.myPrs == 0)
+  if (aData.myPrs.empty())
     myAnimator->generatePresentations(myFieldLst->currentItem());
-  QApplication::restoreOverrideCursor();
+
+// BUG VISU5725 : Compatibility gcc 2.95
+// #define EDITPRS(TYPE, DLG) \
+//     { \
+//       DLG* aDlg = new DLG(); \
+//       aDlg->initFromPrsObject(dynamic_cast<TYPE*>(aData.myPrs.at(0))); \
+//       if (aDlg->exec()) { \
+//     for (int i = 0; i < aData.myNbFrames; i++) \
+//       aDlg->storeToPrsObject(dynamic_cast<TYPE*>(aData.myPrs.at(i))); \
+//       } \
+//       delete aDlg; \
+//     }
+
+
+#define EDITPRS(TYPE, DLG) {DLG* aDlg = new DLG(); aDlg->initFromPrsObject(dynamic_cast<TYPE*>(aData.myPrs[0])); if (aDlg->exec()) { for (int i = 0; i < aData.myNbFrames; i++) aDlg->storeToPrsObject(dynamic_cast<TYPE*>(aData.myPrs[i])); } delete aDlg;}
 
   switch (myTypeCombo->currentItem()) {
+  case 0: //Scalar Map
+    EDITPRS(VISU::ScalarMap_i, VisuGUI_ScalarBarDlg);
+    break;
   case 1: //Iso Surfaces
-    {
-      VisuGUI_IsoSurfacesDlg* aDlg = new VisuGUI_IsoSurfacesDlg();
-      aDlg->initFromPrsObject(dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[0]));
-      if (aDlg->exec()) {
-       for (int i = 0; i < aData.myNbFrames; i++)
-         aDlg->storeToPrsObject(dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[i]));
-      }
-    }
+    EDITPRS(VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg);
     break;
   case 2: //Cut Planes
+    //    EDITPRS(VISU::CutPlanes_i, VisuGUI_CutPlanesDlg);
     {
-      VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg();
+      VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg(false, true);
+      //_CS_PhB :operator [] .at      aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs.at(0)));
       aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[0]));
+
       if (aDlg->exec()) {
        for (int i = 0; i < aData.myNbFrames; i++)
+      //_CS_PhB:operator [] .at          aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs.at(i)));
          aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[i]));
       }
+      delete aDlg;
     }
     break;
   case 3: //Deformed Shape
-    {
-      VisuGUI_MagnitudeDlg* aDlg = new VisuGUI_MagnitudeDlg();
-      aDlg->initFromPrsObject(dynamic_cast<VISU::DeformedShape_i*>(aData.myPrs[0]));      
-      if (aDlg->exec()) {
-       for (int i = 0; i < aData.myNbFrames; i++)
-         aDlg->storeToPrsObject(dynamic_cast<VISU::DeformedShape_i*>(aData.myPrs[i]));
-      }
-    }
+    EDITPRS(VISU::DeformedShape_i, VisuGUI_MagnitudeDlg);
     break;
   case 4: //Vectors
-    {
-      VisuGUI_VectorsDlg* aDlg = new VisuGUI_VectorsDlg();
-      aDlg->initFromPrsObject(dynamic_cast<VISU::Vectors_i*>(aData.myPrs[0]));
-      if (aDlg->exec()) {
-       for (int i = 0; i < aData.myNbFrames; i++)
-         aDlg->storeToPrsObject(dynamic_cast<VISU::Vectors_i*>(aData.myPrs[i]));
-      }
-    }
+    EDITPRS(VISU::Vectors_i, VisuGUI_VectorsDlg);
     break;
   case 5: //Stream Lines
-    {
-      VisuGUI_StreamLinesDlg* aDlg = new VisuGUI_StreamLinesDlg();
-      aDlg->initFromPrsObject(dynamic_cast<VISU::StreamLines_i*>(aData.myPrs[0]));
-      if (aDlg->exec()) {
-       for (int i = 0; i < aData.myNbFrames; i++)
-         aDlg->storeToPrsObject(dynamic_cast<VISU::StreamLines_i*>(aData.myPrs[i]));
-      }
-    }
+    EDITPRS(VISU::StreamLines_i, VisuGUI_StreamLinesDlg);
     break;
   }
+#undef EDITPRS
+*/
 }
 
 //************************************************************************
-void SetupDlg::onRangeCheck(bool theCheck) {
-  for (int i = 0; i < myAnimator->getNbFields(); i++) 
+void SetupDlg::onRangeCheck (bool theCheck)
+{
+  for (int i = 0; i < myAnimator->getNbFields(); i++)
     myAnimator->clearData(myAnimator->getFieldData(i));
 
   myMinVal->setEnabled(theCheck);
@@ -301,7 +315,7 @@ void SetupDlg::onRangeCheck(bool theCheck) {
     myAnimator->setAnimationRange(0, 0);
   else {
     //    if (myMinVal->value() < myMaxVal->value())
-    myAnimator->setAnimationRange(myMinVal->value(), myMaxVal->value());    
+    myAnimator->setAnimationRange(myMinVal->value(), myMaxVal->value());
 //     else if (myMinVal->value() > myMaxVal->value())
 //       myAnimator->setAnimationRange(myMaxVal->value(), myMinVal->value());
 //     else // equal case
@@ -310,30 +324,31 @@ void SetupDlg::onRangeCheck(bool theCheck) {
 }
 
 //************************************************************************
-void SetupDlg::onMinValue(double theVal) {
+void SetupDlg::onMinValue (double theVal)
+{
   if (theVal > myAnimator->getMaxRange()) {
     myMinVal->setValue( myAnimator->getMinTime() );
     myMinVal->setFocus();
     return;
   }
-  for (int i = 0; i < myAnimator->getNbFields(); i++) 
+  for (int i = 0; i < myAnimator->getNbFields(); i++)
     myAnimator->clearData(myAnimator->getFieldData(i));
   myAnimator->setAnimationRange(theVal, myAnimator->getMaxRange());
 }
 
 //************************************************************************
-void SetupDlg::onMaxValue(double theVal) {
+void SetupDlg::onMaxValue (double theVal)
+{
   if (theVal < myAnimator->getMinRange()) {
     myMaxVal->setValue( myAnimator->getMaxTime() );
     myMaxVal->setFocus();
     return;
   }
-  for (int i = 0; i < myAnimator->getNbFields(); i++) 
+  for (int i = 0; i < myAnimator->getNbFields(); i++)
     myAnimator->clearData(myAnimator->getFieldData(i));
   myAnimator->setAnimationRange(myAnimator->getMinRange(), theVal);
 }
 
-
 static const char * firstIco[] = {
 "18 10 2 1",
 "      g None",
@@ -403,7 +418,6 @@ static const char * playIco[] = {
 static QPixmap MYplayPixmap(playIco);
 
 
-
 static const char * rightIco[] = {
 "11 10 2 1",
 "      g None",
@@ -442,42 +456,42 @@ static const char * pauseIco[] = {
 static QPixmap MYpausePixmap(pauseIco);
 
 
-VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy) 
-  : QDialog( QAD_Application::getDesktop(), "VisuGUI_TimeAnimationDlg", false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose)
+VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg (QWidget* parent, _PTR(Study) theStudy)
+     : QDialog(parent, "VisuGUI_TimeAnimationDlg", false, WStyle_Customize |
+               WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose)
 {
   setCaption("Animation");
   setSizeGripEnabled( TRUE );
   myStudy = theStudy;
   isClosing = false;
 
-  myAnimator = new VISU_TimeAnimation(theStudy);
+  //myAnimator = new VISU_TimeAnimation (VISU::GetDSStudy(theStudy));
+  myAnimator = new VISU_TimeAnimation (theStudy);
   myAnimator->setSpeed(1);
-  myAnimator->setViewer(VisuGUI::GetVtkViewFrame());
-  connect( myAnimator, SIGNAL( frameChanged(long, double) ), 
-          this, SLOT( onExecution(long, double) ) );
-  connect( myAnimator, SIGNAL( stopped() ), 
-          this, SLOT( onStop() ) );
+  myAnimator->setViewer(VISU::GetViewWindow());
+  connect(myAnimator, SIGNAL(frameChanged(long, double)), this, SLOT(onExecution(long, double)));
+  connect(myAnimator, SIGNAL(stopped()),                 this, SLOT(onStop()));
 
   QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
   aMainLayout->setSpacing(5);
 
   mySetupBtn = new QPushButton("Setup Animation...", this);
-  connect( mySetupBtn, SIGNAL( clicked() ), 
+  connect( mySetupBtn, SIGNAL( clicked() ),
           this, SLOT( onSetupDlg() ) );
-  aMainLayout->addWidget(mySetupBtn);  
-  
+  aMainLayout->addWidget(mySetupBtn);
+
   myGenBtn = new QPushButton("Generate frames", this);
-  connect( myGenBtn, SIGNAL( clicked() ), 
+  connect( myGenBtn, SIGNAL( clicked() ),
           this, SLOT( createFrames() ) );
   aMainLayout->addWidget(myGenBtn);
 
   myPlayFrame = new QFrame(this);
   myPlayFrame->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
   myPlayFrame->setLineWidth( 1 );
+
 
   // --- Play controls ---
-  QGridLayout* TopLayout = new QGridLayout( myPlayFrame ); 
+  QGridLayout* TopLayout = new QGridLayout( myPlayFrame );
   TopLayout->setSpacing( 6 );
   TopLayout->setMargin( 11 );
 
@@ -490,41 +504,41 @@ VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
   mySlider->setTickInterval(1);
   //mySlider->setTickmarks(QSlider::Below);
   mySlider->setTracking(false);
-  connect( mySlider, SIGNAL( valueChanged(int) ), 
-          this, SLOT( onFrameChanged(int) ) );
+  connect( mySlider, SIGNAL( valueChanged(int) ),
+          this, SLOT( onWindowChanged(int) ) );
   TopLayout->addMultiCellWidget(mySlider, 1, 1, 0, 2);
 
   myPlayBtn = new QToolButton(myPlayFrame);
   myPlayBtn->setIconSet(MYplayPixmap);
   myPlayBtn->setToggleButton(true);
-  connect( myPlayBtn, SIGNAL( clicked() ), 
+  connect( myPlayBtn, SIGNAL( clicked() ),
           this, SLOT( onPlayPressed() ) );
   TopLayout->addMultiCellWidget(myPlayBtn, 2, 2, 0, 1);
 
   QToolButton* aBackBtn = new QToolButton(myPlayFrame);
   aBackBtn->setIconSet(QPixmap(leftIco));
-  connect( aBackBtn, SIGNAL( clicked() ), 
+  connect( aBackBtn, SIGNAL( clicked() ),
           this, SLOT( onBackPressed() ) );
   TopLayout->addWidget(aBackBtn, 3, 0);
 
   QToolButton* aForvardBtn = new QToolButton(myPlayFrame);
   aForvardBtn->setIconSet(QPixmap(rightIco));
-  connect( aForvardBtn, SIGNAL( clicked() ), 
+  connect( aForvardBtn, SIGNAL( clicked() ),
           this, SLOT( onForvardPressed() ) );
   TopLayout->addWidget(aForvardBtn, 3, 1);
 
   QToolButton* aFirstBtn = new QToolButton(myPlayFrame);
   aFirstBtn->setIconSet(QPixmap(firstIco));
-  connect( aFirstBtn, SIGNAL( clicked() ), 
+  connect( aFirstBtn, SIGNAL( clicked() ),
           this, SLOT( onFirstPressed() ) );
   TopLayout->addWidget(aFirstBtn, 4, 0);
-  
+
   QToolButton* aLastBtn = new QToolButton(myPlayFrame);
   aLastBtn->setIconSet(QPixmap(lastIco));
-  connect( aLastBtn, SIGNAL( clicked() ), 
+  connect( aLastBtn, SIGNAL( clicked() ),
           this, SLOT( onLastPressed() ) );
   TopLayout->addWidget(aLastBtn, 4, 1);
-  
+
   QLabel* aSpeedLbl = new QLabel("Speed", myPlayFrame);
   TopLayout->addWidget(aSpeedLbl, 4, 2, Qt::AlignRight);
 
@@ -536,9 +550,9 @@ VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
   QwtWheel* aWheel = new QwtWheel(myPlayFrame);
   aWheel->setOrientation(Qt::Vertical);
   aWheel->setRange(1, 99, 1);
-  connect( aWheel, SIGNAL(valueChanged(double)), 
+  connect( aWheel, SIGNAL(valueChanged(double)),
           aSpeedNum, SLOT(display(double)) );
-  connect( aWheel, SIGNAL(valueChanged(double)), 
+  connect( aWheel, SIGNAL(valueChanged(double)),
           this, SLOT(onSpeedChange(double)) );
   TopLayout->addMultiCellWidget(aWheel, 1, 3, 3, 3, Qt::AlignRight);
 
@@ -560,13 +574,15 @@ VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
 
   mySaveCheck = new QCheckBox("Save pictures to directory", aSaveBox);
   aSaveLay->addMultiCellWidget(mySaveCheck, 0, 0, 0, 2);
+  connect(mySaveCheck, SIGNAL( toggled(bool)),
+         aWheel, SLOT( setDisabled(bool) ));
 
   QLabel* aPathLbl = new QLabel("Path:", aSaveBox);
   aPathLbl->setEnabled(false);
   connect(mySaveCheck, SIGNAL( toggled(bool)),
          aPathLbl, SLOT( setEnabled(bool) ));
   aSaveLay->addWidget(aPathLbl, 1, 0);
-  
+
   myPathEdit = new QLineEdit(aSaveBox);
   myPathEdit->setEnabled(false);
   connect(mySaveCheck, SIGNAL( toggled(bool)),
@@ -587,68 +603,77 @@ VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
   aMainLayout->addWidget(myPlayFrame);
 
   QHBox* aBtnBox = new QHBox(this);
-  QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout()); 
+  QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
   aBtnLayout->addStretch();
 
   QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
   connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
-  
+
   aMainLayout->addWidget(aBtnBox);
 
   myPlayFrame->setEnabled(false);
 }
 
-
 //************************************************************************
-VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg() {
+VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg()
+{
   delete myAnimator;
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onTypeChange(int index) {
+void VisuGUI_TimeAnimationDlg::onTypeChange (int index)
+{
   stopAnimation();
   myPropBtn->setEnabled(index != 0);
-  
+
   clearView();
   myPlayFrame->setEnabled(false);
 }
 
-
 //************************************************************************
-void  VisuGUI_TimeAnimationDlg::addField(SALOMEDS::SObject_var theSObject) {
+void VisuGUI_TimeAnimationDlg::addField (_PTR(SObject) theSObject)
+{
   myPlayFrame->setEnabled(false);
-  myAnimator->addField(theSObject);
+  myAnimator->addField(VISU::GetSObject(theSObject));
 }
 
-
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::createFrames() {
+void VisuGUI_TimeAnimationDlg::createFrames()
+{
   stopAnimation();
-  QApplication::setOverrideCursor( Qt::waitCursor );
+  SUIT_OverrideCursor c;
 
   for (int i = 0; i < myAnimator->getNbFields(); i++) {
-    if (myAnimator->getFieldData(i).myPrs == 0) 
+    if (myAnimator->getFieldData(i).myPrs.empty())
       myAnimator->generatePresentations(i);
   }
+  if (myAnimator->getNbFrames() == 0) {
+    myPlayFrame->setEnabled(false);
+    c.suspend();
+    SUIT_MessageBox::warn1(this,
+                           tr("ERROR"),
+                           tr("MSG_NO_ANIMATIONDATA"),
+                           tr("OK"));
+    return;
+  }
   mySlider->setMaxValue(myAnimator->getNbFrames()-1);
   myPlayFrame->setEnabled(true);
   if (!myAnimator->generateFrames()) {
-    QApplication::restoreOverrideCursor();
+    c.suspend();
     //myPlayFrame->setEnabled(false);
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), myAnimator->getLastErrorMsg()); 
+    SUIT_MessageBox::warn1(this,
+                           tr("ERROR"),
+                           myAnimator->getLastErrorMsg(),
+                           tr("OK"));
     return;
   }
   //myPlayFrame->setEnabled(true);
-  QApplication::restoreOverrideCursor();
 }
-  
 
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onPlayPressed() {
-  if (myPlayBtn->isOn()) {
+void VisuGUI_TimeAnimationDlg::onPlayPressed()
+{
+  if (myPlayBtn->isOn() && (!myAnimator->running())) {
     myPlayBtn->setIconSet(MYpausePixmap);
     if (mySaveCheck->isChecked())
       myAnimator->dumpTo(myPathEdit->text());
@@ -666,39 +691,39 @@ void VisuGUI_TimeAnimationDlg::onPlayPressed() {
 }
 
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onBackPressed() {
+void VisuGUI_TimeAnimationDlg::onBackPressed()
+{
   //stopAnimation();
   myAnimator->prevFrame();
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onForvardPressed() {
+void VisuGUI_TimeAnimationDlg::onForvardPressed()
+{
   myAnimator->nextFrame();
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onLastPressed() {
+void VisuGUI_TimeAnimationDlg::onLastPressed()
+{
   myAnimator->lastFrame();
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onFirstPressed() {
+void VisuGUI_TimeAnimationDlg::onFirstPressed()
+{
   myAnimator->firstFrame();
 }
 
-
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::clearView() {
+void VisuGUI_TimeAnimationDlg::clearView()
+{
   myAnimator->clearView();
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::closeEvent(QCloseEvent* theEvent) {
+void VisuGUI_TimeAnimationDlg::closeEvent (QCloseEvent* theEvent)
+{
   myAnimator->stopAnimation();
   if (myAnimator->running() && (! myAnimator->finished())) {
     isClosing = true;
@@ -708,22 +733,22 @@ void VisuGUI_TimeAnimationDlg::closeEvent(QCloseEvent* theEvent) {
   }
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onFrameChanged(int index) {
+void VisuGUI_TimeAnimationDlg::onWindowChanged (int index)
+{
   if (myAnimator->isRunning()) return;
   myAnimator->gotoFrame(index);
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onSpeedChange(double theSpeed) {
+void VisuGUI_TimeAnimationDlg::onSpeedChange (double theSpeed)
+{
   myAnimator->setSpeed((int)theSpeed);
 }
-    
 
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::stopAnimation() {
+void VisuGUI_TimeAnimationDlg::stopAnimation()
+{
   myAnimator->stopAnimation();
   myPlayBtn->setOn(false);
   myPlayBtn->setIconSet(MYplayPixmap);
@@ -732,14 +757,16 @@ void VisuGUI_TimeAnimationDlg::stopAnimation() {
 }
 
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onExecution(long theNewFrame, double theTime) {
+void VisuGUI_TimeAnimationDlg::onExecution (long theNewFrame, double theTime)
+{
   myTimeLbl->setText(QString("%1").arg(theTime));
   mySlider->setValue(theNewFrame);
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onSetupDlg() {
+void VisuGUI_TimeAnimationDlg::onSetupDlg()
+{
+  if (myAnimator->getNbFrames() > 0) myAnimator->firstFrame();
   SetupDlg* aDlg = new SetupDlg(this, myAnimator);
   aDlg->exec();
   myPlayFrame->setEnabled(false);
@@ -747,13 +774,16 @@ void VisuGUI_TimeAnimationDlg::onSetupDlg() {
 }
 
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onBrowse() {
-  myPathEdit->setText(QAD_FileDlg::getExistingDirectory(this, "/","Select path"));
+void VisuGUI_TimeAnimationDlg::onBrowse()
+{
+  QString aPath = SUIT_FileDlg::getExistingDirectory(this, "/","Select path");
+  if (!aPath.isEmpty())
+    myPathEdit->setText(aPath);
 }
 
-
 //************************************************************************
-void VisuGUI_TimeAnimationDlg::onStop() {
+void VisuGUI_TimeAnimationDlg::onStop()
+{
   if (isClosing) {
     QDialog::closeEvent(myEvent);
   } else {