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("BUT_CLOSE"), 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 switch (myTypeCombo->currentItem()) {
246 case 1: //Iso Surfaces
248 VisuGUI_IsoSurfacesDlg* aDlg = new VisuGUI_IsoSurfacesDlg();
249 aDlg->initFromPrsObject(dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[0]));
251 for (int i = 0; i < aData.myNbFrames; i++)
252 aDlg->storeToPrsObject(dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[i]));
258 VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg();
259 aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[0]));
261 for (int i = 0; i < aData.myNbFrames; i++)
262 aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[i]));
266 case 3: //Deformed Shape
268 VisuGUI_MagnitudeDlg* aDlg = new VisuGUI_MagnitudeDlg();
269 aDlg->initFromPrsObject(dynamic_cast<VISU::DeformedShape_i*>(aData.myPrs[0]));
271 for (int i = 0; i < aData.myNbFrames; i++)
272 aDlg->storeToPrsObject(dynamic_cast<VISU::DeformedShape_i*>(aData.myPrs[i]));
278 VisuGUI_VectorsDlg* aDlg = new VisuGUI_VectorsDlg();
279 aDlg->initFromPrsObject(dynamic_cast<VISU::Vectors_i*>(aData.myPrs[0]));
281 for (int i = 0; i < aData.myNbFrames; i++)
282 aDlg->storeToPrsObject(dynamic_cast<VISU::Vectors_i*>(aData.myPrs[i]));
286 case 5: //Stream Lines
288 VisuGUI_StreamLinesDlg* aDlg = new VisuGUI_StreamLinesDlg();
289 aDlg->initFromPrsObject(dynamic_cast<VISU::StreamLines_i*>(aData.myPrs[0]));
291 for (int i = 0; i < aData.myNbFrames; i++)
292 aDlg->storeToPrsObject(dynamic_cast<VISU::StreamLines_i*>(aData.myPrs[i]));
299 //************************************************************************
300 void SetupDlg::onRangeCheck(bool theCheck) {
301 for (int i = 0; i < myAnimator->getNbFields(); i++)
302 myAnimator->clearData(myAnimator->getFieldData(i));
304 myMinVal->setEnabled(theCheck);
305 myMaxVal->setEnabled(theCheck);
308 myAnimator->setAnimationRange(0, 0);
310 // if (myMinVal->value() < myMaxVal->value())
311 myAnimator->setAnimationRange(myMinVal->value(), myMaxVal->value());
312 // else if (myMinVal->value() > myMaxVal->value())
313 // myAnimator->setAnimationRange(myMaxVal->value(), myMinVal->value());
314 // else // equal case
315 // myAnimator->setAnimationRange(0, 0);
319 //************************************************************************
320 void SetupDlg::onMinValue(double theVal) {
321 if (theVal > myAnimator->getMaxRange()) {
322 myMinVal->setValue( myAnimator->getMinTime() );
323 myMinVal->setFocus();
326 for (int i = 0; i < myAnimator->getNbFields(); i++)
327 myAnimator->clearData(myAnimator->getFieldData(i));
328 myAnimator->setAnimationRange(theVal, myAnimator->getMaxRange());
331 //************************************************************************
332 void SetupDlg::onMaxValue(double theVal) {
333 if (theVal < myAnimator->getMinRange()) {
334 myMaxVal->setValue( myAnimator->getMaxTime() );
335 myMaxVal->setFocus();
338 for (int i = 0; i < myAnimator->getNbFields(); i++)
339 myAnimator->clearData(myAnimator->getFieldData(i));
340 myAnimator->setAnimationRange(myAnimator->getMinRange(), theVal);
344 static const char * firstIco[] = {
360 static const char * lastIco[] = {
376 static const char * leftIco[] = {
391 static const char * playIco[] = {
410 static QPixmap MYplayPixmap(playIco);
414 static const char * rightIco[] = {
430 static const char * pauseIco[] = {
449 static QPixmap MYpausePixmap(pauseIco);
452 VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
453 : QDialog( QAD_Application::getDesktop(), "VisuGUI_TimeAnimationDlg", false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose)
455 setCaption("Animation");
456 setSizeGripEnabled( TRUE );
460 myAnimator = new VISU_TimeAnimation(theStudy);
461 myAnimator->setSpeed(1);
462 myAnimator->setViewer(VisuGUI::GetVtkViewFrame());
463 connect( myAnimator, SIGNAL( frameChanged(long, double) ),
464 this, SLOT( onExecution(long, double) ) );
465 connect( myAnimator, SIGNAL( stopped() ),
466 this, SLOT( onStop() ) );
468 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
469 aMainLayout->setSpacing(5);
471 mySetupBtn = new QPushButton("Setup Animation...", this);
472 connect( mySetupBtn, SIGNAL( clicked() ),
473 this, SLOT( onSetupDlg() ) );
474 aMainLayout->addWidget(mySetupBtn);
476 myGenBtn = new QPushButton("Generate frames", this);
477 connect( myGenBtn, SIGNAL( clicked() ),
478 this, SLOT( createFrames() ) );
479 aMainLayout->addWidget(myGenBtn);
481 myPlayFrame = new QFrame(this);
482 myPlayFrame->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
483 myPlayFrame->setLineWidth( 1 );
486 // --- Play controls ---
487 QGridLayout* TopLayout = new QGridLayout( myPlayFrame );
488 TopLayout->setSpacing( 6 );
489 TopLayout->setMargin( 11 );
491 myTimeLbl = new QLabel("0", myPlayFrame);
492 TopLayout->addMultiCellWidget(myTimeLbl, 0, 0, 0, 2, Qt::AlignHCenter);
494 mySlider = new QSlider(Qt::Horizontal, myPlayFrame);
495 mySlider->setMinValue(0);
496 mySlider->setMaxValue(3);
497 mySlider->setTickInterval(1);
498 //mySlider->setTickmarks(QSlider::Below);
499 mySlider->setTracking(false);
500 connect( mySlider, SIGNAL( valueChanged(int) ),
501 this, SLOT( onFrameChanged(int) ) );
502 TopLayout->addMultiCellWidget(mySlider, 1, 1, 0, 2);
504 myPlayBtn = new QToolButton(myPlayFrame);
505 myPlayBtn->setIconSet(MYplayPixmap);
506 myPlayBtn->setToggleButton(true);
507 connect( myPlayBtn, SIGNAL( clicked() ),
508 this, SLOT( onPlayPressed() ) );
509 TopLayout->addMultiCellWidget(myPlayBtn, 2, 2, 0, 1);
511 QToolButton* aBackBtn = new QToolButton(myPlayFrame);
512 aBackBtn->setIconSet(QPixmap(leftIco));
513 connect( aBackBtn, SIGNAL( clicked() ),
514 this, SLOT( onBackPressed() ) );
515 TopLayout->addWidget(aBackBtn, 3, 0);
517 QToolButton* aForvardBtn = new QToolButton(myPlayFrame);
518 aForvardBtn->setIconSet(QPixmap(rightIco));
519 connect( aForvardBtn, SIGNAL( clicked() ),
520 this, SLOT( onForvardPressed() ) );
521 TopLayout->addWidget(aForvardBtn, 3, 1);
523 QToolButton* aFirstBtn = new QToolButton(myPlayFrame);
524 aFirstBtn->setIconSet(QPixmap(firstIco));
525 connect( aFirstBtn, SIGNAL( clicked() ),
526 this, SLOT( onFirstPressed() ) );
527 TopLayout->addWidget(aFirstBtn, 4, 0);
529 QToolButton* aLastBtn = new QToolButton(myPlayFrame);
530 aLastBtn->setIconSet(QPixmap(lastIco));
531 connect( aLastBtn, SIGNAL( clicked() ),
532 this, SLOT( onLastPressed() ) );
533 TopLayout->addWidget(aLastBtn, 4, 1);
535 QLabel* aSpeedLbl = new QLabel("Speed", myPlayFrame);
536 TopLayout->addWidget(aSpeedLbl, 4, 2, Qt::AlignRight);
538 QLCDNumber* aSpeedNum = new QLCDNumber( 2, myPlayFrame );
539 aSpeedNum->setSegmentStyle(QLCDNumber::Flat);
540 aSpeedNum->display(1);
541 TopLayout->addWidget(aSpeedNum, 4, 3);
543 QwtWheel* aWheel = new QwtWheel(myPlayFrame);
544 aWheel->setOrientation(Qt::Vertical);
545 aWheel->setRange(1, 99, 1);
546 connect( aWheel, SIGNAL(valueChanged(double)),
547 aSpeedNum, SLOT(display(double)) );
548 connect( aWheel, SIGNAL(valueChanged(double)),
549 this, SLOT(onSpeedChange(double)) );
550 TopLayout->addMultiCellWidget(aWheel, 1, 3, 3, 3, Qt::AlignRight);
552 QCheckBox* aCycleCheck = new QCheckBox("Cycled animation",myPlayFrame);
553 aCycleCheck->setChecked(myAnimator->isCycling());
554 connect(aCycleCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setCyclingSlot(bool)));
555 TopLayout->addMultiCellWidget(aCycleCheck, 5, 5, 0, 3);
557 QCheckBox* aPropCheck = new QCheckBox("Use proportional timing",myPlayFrame);
558 aPropCheck->setChecked(myAnimator->isProportional());
559 connect(aPropCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setProportionalSlot(bool)));
560 TopLayout->addMultiCellWidget(aPropCheck, 6, 6, 0, 3);
562 QGroupBox* aSaveBox = new QGroupBox( "Saving", myPlayFrame );
563 aSaveBox->setColumnLayout(0, Qt::Horizontal );
564 QGridLayout* aSaveLay = new QGridLayout(aSaveBox->layout());
565 aSaveLay->setSpacing( 5 );
566 aSaveLay->setMargin( 5 );
568 mySaveCheck = new QCheckBox("Save pictures to directory", aSaveBox);
569 aSaveLay->addMultiCellWidget(mySaveCheck, 0, 0, 0, 2);
571 QLabel* aPathLbl = new QLabel("Path:", aSaveBox);
572 aPathLbl->setEnabled(false);
573 connect(mySaveCheck, SIGNAL( toggled(bool)),
574 aPathLbl, SLOT( setEnabled(bool) ));
575 aSaveLay->addWidget(aPathLbl, 1, 0);
577 myPathEdit = new QLineEdit(aSaveBox);
578 myPathEdit->setEnabled(false);
579 connect(mySaveCheck, SIGNAL( toggled(bool)),
580 myPathEdit, SLOT( setEnabled(bool) ));
581 aSaveLay->addWidget(myPathEdit, 1, 1);
583 QPushButton* aBrowseBtn = new QPushButton("Browse...", aSaveBox);
584 aBrowseBtn->setEnabled(false);
585 connect(mySaveCheck, SIGNAL( toggled(bool)),
586 aBrowseBtn, SLOT( setEnabled(bool) ));
587 connect(aBrowseBtn, SIGNAL( clicked()),
588 this, SLOT( onBrowse() ));
589 mySaveCheck->setChecked(false);
590 aSaveLay->addWidget(aBrowseBtn, 1, 2);
592 TopLayout->addMultiCellWidget(aSaveBox, 7, 7, 0, 3);
594 aMainLayout->addWidget(myPlayFrame);
596 QHBox* aBtnBox = new QHBox(this);
597 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
598 aBtnLayout->addStretch();
600 QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
601 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
603 aMainLayout->addWidget(aBtnBox);
605 myPlayFrame->setEnabled(false);
609 //************************************************************************
610 VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg() {
615 //************************************************************************
616 void VisuGUI_TimeAnimationDlg::onTypeChange(int index) {
618 myPropBtn->setEnabled(index != 0);
621 myPlayFrame->setEnabled(false);
625 //************************************************************************
626 void VisuGUI_TimeAnimationDlg::addField(SALOMEDS::SObject_var theSObject) {
627 myPlayFrame->setEnabled(false);
628 myAnimator->addField(theSObject);
633 //************************************************************************
634 void VisuGUI_TimeAnimationDlg::createFrames() {
636 QApplication::setOverrideCursor( Qt::waitCursor );
638 for (int i = 0; i < myAnimator->getNbFields(); i++) {
639 if (myAnimator->getFieldData(i).myPrs == 0)
640 myAnimator->generatePresentations(i);
642 if (myAnimator->getNbFrames() == 0) {
643 myPlayFrame->setEnabled(false);
644 QApplication::restoreOverrideCursor();
645 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_NO_ANIMATIONDATA"));
648 mySlider->setMaxValue(myAnimator->getNbFrames()-1);
649 myPlayFrame->setEnabled(true);
650 if (!myAnimator->generateFrames()) {
651 QApplication::restoreOverrideCursor();
652 //myPlayFrame->setEnabled(false);
653 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), myAnimator->getLastErrorMsg());
656 //myPlayFrame->setEnabled(true);
657 QApplication::restoreOverrideCursor();
662 //************************************************************************
663 void VisuGUI_TimeAnimationDlg::onPlayPressed() {
664 if (myPlayBtn->isOn() && (!myAnimator->running())) {
665 myPlayBtn->setIconSet(MYpausePixmap);
666 if (mySaveCheck->isChecked())
667 myAnimator->dumpTo(myPathEdit->text());
669 myAnimator->dumpTo("");
670 mySetupBtn->setEnabled(false);
671 myGenBtn->setEnabled(false);
672 myAnimator->startAnimation();
674 myPlayBtn->setIconSet(MYplayPixmap);
675 myAnimator->stopAnimation();
676 mySetupBtn->setEnabled(true);
677 myGenBtn->setEnabled(true);
681 //************************************************************************
682 void VisuGUI_TimeAnimationDlg::onBackPressed() {
684 myAnimator->prevFrame();
688 //************************************************************************
689 void VisuGUI_TimeAnimationDlg::onForvardPressed() {
690 myAnimator->nextFrame();
694 //************************************************************************
695 void VisuGUI_TimeAnimationDlg::onLastPressed() {
696 myAnimator->lastFrame();
700 //************************************************************************
701 void VisuGUI_TimeAnimationDlg::onFirstPressed() {
702 myAnimator->firstFrame();
707 //************************************************************************
708 void VisuGUI_TimeAnimationDlg::clearView() {
709 myAnimator->clearView();
713 //************************************************************************
714 void VisuGUI_TimeAnimationDlg::closeEvent(QCloseEvent* theEvent) {
715 myAnimator->stopAnimation();
716 if (myAnimator->running() && (! myAnimator->finished())) {
720 QDialog::closeEvent(theEvent);
725 //************************************************************************
726 void VisuGUI_TimeAnimationDlg::onFrameChanged(int index) {
727 if (myAnimator->isRunning()) return;
728 myAnimator->gotoFrame(index);
732 //************************************************************************
733 void VisuGUI_TimeAnimationDlg::onSpeedChange(double theSpeed) {
734 myAnimator->setSpeed((int)theSpeed);
738 //************************************************************************
739 void VisuGUI_TimeAnimationDlg::stopAnimation() {
740 myAnimator->stopAnimation();
741 myPlayBtn->setOn(false);
742 myPlayBtn->setIconSet(MYplayPixmap);
743 mySetupBtn->setEnabled(true);
744 myGenBtn->setEnabled(true);
747 //************************************************************************
748 void VisuGUI_TimeAnimationDlg::onExecution(long theNewFrame, double theTime) {
749 myTimeLbl->setText(QString("%1").arg(theTime));
750 mySlider->setValue(theNewFrame);
754 //************************************************************************
755 void VisuGUI_TimeAnimationDlg::onSetupDlg() {
756 SetupDlg* aDlg = new SetupDlg(this, myAnimator);
758 myPlayFrame->setEnabled(false);
762 //************************************************************************
763 void VisuGUI_TimeAnimationDlg::onBrowse() {
764 myPathEdit->setText(QAD_FileDlg::getExistingDirectory(this, "/","Select path"));
768 //************************************************************************
769 void VisuGUI_TimeAnimationDlg::onStop() {
771 QDialog::closeEvent(myEvent);
773 myPlayBtn->setOn(false);
774 myPlayBtn->setIconSet(MYplayPixmap);
775 mySetupBtn->setEnabled(true);
776 myGenBtn->setEnabled(true);