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"
16 #include <qhgroupbox.h>
17 #include <qmessagebox.h>
18 #include <qwt_wheel.h>
19 #include <qlcdnumber.h>
21 #include <qvgroupbox.h>
24 #include "QAD_Application.h"
25 #include "QAD_Desktop.h"
26 #include "QAD_FileDlg.h"
28 #include "VTKViewer_ViewFrame.h"
29 #include "VISU_ScalarBarActor.hxx"
31 #include "VisuGUI_MagnitudeDlg.h"
32 #include "VisuGUI_CutPlanesDlg.h"
33 #include "VisuGUI_VectorsDlg.h"
34 #include "VisuGUI_IsoSurfacesDlg.h"
35 #include "VisuGUI_StreamLinesDlg.h"
36 #include "VISU_TimeAnimation.h"
38 #include "VISU_ScalarMap_i.hh"
39 #include "VISU_IsoSurfaces_i.hh"
40 #include "VISU_DeformedShape_i.hh"
41 #include "VISU_CutPlanes_i.hh"
42 #include "VISU_CutLines_i.hh"
43 #include "VISU_Vectors_i.hh"
44 #include "VISU_StreamLines_i.hh"
46 static double MAXVALUE = 1.0E+300;
49 SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
50 : QDialog( theParent, "SetupDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
52 setCaption("Setup Animation");
53 setSizeGripEnabled( TRUE );
54 myAnimator = theAnimator;
56 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
57 aMainLayout->setSpacing(5);
60 QFrame* aRangeGrp = new QFrame(this);
61 QGridLayout* aRangeLayout = new QGridLayout( aRangeGrp );
62 aRangeLayout->setSpacing( 6 );
63 aRangeLayout->setMargin( 11 );
64 aRangeGrp->setFrameStyle(QFrame::Box | QFrame::Raised);
66 myUseRangeChk = new QCheckBox("Use range of time stamps", aRangeGrp);
67 aRangeLayout->addMultiCellWidget(myUseRangeChk, 0, 0, 0, 3);
68 myUseRangeChk->setChecked(myAnimator->isRangeDefined());
70 QLabel* aMinLbl = new QLabel("From", aRangeGrp);
71 aMinLbl->setEnabled(myUseRangeChk->isChecked());
72 aRangeLayout->addWidget(aMinLbl, 1, 0);
73 double aStep = (myAnimator->getMaxTime() - myAnimator->getMinTime())/(theAnimator->getFieldData(0).myNbTimes - 1);
74 myMinVal = new QAD_SpinBoxDbl(aRangeGrp, myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep );
75 myMinVal->setEnabled(myUseRangeChk->isChecked());
76 if (myUseRangeChk->isChecked())
77 myMinVal->setValue( myAnimator->getMinRange() );
79 myMinVal->setValue( myAnimator->getMinTime() );
81 connect(myMinVal, SIGNAL( valueChanged(double)),
82 this, SLOT( onMinValue(double) ));
83 aRangeLayout->addWidget(myMinVal, 1, 1);
85 QLabel* aMaxLbl = new QLabel("To", aRangeGrp);
86 aMaxLbl->setEnabled(myUseRangeChk->isChecked());
87 aRangeLayout->addWidget(aMaxLbl, 1, 2);
88 myMaxVal = new QAD_SpinBoxDbl(aRangeGrp, myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep );
89 myMaxVal->setEnabled(myUseRangeChk->isChecked());
90 if (myUseRangeChk->isChecked())
91 myMaxVal->setValue( myAnimator->getMaxRange() );
93 myMaxVal->setValue( myAnimator->getMaxTime() );
95 connect(myMaxVal, SIGNAL( valueChanged(double)),
96 this, SLOT( onMaxValue(double) ));
97 aRangeLayout->addWidget(myMaxVal, 1, 3);
99 connect(myUseRangeChk, SIGNAL( toggled(bool)),
100 aMinLbl, SLOT( setEnabled(bool) ));
101 connect(myUseRangeChk, SIGNAL( toggled(bool)),
102 aMaxLbl, SLOT( setEnabled(bool) ));
103 connect(myUseRangeChk, SIGNAL( toggled(bool)),
104 this, SLOT( onRangeCheck(bool) ));
106 aMainLayout->addWidget(aRangeGrp);
109 QHBox* aPropFrame = new QHBox(this);
110 aPropFrame->setSpacing(5);
112 QVGroupBox* aNamesBox = new QVGroupBox("Fields",aPropFrame);
113 myFieldLst = new QListBox(aNamesBox);
114 QStringList aFieldNames;
115 // Find names of fields
116 for (int i = 0; i < theAnimator->getNbFields(); i++) {
117 aFieldNames.append(VisuGUI::getValue(theAnimator->getFieldData(i).myField, "myName"));
119 myFieldLst->insertStringList(aFieldNames);
120 myFieldLst->setSelected(0, true);
121 connect( myFieldLst, SIGNAL( highlighted(int) ),
122 this, SLOT( onFieldChange(int) ) );
125 QVGroupBox* aPropBox = new QVGroupBox("Properties", aPropFrame);
126 myTypeCombo = new QComboBox(aPropBox);
127 connect( myTypeCombo, SIGNAL( activated(int) ),
128 this, SLOT( onTypeChanged(int) ) );
130 // QPushButton* aBarBtn = new QPushButton("Scalar Bar...", aPropBox);
131 //connect( aBarBtn, SIGNAL( clicked() ),
132 // this, SLOT( onScalarBarDlg() ) );
134 myPropBtn = new QPushButton("Properties...", aPropBox);
135 // myPropBtn->setEnabled(theAnimator->getFieldData(0).myPrsType != VISU::TSCALARMAP);
136 connect( myPropBtn, SIGNAL( clicked() ),
137 this, SLOT( onPreferencesDlg() ) );
140 aMainLayout->addWidget(aPropFrame);
142 QHBox* aBtnBox = new QHBox(this);
143 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
144 aBtnLayout->addStretch();
146 QPushButton* aCloseBtn = new QPushButton(tr("VISU_BUT_OK"), aBtnBox);
147 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
149 aMainLayout->addWidget(aBtnBox);
153 //************************************************************************
154 void SetupDlg::onFieldChange(int theIndex) {
155 FieldData& aData = myAnimator->getFieldData(theIndex);
156 myTypeCombo->clear();
157 myTypeCombo->insertItem("Scalar Map");
158 myTypeCombo->insertItem("Iso Surfaces");
159 myTypeCombo->insertItem("Cut Planes");
161 SALOMEDS::SObject_var aSObject = aData.myField;
162 long aNumComp = VisuGUI::getValue(aSObject, "myNumComponent").toLong();
164 myTypeCombo->insertItem("Deformed Shape");
165 myTypeCombo->insertItem("Vectors");
166 myTypeCombo->insertItem("Stream Lines");
168 switch (aData.myPrsType) {
169 case VISU::TSCALARMAP: //Scalar Map
170 myTypeCombo->setCurrentItem(0);
172 case VISU::TISOSURFACE: //Iso Surfaces
173 myTypeCombo->setCurrentItem(1);
175 case VISU::TCUTPLANES: //Cut Planes
176 myTypeCombo->setCurrentItem(2);
178 case VISU::TDEFORMEDSHAPE: //Deformed Shape
179 myTypeCombo->setCurrentItem(3);
181 case VISU::TVECTORS: //Vectors
182 myTypeCombo->setCurrentItem(4);
184 case VISU::TSTREAMLINES: //Stream Lines
185 myTypeCombo->setCurrentItem(5);
186 aData.myPrsType = VISU::TSTREAMLINES;
189 //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
192 //************************************************************************
193 void SetupDlg::onTypeChanged(int theIndex) {
194 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
197 aData.myPrsType = VISU::TSCALARMAP;
199 case 1: //Iso Surfaces
200 aData.myPrsType = VISU::TISOSURFACE;
203 aData.myPrsType = VISU::TCUTPLANES;
205 case 3: //Deformed Shape
206 aData.myPrsType = VISU::TDEFORMEDSHAPE;
209 aData.myPrsType = VISU::TVECTORS;
211 case 5: //Stream Lines
212 aData.myPrsType = VISU::TSTREAMLINES;
215 myAnimator->clearData(aData);
216 //myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
217 //myAnimator->generatePresentations(myFieldLst->currentItem());
221 //************************************************************************
222 /*void SetupDlg::onScalarBarDlg() {
223 QApplication::setOverrideCursor( Qt::waitCursor );
224 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
225 if (aData.myPrs == 0)
226 myAnimator->generatePresentations(myFieldLst->currentItem());
227 QApplication::restoreOverrideCursor();
229 VisuGUI_ScalarBarDlg* aScalarBarDlg = new VisuGUI_ScalarBarDlg();
230 aScalarBarDlg->initFromPrsObject(aData.myPrs[0]);
231 if (aScalarBarDlg->exec()) {
232 for (int i = 0; i < aData.myNbFrames; i++)
233 aScalarBarDlg->storeToPrsObject(aData.myPrs[i]);
237 //************************************************************************
238 void SetupDlg::onPreferencesDlg() {
239 QApplication::setOverrideCursor( Qt::waitCursor );
240 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
241 if (aData.myPrs == 0)
242 myAnimator->generatePresentations(myFieldLst->currentItem());
243 QApplication::restoreOverrideCursor();
245 #define EDITPRS(TYPE, DLG) \
247 DLG* aDlg = new DLG(); \
248 aDlg->initFromPrsObject(dynamic_cast<TYPE*>(aData.myPrs[0])); \
249 if (aDlg->exec()) { \
250 for (int i = 0; i < aData.myNbFrames; i++) \
251 aDlg->storeToPrsObject(dynamic_cast<TYPE*>(aData.myPrs[i])); \
257 switch (myTypeCombo->currentItem()) {
259 EDITPRS(VISU::ScalarMap_i, VisuGUI_ScalarBarDlg);
261 case 1: //Iso Surfaces
262 EDITPRS(VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg);
265 // EDITPRS(VISU::CutPlanes_i, VisuGUI_CutPlanesDlg);
267 VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg(false, true);
268 aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[0]));
270 for (int i = 0; i < aData.myNbFrames; i++)
271 aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[i]));
276 case 3: //Deformed Shape
277 EDITPRS(VISU::DeformedShape_i, VisuGUI_MagnitudeDlg);
280 EDITPRS(VISU::Vectors_i, VisuGUI_VectorsDlg);
282 case 5: //Stream Lines
283 EDITPRS(VISU::StreamLines_i, VisuGUI_StreamLinesDlg);
289 //************************************************************************
290 void SetupDlg::onRangeCheck(bool theCheck) {
291 for (int i = 0; i < myAnimator->getNbFields(); i++)
292 myAnimator->clearData(myAnimator->getFieldData(i));
294 myMinVal->setEnabled(theCheck);
295 myMaxVal->setEnabled(theCheck);
298 myAnimator->setAnimationRange(0, 0);
300 // if (myMinVal->value() < myMaxVal->value())
301 myAnimator->setAnimationRange(myMinVal->value(), myMaxVal->value());
302 // else if (myMinVal->value() > myMaxVal->value())
303 // myAnimator->setAnimationRange(myMaxVal->value(), myMinVal->value());
304 // else // equal case
305 // myAnimator->setAnimationRange(0, 0);
309 //************************************************************************
310 void SetupDlg::onMinValue(double theVal) {
311 if (theVal > myAnimator->getMaxRange()) {
312 myMinVal->setValue( myAnimator->getMinTime() );
313 myMinVal->setFocus();
316 for (int i = 0; i < myAnimator->getNbFields(); i++)
317 myAnimator->clearData(myAnimator->getFieldData(i));
318 myAnimator->setAnimationRange(theVal, myAnimator->getMaxRange());
321 //************************************************************************
322 void SetupDlg::onMaxValue(double theVal) {
323 if (theVal < myAnimator->getMinRange()) {
324 myMaxVal->setValue( myAnimator->getMaxTime() );
325 myMaxVal->setFocus();
328 for (int i = 0; i < myAnimator->getNbFields(); i++)
329 myAnimator->clearData(myAnimator->getFieldData(i));
330 myAnimator->setAnimationRange(myAnimator->getMinRange(), theVal);
334 static const char * firstIco[] = {
350 static const char * lastIco[] = {
366 static const char * leftIco[] = {
381 static const char * playIco[] = {
400 static QPixmap MYplayPixmap(playIco);
404 static const char * rightIco[] = {
420 static const char * pauseIco[] = {
439 static QPixmap MYpausePixmap(pauseIco);
442 VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
443 : QDialog( QAD_Application::getDesktop(), "VisuGUI_TimeAnimationDlg", false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose)
445 setCaption("Animation");
446 setSizeGripEnabled( TRUE );
450 myAnimator = new VISU_TimeAnimation(theStudy);
451 myAnimator->setSpeed(1);
452 myAnimator->setViewer(VisuGUI::GetVtkViewFrame());
453 connect( myAnimator, SIGNAL( frameChanged(long, double) ),
454 this, SLOT( onExecution(long, double) ) );
455 connect( myAnimator, SIGNAL( stopped() ),
456 this, SLOT( onStop() ) );
458 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
459 aMainLayout->setSpacing(5);
461 mySetupBtn = new QPushButton("Setup Animation...", this);
462 connect( mySetupBtn, SIGNAL( clicked() ),
463 this, SLOT( onSetupDlg() ) );
464 aMainLayout->addWidget(mySetupBtn);
466 myGenBtn = new QPushButton("Generate frames", this);
467 connect( myGenBtn, SIGNAL( clicked() ),
468 this, SLOT( createFrames() ) );
469 aMainLayout->addWidget(myGenBtn);
471 myPlayFrame = new QFrame(this);
472 myPlayFrame->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
473 myPlayFrame->setLineWidth( 1 );
476 // --- Play controls ---
477 QGridLayout* TopLayout = new QGridLayout( myPlayFrame );
478 TopLayout->setSpacing( 6 );
479 TopLayout->setMargin( 11 );
481 myTimeLbl = new QLabel("0", myPlayFrame);
482 TopLayout->addMultiCellWidget(myTimeLbl, 0, 0, 0, 2, Qt::AlignHCenter);
484 mySlider = new QSlider(Qt::Horizontal, myPlayFrame);
485 mySlider->setMinValue(0);
486 mySlider->setMaxValue(3);
487 mySlider->setTickInterval(1);
488 //mySlider->setTickmarks(QSlider::Below);
489 mySlider->setTracking(false);
490 connect( mySlider, SIGNAL( valueChanged(int) ),
491 this, SLOT( onFrameChanged(int) ) );
492 TopLayout->addMultiCellWidget(mySlider, 1, 1, 0, 2);
494 myPlayBtn = new QToolButton(myPlayFrame);
495 myPlayBtn->setIconSet(MYplayPixmap);
496 myPlayBtn->setToggleButton(true);
497 connect( myPlayBtn, SIGNAL( clicked() ),
498 this, SLOT( onPlayPressed() ) );
499 TopLayout->addMultiCellWidget(myPlayBtn, 2, 2, 0, 1);
501 QToolButton* aBackBtn = new QToolButton(myPlayFrame);
502 aBackBtn->setIconSet(QPixmap(leftIco));
503 connect( aBackBtn, SIGNAL( clicked() ),
504 this, SLOT( onBackPressed() ) );
505 TopLayout->addWidget(aBackBtn, 3, 0);
507 QToolButton* aForvardBtn = new QToolButton(myPlayFrame);
508 aForvardBtn->setIconSet(QPixmap(rightIco));
509 connect( aForvardBtn, SIGNAL( clicked() ),
510 this, SLOT( onForvardPressed() ) );
511 TopLayout->addWidget(aForvardBtn, 3, 1);
513 QToolButton* aFirstBtn = new QToolButton(myPlayFrame);
514 aFirstBtn->setIconSet(QPixmap(firstIco));
515 connect( aFirstBtn, SIGNAL( clicked() ),
516 this, SLOT( onFirstPressed() ) );
517 TopLayout->addWidget(aFirstBtn, 4, 0);
519 QToolButton* aLastBtn = new QToolButton(myPlayFrame);
520 aLastBtn->setIconSet(QPixmap(lastIco));
521 connect( aLastBtn, SIGNAL( clicked() ),
522 this, SLOT( onLastPressed() ) );
523 TopLayout->addWidget(aLastBtn, 4, 1);
525 QLabel* aSpeedLbl = new QLabel("Speed", myPlayFrame);
526 TopLayout->addWidget(aSpeedLbl, 4, 2, Qt::AlignRight);
528 QLCDNumber* aSpeedNum = new QLCDNumber( 2, myPlayFrame );
529 aSpeedNum->setSegmentStyle(QLCDNumber::Flat);
530 aSpeedNum->display(1);
531 TopLayout->addWidget(aSpeedNum, 4, 3);
533 QwtWheel* aWheel = new QwtWheel(myPlayFrame);
534 aWheel->setOrientation(Qt::Vertical);
535 aWheel->setRange(1, 99, 1);
536 connect( aWheel, SIGNAL(valueChanged(double)),
537 aSpeedNum, SLOT(display(double)) );
538 connect( aWheel, SIGNAL(valueChanged(double)),
539 this, SLOT(onSpeedChange(double)) );
540 TopLayout->addMultiCellWidget(aWheel, 1, 3, 3, 3, Qt::AlignRight);
542 QCheckBox* aCycleCheck = new QCheckBox("Cycled animation",myPlayFrame);
543 aCycleCheck->setChecked(myAnimator->isCycling());
544 connect(aCycleCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setCyclingSlot(bool)));
545 TopLayout->addMultiCellWidget(aCycleCheck, 5, 5, 0, 3);
547 QCheckBox* aPropCheck = new QCheckBox("Use proportional timing",myPlayFrame);
548 aPropCheck->setChecked(myAnimator->isProportional());
549 connect(aPropCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setProportionalSlot(bool)));
550 TopLayout->addMultiCellWidget(aPropCheck, 6, 6, 0, 3);
552 QGroupBox* aSaveBox = new QGroupBox( "Saving", myPlayFrame );
553 aSaveBox->setColumnLayout(0, Qt::Horizontal );
554 QGridLayout* aSaveLay = new QGridLayout(aSaveBox->layout());
555 aSaveLay->setSpacing( 5 );
556 aSaveLay->setMargin( 5 );
558 mySaveCheck = new QCheckBox("Save pictures to directory", aSaveBox);
559 aSaveLay->addMultiCellWidget(mySaveCheck, 0, 0, 0, 2);
561 QLabel* aPathLbl = new QLabel("Path:", aSaveBox);
562 aPathLbl->setEnabled(false);
563 connect(mySaveCheck, SIGNAL( toggled(bool)),
564 aPathLbl, SLOT( setEnabled(bool) ));
565 aSaveLay->addWidget(aPathLbl, 1, 0);
567 myPathEdit = new QLineEdit(aSaveBox);
568 myPathEdit->setEnabled(false);
569 connect(mySaveCheck, SIGNAL( toggled(bool)),
570 myPathEdit, SLOT( setEnabled(bool) ));
571 aSaveLay->addWidget(myPathEdit, 1, 1);
573 QPushButton* aBrowseBtn = new QPushButton("Browse...", aSaveBox);
574 aBrowseBtn->setEnabled(false);
575 connect(mySaveCheck, SIGNAL( toggled(bool)),
576 aBrowseBtn, SLOT( setEnabled(bool) ));
577 connect(aBrowseBtn, SIGNAL( clicked()),
578 this, SLOT( onBrowse() ));
579 mySaveCheck->setChecked(false);
580 aSaveLay->addWidget(aBrowseBtn, 1, 2);
582 TopLayout->addMultiCellWidget(aSaveBox, 7, 7, 0, 3);
584 aMainLayout->addWidget(myPlayFrame);
586 QHBox* aBtnBox = new QHBox(this);
587 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
588 aBtnLayout->addStretch();
590 QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
591 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
593 aMainLayout->addWidget(aBtnBox);
595 myPlayFrame->setEnabled(false);
599 //************************************************************************
600 VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg() {
605 //************************************************************************
606 void VisuGUI_TimeAnimationDlg::onTypeChange(int index) {
608 myPropBtn->setEnabled(index != 0);
611 myPlayFrame->setEnabled(false);
615 //************************************************************************
616 void VisuGUI_TimeAnimationDlg::addField(SALOMEDS::SObject_var theSObject) {
617 myPlayFrame->setEnabled(false);
618 myAnimator->addField(theSObject);
623 //************************************************************************
624 void VisuGUI_TimeAnimationDlg::createFrames() {
626 QApplication::setOverrideCursor( Qt::waitCursor );
628 for (int i = 0; i < myAnimator->getNbFields(); i++) {
629 if (myAnimator->getFieldData(i).myPrs == 0)
630 myAnimator->generatePresentations(i);
632 if (myAnimator->getNbFrames() == 0) {
633 myPlayFrame->setEnabled(false);
634 QApplication::restoreOverrideCursor();
635 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_NO_ANIMATIONDATA"));
638 mySlider->setMaxValue(myAnimator->getNbFrames()-1);
639 myPlayFrame->setEnabled(true);
640 if (!myAnimator->generateFrames()) {
641 QApplication::restoreOverrideCursor();
642 //myPlayFrame->setEnabled(false);
643 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), myAnimator->getLastErrorMsg());
646 //myPlayFrame->setEnabled(true);
647 QApplication::restoreOverrideCursor();
652 //************************************************************************
653 void VisuGUI_TimeAnimationDlg::onPlayPressed() {
654 if (myPlayBtn->isOn() && (!myAnimator->running())) {
655 myPlayBtn->setIconSet(MYpausePixmap);
656 if (mySaveCheck->isChecked())
657 myAnimator->dumpTo(myPathEdit->text());
659 myAnimator->dumpTo("");
660 mySetupBtn->setEnabled(false);
661 myGenBtn->setEnabled(false);
662 myAnimator->startAnimation();
664 myPlayBtn->setIconSet(MYplayPixmap);
665 myAnimator->stopAnimation();
666 mySetupBtn->setEnabled(true);
667 myGenBtn->setEnabled(true);
671 //************************************************************************
672 void VisuGUI_TimeAnimationDlg::onBackPressed() {
674 myAnimator->prevFrame();
678 //************************************************************************
679 void VisuGUI_TimeAnimationDlg::onForvardPressed() {
680 myAnimator->nextFrame();
684 //************************************************************************
685 void VisuGUI_TimeAnimationDlg::onLastPressed() {
686 myAnimator->lastFrame();
690 //************************************************************************
691 void VisuGUI_TimeAnimationDlg::onFirstPressed() {
692 myAnimator->firstFrame();
697 //************************************************************************
698 void VisuGUI_TimeAnimationDlg::clearView() {
699 myAnimator->clearView();
703 //************************************************************************
704 void VisuGUI_TimeAnimationDlg::closeEvent(QCloseEvent* theEvent) {
705 myAnimator->stopAnimation();
706 if (myAnimator->running() && (! myAnimator->finished())) {
710 QDialog::closeEvent(theEvent);
715 //************************************************************************
716 void VisuGUI_TimeAnimationDlg::onFrameChanged(int index) {
717 if (myAnimator->isRunning()) return;
718 myAnimator->gotoFrame(index);
722 //************************************************************************
723 void VisuGUI_TimeAnimationDlg::onSpeedChange(double theSpeed) {
724 myAnimator->setSpeed((int)theSpeed);
728 //************************************************************************
729 void VisuGUI_TimeAnimationDlg::stopAnimation() {
730 myAnimator->stopAnimation();
731 myPlayBtn->setOn(false);
732 myPlayBtn->setIconSet(MYplayPixmap);
733 mySetupBtn->setEnabled(true);
734 myGenBtn->setEnabled(true);
737 //************************************************************************
738 void VisuGUI_TimeAnimationDlg::onExecution(long theNewFrame, double theTime) {
739 myTimeLbl->setText(QString("%1").arg(theTime));
740 mySlider->setValue(theNewFrame);
744 //************************************************************************
745 void VisuGUI_TimeAnimationDlg::onSetupDlg() {
746 if (myAnimator->getNbFrames() > 0) myAnimator->firstFrame();
747 SetupDlg* aDlg = new SetupDlg(this, myAnimator);
749 myPlayFrame->setEnabled(false);
753 //************************************************************************
754 void VisuGUI_TimeAnimationDlg::onBrowse() {
755 QString aPath = QAD_FileDlg::getExistingDirectory(this, "/","Select path");
756 if (!aPath.isEmpty())
757 myPathEdit->setText(aPath);
761 //************************************************************************
762 void VisuGUI_TimeAnimationDlg::onStop() {
764 QDialog::closeEvent(myEvent);
766 myPlayBtn->setOn(false);
767 myPlayBtn->setIconSet(MYplayPixmap);
768 mySetupBtn->setEnabled(true);
769 myGenBtn->setEnabled(true);