1 // VISU VISUGUI : GUI of VISU component
3 // Copyright (C) 2003 CEA/DEN, EDF R&D
7 // File : VisuGUI_TimeAnimation.cxx
8 // Author : Vitaly SMETANNIKOV
11 #include "VisuGUI_TimeAnimation.h"
14 #include "VisuGUI_Tools.h"
15 #include "VisuGUI_DeformedShapeDlg.h"
16 #include "VisuGUI_CutPlanesDlg.h"
17 #include "VisuGUI_VectorsDlg.h"
18 #include "VisuGUI_IsoSurfacesDlg.h"
19 #include "VisuGUI_StreamLinesDlg.h"
21 #include "VISU_TimeAnimation.h"
23 #include "VISU_ScalarMap_i.hh"
24 #include "VISU_IsoSurfaces_i.hh"
25 #include "VISU_DeformedShape_i.hh"
26 #include "VISU_CutPlanes_i.hh"
27 #include "VISU_CutLines_i.hh"
28 #include "VISU_Vectors_i.hh"
29 #include "VISU_StreamLines_i.hh"
31 #include "VISU_ScalarBarActor.hxx"
33 #include "SalomeApp_Application.h"
35 #include "SUIT_OverrideCursor.h"
36 #include "SUIT_MessageBox.h"
37 #include "SUIT_Desktop.h"
38 #include "SUIT_FileDlg.h"
42 #include <qhgroupbox.h>
43 #include <qwt_wheel.h>
44 #include <qlcdnumber.h>
46 #include <qvgroupbox.h>
49 //static double MAXVALUE = 1.0E+300;
52 SetupDlg::SetupDlg (QWidget* theParent, VISU_TimeAnimation* theAnimator)
53 : QDialog(theParent, "SetupDlg", true, WStyle_Customize |
54 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
56 setCaption("Setup Animation");
57 setSizeGripEnabled( TRUE );
58 myAnimator = theAnimator;
60 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
61 aMainLayout->setSpacing(5);
64 QFrame* aRangeGrp = new QFrame(this);
65 QGridLayout* aRangeLayout = new QGridLayout( aRangeGrp );
66 aRangeLayout->setSpacing( 6 );
67 aRangeLayout->setMargin( 11 );
68 aRangeGrp->setFrameStyle(QFrame::Box | QFrame::Raised);
70 myUseRangeChk = new QCheckBox("Use range of time stamps", aRangeGrp);
71 aRangeLayout->addMultiCellWidget(myUseRangeChk, 0, 0, 0, 3);
72 myUseRangeChk->setChecked(myAnimator->isRangeDefined());
74 QLabel* aMinLbl = new QLabel("From", aRangeGrp);
75 aMinLbl->setEnabled(myUseRangeChk->isChecked());
76 aRangeLayout->addWidget(aMinLbl, 1, 0);
77 double aStep = (myAnimator->getMaxTime() - myAnimator->getMinTime())/(theAnimator->getFieldData(0).myNbTimes - 1);
78 myMinVal = new QtxDblSpinBox( myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep, aRangeGrp );
79 myMinVal->setEnabled(myUseRangeChk->isChecked());
80 if (myUseRangeChk->isChecked())
81 myMinVal->setValue( myAnimator->getMinRange() );
83 myMinVal->setValue( myAnimator->getMinTime() );
85 connect(myMinVal, SIGNAL( valueChanged(double)),
86 this, SLOT( onMinValue(double) ));
87 aRangeLayout->addWidget(myMinVal, 1, 1);
89 QLabel* aMaxLbl = new QLabel("To", aRangeGrp);
90 aMaxLbl->setEnabled(myUseRangeChk->isChecked());
91 aRangeLayout->addWidget(aMaxLbl, 1, 2);
92 myMaxVal = new QtxDblSpinBox( myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep, aRangeGrp );
93 myMaxVal->setEnabled(myUseRangeChk->isChecked());
94 if (myUseRangeChk->isChecked())
95 myMaxVal->setValue( myAnimator->getMaxRange() );
97 myMaxVal->setValue( myAnimator->getMaxTime() );
99 connect(myMaxVal, SIGNAL( valueChanged(double)),
100 this, SLOT( onMaxValue(double) ));
101 aRangeLayout->addWidget(myMaxVal, 1, 3);
103 connect(myUseRangeChk, SIGNAL( toggled(bool)),
104 aMinLbl, SLOT( setEnabled(bool) ));
105 connect(myUseRangeChk, SIGNAL( toggled(bool)),
106 aMaxLbl, SLOT( setEnabled(bool) ));
107 connect(myUseRangeChk, SIGNAL( toggled(bool)),
108 this, SLOT( onRangeCheck(bool) ));
110 aMainLayout->addWidget(aRangeGrp);
113 QHBox* aPropFrame = new QHBox(this);
114 aPropFrame->setSpacing(5);
116 QVGroupBox* aNamesBox = new QVGroupBox("Fields",aPropFrame);
117 myFieldLst = new QListBox(aNamesBox);
118 QStringList aFieldNames;
119 // Find names of fields
120 for (int i = 0; i < theAnimator->getNbFields(); i++) {
121 _PTR(SObject) aSO = theAnimator->getFieldData(i).myField;
122 aFieldNames.append(VISU::getValue(aSO, "myName"));
124 myFieldLst->insertStringList(aFieldNames);
125 myFieldLst->setSelected(0, true);
126 connect( myFieldLst, SIGNAL( highlighted(int) ),
127 this, SLOT( onFieldChange(int) ) );
130 QVGroupBox* aPropBox = new QVGroupBox("Properties", aPropFrame);
131 myTypeCombo = new QComboBox(aPropBox);
132 connect( myTypeCombo, SIGNAL( activated(int) ),
133 this, SLOT( onTypeChanged(int) ) );
135 // QPushButton* aBarBtn = new QPushButton("Scalar Bar...", aPropBox);
136 //connect( aBarBtn, SIGNAL( clicked() ),
137 // this, SLOT( onScalarBarDlg() ) );
139 myPropBtn = new QPushButton("Properties...", aPropBox);
140 // myPropBtn->setEnabled(theAnimator->getFieldData(0).myPrsType != VISU::TSCALARMAP);
141 connect( myPropBtn, SIGNAL( clicked() ),
142 this, SLOT( onPreferencesDlg() ) );
145 aMainLayout->addWidget(aPropFrame);
147 QHBox* aBtnBox = new QHBox(this);
148 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
149 aBtnLayout->addStretch();
151 QPushButton* aCloseBtn = new QPushButton(tr("BUT_OK"), aBtnBox);
152 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
154 aMainLayout->addWidget(aBtnBox);
157 //************************************************************************
158 void SetupDlg::onFieldChange (int theIndex)
160 FieldData& aData = myAnimator->getFieldData(theIndex);
161 myTypeCombo->clear();
162 myTypeCombo->insertItem("Scalar Map");
163 myTypeCombo->insertItem("Iso Surfaces");
164 myTypeCombo->insertItem("Cut Planes");
166 _PTR(SObject) aSObject = aData.myField;
167 long aNumComp = VISU::getValue(aSObject, "myNumComponent").toLong();
169 myTypeCombo->insertItem("Deformed Shape");
170 myTypeCombo->insertItem("Vectors");
171 myTypeCombo->insertItem("Stream Lines");
173 switch (aData.myPrsType) {
174 case VISU::TSCALARMAP: //Scalar Map
175 myTypeCombo->setCurrentItem(0);
177 case VISU::TISOSURFACE: //Iso Surfaces
178 myTypeCombo->setCurrentItem(1);
180 case VISU::TCUTPLANES: //Cut Planes
181 myTypeCombo->setCurrentItem(2);
183 case VISU::TDEFORMEDSHAPE: //Deformed Shape
184 myTypeCombo->setCurrentItem(3);
186 case VISU::TVECTORS: //Vectors
187 myTypeCombo->setCurrentItem(4);
189 case VISU::TSTREAMLINES: //Stream Lines
190 myTypeCombo->setCurrentItem(5);
191 aData.myPrsType = VISU::TSTREAMLINES;
194 //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
197 //************************************************************************
198 void SetupDlg::onTypeChanged (int theIndex)
200 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
203 aData.myPrsType = VISU::TSCALARMAP;
205 case 1: //Iso Surfaces
206 aData.myPrsType = VISU::TISOSURFACE;
209 aData.myPrsType = VISU::TCUTPLANES;
211 case 3: //Deformed Shape
212 aData.myPrsType = VISU::TDEFORMEDSHAPE;
215 aData.myPrsType = VISU::TVECTORS;
217 case 5: //Stream Lines
218 aData.myPrsType = VISU::TSTREAMLINES;
221 myAnimator->clearData(aData);
222 //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
223 //myAnimator->generatePresentations(myFieldLst->currentItem());
226 //************************************************************************
227 /*void SetupDlg::onScalarBarDlg() {
228 QApplication::setOverrideCursor( Qt::waitCursor );
229 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
230 if (aData.myPrs == 0)
231 myAnimator->generatePresentations(myFieldLst->currentItem());
232 QApplication::restoreOverrideCursor();
234 VisuGUI_ScalarBarDlg* aScalarBarDlg = new VisuGUI_ScalarBarDlg();
235 aScalarBarDlg->initFromPrsObject(aData.myPrs[0]);
236 if (aScalarBarDlg->exec()) {
237 for (int i = 0; i < aData.myNbFrames; i++)
238 aScalarBarDlg->storeToPrsObject(aData.myPrs[i]);
243 //************************************************************************
244 void SetupDlg::onPreferencesDlg()
246 MESSAGE("SetupDlg::onPreferencesDlg() is not implemented");
247 SUIT_OverrideCursor c;
248 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
249 if (aData.myPrs.empty())
250 myAnimator->generatePresentations(myFieldLst->currentItem());
252 // BUG VISU5725 : Compatibility gcc 2.95
253 // #define EDITPRS(TYPE, DLG) \
255 // DLG* aDlg = new DLG(); \
256 // aDlg->initFromPrsObject(dynamic_cast<TYPE*>(aData.myPrs.at(0))); \
257 // if (aDlg->exec()) { \
258 // for (int i = 0; i < aData.myNbFrames; i++) \
259 // aDlg->storeToPrsObject(dynamic_cast<TYPE*>(aData.myPrs.at(i))); \
265 #define EDITPRS(TYPE, DLG) {\
266 DLG* aDlg = new DLG(this);\
267 aDlg->initFromPrsObject(dynamic_cast<TYPE*>(aData.myPrs[0]));\
270 for (int i = 0; i < aData.myNbFrames; i++)\
271 aDlg->storeToPrsObject(dynamic_cast<TYPE*>(aData.myPrs[i]));\
275 switch (myTypeCombo->currentItem()) {
278 EDITPRS(VISU::ScalarMap_i, VisuGUI_ScalarBarDlg);
280 case 1: //Iso Surfaces
282 EDITPRS(VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg);
285 // EDITPRS(VISU::CutPlanes_i, VisuGUI_CutPlanesDlg);
288 VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg(false, true);
289 //_CS_PhB :operator [] .at aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs.at(0)));
290 aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[0]));
293 for (int i = 0; i < aData.myNbFrames; i++)
294 //_CS_PhB:operator [] .at aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs.at(i)));
295 aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[i]));
300 case 3: //Deformed Shape
302 EDITPRS(VISU::DeformedShape_i, VisuGUI_DeformedShapeDlg);
306 EDITPRS(VISU::Vectors_i, VisuGUI_VectorsDlg);
308 case 5: //Stream Lines
310 EDITPRS(VISU::StreamLines_i, VisuGUI_StreamLinesDlg);
317 //************************************************************************
318 void SetupDlg::onRangeCheck (bool theCheck)
320 for (int i = 0; i < myAnimator->getNbFields(); i++)
321 myAnimator->clearData(myAnimator->getFieldData(i));
323 myMinVal->setEnabled(theCheck);
324 myMaxVal->setEnabled(theCheck);
327 myAnimator->setAnimationRange(0, 0);
329 // if (myMinVal->value() < myMaxVal->value())
330 myAnimator->setAnimationRange(myMinVal->value(), myMaxVal->value());
331 // else if (myMinVal->value() > myMaxVal->value())
332 // myAnimator->setAnimationRange(myMaxVal->value(), myMinVal->value());
333 // else // equal case
334 // myAnimator->setAnimationRange(0, 0);
338 //************************************************************************
339 void SetupDlg::onMinValue (double theVal)
341 if (theVal > myAnimator->getMaxRange()) {
342 myMinVal->setValue( myAnimator->getMinTime() );
343 myMinVal->setFocus();
346 for (int i = 0; i < myAnimator->getNbFields(); i++)
347 myAnimator->clearData(myAnimator->getFieldData(i));
348 myAnimator->setAnimationRange(theVal, myAnimator->getMaxRange());
351 //************************************************************************
352 void SetupDlg::onMaxValue (double theVal)
354 if (theVal < myAnimator->getMinRange()) {
355 myMaxVal->setValue( myAnimator->getMaxTime() );
356 myMaxVal->setFocus();
359 for (int i = 0; i < myAnimator->getNbFields(); i++)
360 myAnimator->clearData(myAnimator->getFieldData(i));
361 myAnimator->setAnimationRange(myAnimator->getMinRange(), theVal);
364 static const char * firstIco[] = {
380 static const char * lastIco[] = {
396 static const char * leftIco[] = {
411 static const char * playIco[] = {
430 static QPixmap MYplayPixmap(playIco);
433 static const char * rightIco[] = {
449 static const char * pauseIco[] = {
468 static QPixmap MYpausePixmap(pauseIco);
471 VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg (QWidget* parent, _PTR(Study) theStudy)
472 : QDialog(parent, "VisuGUI_TimeAnimationDlg", false, WStyle_Customize |
473 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose)
475 setCaption("Animation");
476 setSizeGripEnabled( TRUE );
480 //myAnimator = new VISU_TimeAnimation (VISU::GetDSStudy(theStudy));
481 myAnimator = new VISU_TimeAnimation (theStudy);
482 myAnimator->setSpeed(1);
483 myAnimator->setViewer(VISU::GetViewWindow());
484 connect(myAnimator, SIGNAL(frameChanged(long, double)), this, SLOT(onExecution(long, double)));
485 connect(myAnimator, SIGNAL(stopped()), this, SLOT(onStop()));
487 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
488 aMainLayout->setSpacing(5);
490 mySetupBtn = new QPushButton("Setup Animation...", this);
491 connect( mySetupBtn, SIGNAL( clicked() ),
492 this, SLOT( onSetupDlg() ) );
493 aMainLayout->addWidget(mySetupBtn);
495 myGenBtn = new QPushButton("Generate frames", this);
496 connect( myGenBtn, SIGNAL( clicked() ),
497 this, SLOT( createFrames() ) );
498 aMainLayout->addWidget(myGenBtn);
500 myPlayFrame = new QFrame(this);
501 myPlayFrame->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
502 myPlayFrame->setLineWidth( 1 );
505 // --- Play controls ---
506 QGridLayout* TopLayout = new QGridLayout( myPlayFrame );
507 TopLayout->setSpacing( 6 );
508 TopLayout->setMargin( 11 );
510 myTimeLbl = new QLabel("0", myPlayFrame);
511 TopLayout->addMultiCellWidget(myTimeLbl, 0, 0, 0, 2, Qt::AlignHCenter);
513 mySlider = new QSlider(Qt::Horizontal, myPlayFrame);
514 mySlider->setMinValue(0);
515 mySlider->setMaxValue(3);
516 mySlider->setTickInterval(1);
517 //mySlider->setTickmarks(QSlider::Below);
518 mySlider->setTracking(false);
519 connect( mySlider, SIGNAL( valueChanged(int) ),
520 this, SLOT( onWindowChanged(int) ) );
521 TopLayout->addMultiCellWidget(mySlider, 1, 1, 0, 2);
523 myPlayBtn = new QToolButton(myPlayFrame);
524 myPlayBtn->setIconSet(MYplayPixmap);
525 myPlayBtn->setToggleButton(true);
526 connect( myPlayBtn, SIGNAL( clicked() ),
527 this, SLOT( onPlayPressed() ) );
528 TopLayout->addMultiCellWidget(myPlayBtn, 2, 2, 0, 1);
530 QToolButton* aBackBtn = new QToolButton(myPlayFrame);
531 aBackBtn->setIconSet(QPixmap(leftIco));
532 connect( aBackBtn, SIGNAL( clicked() ),
533 this, SLOT( onBackPressed() ) );
534 TopLayout->addWidget(aBackBtn, 3, 0);
536 QToolButton* aForvardBtn = new QToolButton(myPlayFrame);
537 aForvardBtn->setIconSet(QPixmap(rightIco));
538 connect( aForvardBtn, SIGNAL( clicked() ),
539 this, SLOT( onForvardPressed() ) );
540 TopLayout->addWidget(aForvardBtn, 3, 1);
542 QToolButton* aFirstBtn = new QToolButton(myPlayFrame);
543 aFirstBtn->setIconSet(QPixmap(firstIco));
544 connect( aFirstBtn, SIGNAL( clicked() ),
545 this, SLOT( onFirstPressed() ) );
546 TopLayout->addWidget(aFirstBtn, 4, 0);
548 QToolButton* aLastBtn = new QToolButton(myPlayFrame);
549 aLastBtn->setIconSet(QPixmap(lastIco));
550 connect( aLastBtn, SIGNAL( clicked() ),
551 this, SLOT( onLastPressed() ) );
552 TopLayout->addWidget(aLastBtn, 4, 1);
554 QLabel* aSpeedLbl = new QLabel("Speed", myPlayFrame);
555 TopLayout->addWidget(aSpeedLbl, 4, 2, Qt::AlignRight);
557 QLCDNumber* aSpeedNum = new QLCDNumber( 2, myPlayFrame );
558 aSpeedNum->setSegmentStyle(QLCDNumber::Flat);
559 aSpeedNum->display(1);
560 TopLayout->addWidget(aSpeedNum, 4, 3);
562 QwtWheel* aWheel = new QwtWheel(myPlayFrame);
563 aWheel->setOrientation(Qt::Vertical);
564 aWheel->setRange(1, 99, 1);
565 connect( aWheel, SIGNAL(valueChanged(double)),
566 aSpeedNum, SLOT(display(double)) );
567 connect( aWheel, SIGNAL(valueChanged(double)),
568 this, SLOT(onSpeedChange(double)) );
569 TopLayout->addMultiCellWidget(aWheel, 1, 3, 3, 3, Qt::AlignRight);
571 QCheckBox* aCycleCheck = new QCheckBox("Cycled animation",myPlayFrame);
572 aCycleCheck->setChecked(myAnimator->isCycling());
573 connect(aCycleCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setCyclingSlot(bool)));
574 TopLayout->addMultiCellWidget(aCycleCheck, 5, 5, 0, 3);
576 QCheckBox* aPropCheck = new QCheckBox("Use proportional timing",myPlayFrame);
577 aPropCheck->setChecked(myAnimator->isProportional());
578 connect(aPropCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setProportionalSlot(bool)));
579 TopLayout->addMultiCellWidget(aPropCheck, 6, 6, 0, 3);
581 QGroupBox* aSaveBox = new QGroupBox( "Saving", myPlayFrame );
582 aSaveBox->setColumnLayout(0, Qt::Horizontal );
583 QGridLayout* aSaveLay = new QGridLayout(aSaveBox->layout());
584 aSaveLay->setSpacing( 5 );
585 aSaveLay->setMargin( 5 );
587 mySaveCheck = new QCheckBox("Save pictures to directory", aSaveBox);
588 aSaveLay->addMultiCellWidget(mySaveCheck, 0, 0, 0, 2);
589 connect(mySaveCheck, SIGNAL( toggled(bool)),
590 aWheel, SLOT( setDisabled(bool) ));
592 QLabel* aPathLbl = new QLabel("Path:", aSaveBox);
593 aPathLbl->setEnabled(false);
594 connect(mySaveCheck, SIGNAL( toggled(bool)),
595 aPathLbl, SLOT( setEnabled(bool) ));
596 aSaveLay->addWidget(aPathLbl, 1, 0);
598 myPathEdit = new QLineEdit(aSaveBox);
599 myPathEdit->setEnabled(false);
600 connect(mySaveCheck, SIGNAL( toggled(bool)),
601 myPathEdit, SLOT( setEnabled(bool) ));
602 aSaveLay->addWidget(myPathEdit, 1, 1);
604 QPushButton* aBrowseBtn = new QPushButton("Browse...", aSaveBox);
605 aBrowseBtn->setEnabled(false);
606 connect(mySaveCheck, SIGNAL( toggled(bool)),
607 aBrowseBtn, SLOT( setEnabled(bool) ));
608 connect(aBrowseBtn, SIGNAL( clicked()),
609 this, SLOT( onBrowse() ));
610 mySaveCheck->setChecked(false);
611 aSaveLay->addWidget(aBrowseBtn, 1, 2);
613 TopLayout->addMultiCellWidget(aSaveBox, 7, 7, 0, 3);
615 aMainLayout->addWidget(myPlayFrame);
617 QHBox* aBtnBox = new QHBox(this);
618 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
619 aBtnLayout->addStretch();
621 QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
622 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
624 aMainLayout->addWidget(aBtnBox);
626 myPlayFrame->setEnabled(false);
629 //************************************************************************
630 VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg()
635 //************************************************************************
636 void VisuGUI_TimeAnimationDlg::onTypeChange (int index)
639 myPropBtn->setEnabled(index != 0);
642 myPlayFrame->setEnabled(false);
645 //************************************************************************
646 void VisuGUI_TimeAnimationDlg::addField (_PTR(SObject) theSObject)
648 myPlayFrame->setEnabled(false);
649 myAnimator->addField(VISU::GetSObject(theSObject));
652 //************************************************************************
653 void VisuGUI_TimeAnimationDlg::createFrames()
656 SUIT_OverrideCursor c;
658 for (int i = 0; i < myAnimator->getNbFields(); i++) {
659 if (myAnimator->getFieldData(i).myPrs.empty())
660 myAnimator->generatePresentations(i);
662 if (myAnimator->getNbFrames() == 0) {
663 myPlayFrame->setEnabled(false);
665 SUIT_MessageBox::warn1(this,
667 tr("MSG_NO_ANIMATIONDATA"),
671 mySlider->setMaxValue(myAnimator->getNbFrames()-1);
672 myPlayFrame->setEnabled(true);
673 if (!myAnimator->generateFrames()) {
675 //myPlayFrame->setEnabled(false);
676 SUIT_MessageBox::warn1(this,
678 myAnimator->getLastErrorMsg(),
682 //myPlayFrame->setEnabled(true);
685 //************************************************************************
686 void VisuGUI_TimeAnimationDlg::onPlayPressed()
688 if (myPlayBtn->isOn() && (!myAnimator->running())) {
689 myPlayBtn->setIconSet(MYpausePixmap);
690 if (mySaveCheck->isChecked())
691 myAnimator->dumpTo(myPathEdit->text());
693 myAnimator->dumpTo("");
694 mySetupBtn->setEnabled(false);
695 myGenBtn->setEnabled(false);
696 myAnimator->startAnimation();
698 myPlayBtn->setIconSet(MYplayPixmap);
699 myAnimator->stopAnimation();
700 mySetupBtn->setEnabled(true);
701 myGenBtn->setEnabled(true);
705 //************************************************************************
706 void VisuGUI_TimeAnimationDlg::onBackPressed()
709 myAnimator->prevFrame();
712 //************************************************************************
713 void VisuGUI_TimeAnimationDlg::onForvardPressed()
715 myAnimator->nextFrame();
718 //************************************************************************
719 void VisuGUI_TimeAnimationDlg::onLastPressed()
721 myAnimator->lastFrame();
724 //************************************************************************
725 void VisuGUI_TimeAnimationDlg::onFirstPressed()
727 myAnimator->firstFrame();
730 //************************************************************************
731 void VisuGUI_TimeAnimationDlg::clearView()
733 myAnimator->clearView();
736 //************************************************************************
737 void VisuGUI_TimeAnimationDlg::closeEvent (QCloseEvent* theEvent)
739 myAnimator->stopAnimation();
740 if (myAnimator->running() && (! myAnimator->finished())) {
744 QDialog::closeEvent(theEvent);
748 //************************************************************************
749 void VisuGUI_TimeAnimationDlg::onWindowChanged (int index)
751 if (myAnimator->isRunning()) return;
752 myAnimator->gotoFrame(index);
755 //************************************************************************
756 void VisuGUI_TimeAnimationDlg::onSpeedChange (double theSpeed)
758 myAnimator->setSpeed((int)theSpeed);
761 //************************************************************************
762 void VisuGUI_TimeAnimationDlg::stopAnimation()
764 myAnimator->stopAnimation();
765 myPlayBtn->setOn(false);
766 myPlayBtn->setIconSet(MYplayPixmap);
767 mySetupBtn->setEnabled(true);
768 myGenBtn->setEnabled(true);
771 //************************************************************************
772 void VisuGUI_TimeAnimationDlg::onExecution (long theNewFrame, double theTime)
774 myTimeLbl->setText(QString("%1").arg(theTime));
775 mySlider->setValue(theNewFrame);
778 //************************************************************************
779 void VisuGUI_TimeAnimationDlg::onSetupDlg()
781 if (myAnimator->getNbFrames() > 0) myAnimator->firstFrame();
782 SetupDlg* aDlg = new SetupDlg(this, myAnimator);
784 myPlayFrame->setEnabled(false);
788 //************************************************************************
789 void VisuGUI_TimeAnimationDlg::onBrowse()
791 QString aPath = SUIT_FileDlg::getExistingDirectory(this, "/","Select path");
792 if (!aPath.isEmpty())
793 myPathEdit->setText(aPath);
796 //************************************************************************
797 void VisuGUI_TimeAnimationDlg::onStop()
800 QDialog::closeEvent(myEvent);
802 myPlayBtn->setOn(false);
803 myPlayBtn->setIconSet(MYplayPixmap);
804 mySetupBtn->setEnabled(true);
805 myGenBtn->setEnabled(true);