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 static double MAXVALUE = 1.0E+300;
42 SetupDlg::SetupDlg(QWidget* theParent, VISU_TimeAnimation* theAnimator)
43 : QDialog( theParent, "SetupDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
45 setCaption("Setup Animation");
46 setSizeGripEnabled( TRUE );
47 myAnimator = theAnimator;
49 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
50 aMainLayout->setSpacing(5);
53 QFrame* aRangeGrp = new QFrame(this);
54 QGridLayout* aRangeLayout = new QGridLayout( aRangeGrp );
55 aRangeLayout->setSpacing( 6 );
56 aRangeLayout->setMargin( 11 );
57 aRangeGrp->setFrameStyle(QFrame::Box | QFrame::Raised);
59 myUseRangeChk = new QCheckBox("Use range of time stamps", aRangeGrp);
60 aRangeLayout->addMultiCellWidget(myUseRangeChk, 0, 0, 0, 3);
61 myUseRangeChk->setChecked(myAnimator->isRangeDefined());
63 QLabel* aMinLbl = new QLabel("From", aRangeGrp);
64 aMinLbl->setEnabled(myUseRangeChk->isChecked());
65 aRangeLayout->addWidget(aMinLbl, 1, 0);
66 double aStep = (myAnimator->getMaxTime() - myAnimator->getMinTime())/(theAnimator->getFieldData(0).myNbTimes - 1);
67 myMinVal = new QAD_SpinBoxDbl(aRangeGrp, myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep );
68 myMinVal->setEnabled(myUseRangeChk->isChecked());
69 if (myUseRangeChk->isChecked())
70 myMinVal->setValue( myAnimator->getMinRange() );
72 myMinVal->setValue( myAnimator->getMinTime() );
74 connect(myMinVal, SIGNAL( valueChanged(double)),
75 this, SLOT( onMinValue(double) ));
76 aRangeLayout->addWidget(myMinVal, 1, 1);
78 QLabel* aMaxLbl = new QLabel("To", aRangeGrp);
79 aMaxLbl->setEnabled(myUseRangeChk->isChecked());
80 aRangeLayout->addWidget(aMaxLbl, 1, 2);
81 myMaxVal = new QAD_SpinBoxDbl(aRangeGrp, myAnimator->getMinTime(), myAnimator->getMaxTime(), aStep );
82 myMaxVal->setEnabled(myUseRangeChk->isChecked());
83 if (myUseRangeChk->isChecked())
84 myMaxVal->setValue( myAnimator->getMaxRange() );
86 myMaxVal->setValue( myAnimator->getMaxTime() );
88 connect(myMaxVal, SIGNAL( valueChanged(double)),
89 this, SLOT( onMaxValue(double) ));
90 aRangeLayout->addWidget(myMaxVal, 1, 3);
92 connect(myUseRangeChk, SIGNAL( toggled(bool)),
93 aMinLbl, SLOT( setEnabled(bool) ));
94 connect(myUseRangeChk, SIGNAL( toggled(bool)),
95 aMaxLbl, SLOT( setEnabled(bool) ));
96 connect(myUseRangeChk, SIGNAL( toggled(bool)),
97 this, SLOT( onRangeCheck(bool) ));
99 aMainLayout->addWidget(aRangeGrp);
102 QHBox* aPropFrame = new QHBox(this);
103 aPropFrame->setSpacing(5);
105 QVGroupBox* aNamesBox = new QVGroupBox("Fields",aPropFrame);
106 myFieldLst = new QListBox(aNamesBox);
107 QStringList aFieldNames;
108 // Find names of fields
109 for (int i = 0; i < theAnimator->getNbFields(); i++) {
110 aFieldNames.append(VisuGUI::getValue(theAnimator->getFieldData(i).myField, "myName"));
112 myFieldLst->insertStringList(aFieldNames);
113 myFieldLst->setSelected(0, true);
114 connect( myFieldLst, SIGNAL( highlighted(int) ),
115 this, SLOT( onFieldChange(int) ) );
118 QVGroupBox* aPropBox = new QVGroupBox("Properties", aPropFrame);
119 myTypeCombo = new QComboBox(aPropBox);
120 connect( myTypeCombo, SIGNAL( activated(int) ),
121 this, SLOT( onTypeChanged(int) ) );
123 QPushButton* aBarBtn = new QPushButton("Scalar Bar...", aPropBox);
124 connect( aBarBtn, SIGNAL( clicked() ),
125 this, SLOT( onScalarBarDlg() ) );
127 myPropBtn = new QPushButton("Properties...", aPropBox);
128 myPropBtn->setEnabled(theAnimator->getFieldData(0).myPrsType != VISU::TSCALARMAP);
129 connect( myPropBtn, SIGNAL( clicked() ),
130 this, SLOT( onPreferencesDlg() ) );
133 aMainLayout->addWidget(aPropFrame);
135 QHBox* aBtnBox = new QHBox(this);
136 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
137 aBtnLayout->addStretch();
139 QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
140 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
142 aMainLayout->addWidget(aBtnBox);
146 //************************************************************************
147 void SetupDlg::onFieldChange(int theIndex) {
148 FieldData& aData = myAnimator->getFieldData(theIndex);
149 myTypeCombo->clear();
150 myTypeCombo->insertItem("Scalar Map");
151 myTypeCombo->insertItem("Iso Surfaces");
152 myTypeCombo->insertItem("Cut Planes");
154 SALOMEDS::SObject_var aSObject = aData.myField;
155 long aNumComp = VisuGUI::getValue(aSObject, "myNumComponent").toLong();
157 myTypeCombo->insertItem("Deformed Shape");
158 myTypeCombo->insertItem("Vectors");
159 myTypeCombo->insertItem("Stream Lines");
161 switch (aData.myPrsType) {
162 case VISU::TSCALARMAP: //Scalar Map
163 myTypeCombo->setCurrentItem(0);
165 case VISU::TISOSURFACE: //Iso Surfaces
166 myTypeCombo->setCurrentItem(1);
168 case VISU::TCUTPLANES: //Cut Planes
169 myTypeCombo->setCurrentItem(2);
171 case VISU::TDEFORMEDSHAPE: //Deformed Shape
172 myTypeCombo->setCurrentItem(3);
174 case VISU::TVECTORS: //Vectors
175 myTypeCombo->setCurrentItem(4);
177 case VISU::TSTREAMLINES: //Stream Lines
178 myTypeCombo->setCurrentItem(5);
179 aData.myPrsType = VISU::TSTREAMLINES;
182 myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
185 //************************************************************************
186 void SetupDlg::onTypeChanged(int theIndex) {
187 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
190 aData.myPrsType = VISU::TSCALARMAP;
192 case 1: //Iso Surfaces
193 aData.myPrsType = VISU::TISOSURFACE;
196 aData.myPrsType = VISU::TCUTPLANES;
198 case 3: //Deformed Shape
199 aData.myPrsType = VISU::TDEFORMEDSHAPE;
202 aData.myPrsType = VISU::TVECTORS;
204 case 5: //Stream Lines
205 aData.myPrsType = VISU::TSTREAMLINES;
208 myAnimator->clearData(aData);
209 myPropBtn->setEnabled(aData.myPrsType != VISU::TSCALARMAP);
210 //myAnimator->generatePresentations(myFieldLst->currentItem());
214 //************************************************************************
215 void SetupDlg::onScalarBarDlg() {
216 QApplication::setOverrideCursor( Qt::waitCursor );
217 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
218 if (aData.myPrs == 0)
219 myAnimator->generatePresentations(myFieldLst->currentItem());
220 QApplication::restoreOverrideCursor();
222 VisuGUI_ScalarBarDlg* aScalarBarDlg = new VisuGUI_ScalarBarDlg();
223 aScalarBarDlg->initFromPrsObject(aData.myPrs[0]);
224 if (aScalarBarDlg->exec()) {
225 for (int i = 0; i < aData.myNbFrames; i++)
226 aScalarBarDlg->storeToPrsObject(aData.myPrs[i]);
230 //************************************************************************
231 void SetupDlg::onPreferencesDlg() {
232 QApplication::setOverrideCursor( Qt::waitCursor );
233 FieldData& aData = myAnimator->getFieldData(myFieldLst->currentItem());
234 if (aData.myPrs == 0)
235 myAnimator->generatePresentations(myFieldLst->currentItem());
236 QApplication::restoreOverrideCursor();
238 switch (myTypeCombo->currentItem()) {
239 case 1: //Iso Surfaces
241 VisuGUI_IsoSurfacesDlg* aDlg = new VisuGUI_IsoSurfacesDlg();
242 aDlg->initFromPrsObject(dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[0]));
244 for (int i = 0; i < aData.myNbFrames; i++)
245 aDlg->storeToPrsObject(dynamic_cast<VISU::IsoSurfaces_i*>(aData.myPrs[i]));
251 VisuGUI_CutPlanesDlg* aDlg = new VisuGUI_CutPlanesDlg();
252 aDlg->initFromPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[0]));
254 for (int i = 0; i < aData.myNbFrames; i++)
255 aDlg->storeToPrsObject(dynamic_cast<VISU::CutPlanes_i*>(aData.myPrs[i]));
259 case 3: //Deformed Shape
261 VisuGUI_MagnitudeDlg* aDlg = new VisuGUI_MagnitudeDlg();
262 aDlg->initFromPrsObject(dynamic_cast<VISU::DeformedShape_i*>(aData.myPrs[0]));
264 for (int i = 0; i < aData.myNbFrames; i++)
265 aDlg->storeToPrsObject(dynamic_cast<VISU::DeformedShape_i*>(aData.myPrs[i]));
271 VisuGUI_VectorsDlg* aDlg = new VisuGUI_VectorsDlg();
272 aDlg->initFromPrsObject(dynamic_cast<VISU::Vectors_i*>(aData.myPrs[0]));
274 for (int i = 0; i < aData.myNbFrames; i++)
275 aDlg->storeToPrsObject(dynamic_cast<VISU::Vectors_i*>(aData.myPrs[i]));
279 case 5: //Stream Lines
281 VisuGUI_StreamLinesDlg* aDlg = new VisuGUI_StreamLinesDlg();
282 aDlg->initFromPrsObject(dynamic_cast<VISU::StreamLines_i*>(aData.myPrs[0]));
284 for (int i = 0; i < aData.myNbFrames; i++)
285 aDlg->storeToPrsObject(dynamic_cast<VISU::StreamLines_i*>(aData.myPrs[i]));
292 //************************************************************************
293 void SetupDlg::onRangeCheck(bool theCheck) {
294 for (int i = 0; i < myAnimator->getNbFields(); i++)
295 myAnimator->clearData(myAnimator->getFieldData(i));
297 myMinVal->setEnabled(theCheck);
298 myMaxVal->setEnabled(theCheck);
301 myAnimator->setAnimationRange(0, 0);
303 // if (myMinVal->value() < myMaxVal->value())
304 myAnimator->setAnimationRange(myMinVal->value(), myMaxVal->value());
305 // else if (myMinVal->value() > myMaxVal->value())
306 // myAnimator->setAnimationRange(myMaxVal->value(), myMinVal->value());
307 // else // equal case
308 // myAnimator->setAnimationRange(0, 0);
312 //************************************************************************
313 void SetupDlg::onMinValue(double theVal) {
314 if (theVal > myAnimator->getMaxRange()) {
315 myMinVal->setValue( myAnimator->getMinTime() );
316 myMinVal->setFocus();
319 for (int i = 0; i < myAnimator->getNbFields(); i++)
320 myAnimator->clearData(myAnimator->getFieldData(i));
321 myAnimator->setAnimationRange(theVal, myAnimator->getMaxRange());
324 //************************************************************************
325 void SetupDlg::onMaxValue(double theVal) {
326 if (theVal < myAnimator->getMinRange()) {
327 myMaxVal->setValue( myAnimator->getMaxTime() );
328 myMaxVal->setFocus();
331 for (int i = 0; i < myAnimator->getNbFields(); i++)
332 myAnimator->clearData(myAnimator->getFieldData(i));
333 myAnimator->setAnimationRange(myAnimator->getMinRange(), theVal);
337 static const char * firstIco[] = {
353 static const char * lastIco[] = {
369 static const char * leftIco[] = {
384 static const char * playIco[] = {
403 static QPixmap MYplayPixmap(playIco);
407 static const char * rightIco[] = {
423 static const char * pauseIco[] = {
442 static QPixmap MYpausePixmap(pauseIco);
445 VisuGUI_TimeAnimationDlg::VisuGUI_TimeAnimationDlg(SALOMEDS::Study_var theStudy)
446 : QDialog( QAD_Application::getDesktop(), "VisuGUI_TimeAnimationDlg", false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose)
448 setCaption("Animation");
449 setSizeGripEnabled( TRUE );
453 myAnimator = new VISU_TimeAnimation(theStudy);
454 myAnimator->setSpeed(1);
455 myAnimator->setViewer(VisuGUI::GetVtkViewFrame());
456 connect( myAnimator, SIGNAL( frameChanged(long, double) ),
457 this, SLOT( onExecution(long, double) ) );
458 connect( myAnimator, SIGNAL( stopped() ),
459 this, SLOT( onStop() ) );
461 QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 6);
462 aMainLayout->setSpacing(5);
464 mySetupBtn = new QPushButton("Setup Animation...", this);
465 connect( mySetupBtn, SIGNAL( clicked() ),
466 this, SLOT( onSetupDlg() ) );
467 aMainLayout->addWidget(mySetupBtn);
469 myGenBtn = new QPushButton("Generate frames", this);
470 connect( myGenBtn, SIGNAL( clicked() ),
471 this, SLOT( createFrames() ) );
472 aMainLayout->addWidget(myGenBtn);
474 myPlayFrame = new QFrame(this);
475 myPlayFrame->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
476 myPlayFrame->setLineWidth( 1 );
479 // --- Play controls ---
480 QGridLayout* TopLayout = new QGridLayout( myPlayFrame );
481 TopLayout->setSpacing( 6 );
482 TopLayout->setMargin( 11 );
484 myTimeLbl = new QLabel("0", myPlayFrame);
485 TopLayout->addMultiCellWidget(myTimeLbl, 0, 0, 0, 2, Qt::AlignHCenter);
487 mySlider = new QSlider(Qt::Horizontal, myPlayFrame);
488 mySlider->setMinValue(0);
489 mySlider->setMaxValue(3);
490 mySlider->setTickInterval(1);
491 //mySlider->setTickmarks(QSlider::Below);
492 mySlider->setTracking(false);
493 connect( mySlider, SIGNAL( valueChanged(int) ),
494 this, SLOT( onFrameChanged(int) ) );
495 TopLayout->addMultiCellWidget(mySlider, 1, 1, 0, 2);
497 myPlayBtn = new QToolButton(myPlayFrame);
498 myPlayBtn->setIconSet(MYplayPixmap);
499 myPlayBtn->setToggleButton(true);
500 connect( myPlayBtn, SIGNAL( clicked() ),
501 this, SLOT( onPlayPressed() ) );
502 TopLayout->addMultiCellWidget(myPlayBtn, 2, 2, 0, 1);
504 QToolButton* aBackBtn = new QToolButton(myPlayFrame);
505 aBackBtn->setIconSet(QPixmap(leftIco));
506 connect( aBackBtn, SIGNAL( clicked() ),
507 this, SLOT( onBackPressed() ) );
508 TopLayout->addWidget(aBackBtn, 3, 0);
510 QToolButton* aForvardBtn = new QToolButton(myPlayFrame);
511 aForvardBtn->setIconSet(QPixmap(rightIco));
512 connect( aForvardBtn, SIGNAL( clicked() ),
513 this, SLOT( onForvardPressed() ) );
514 TopLayout->addWidget(aForvardBtn, 3, 1);
516 QToolButton* aFirstBtn = new QToolButton(myPlayFrame);
517 aFirstBtn->setIconSet(QPixmap(firstIco));
518 connect( aFirstBtn, SIGNAL( clicked() ),
519 this, SLOT( onFirstPressed() ) );
520 TopLayout->addWidget(aFirstBtn, 4, 0);
522 QToolButton* aLastBtn = new QToolButton(myPlayFrame);
523 aLastBtn->setIconSet(QPixmap(lastIco));
524 connect( aLastBtn, SIGNAL( clicked() ),
525 this, SLOT( onLastPressed() ) );
526 TopLayout->addWidget(aLastBtn, 4, 1);
528 QLabel* aSpeedLbl = new QLabel("Speed", myPlayFrame);
529 TopLayout->addWidget(aSpeedLbl, 4, 2, Qt::AlignRight);
531 QLCDNumber* aSpeedNum = new QLCDNumber( 2, myPlayFrame );
532 aSpeedNum->setSegmentStyle(QLCDNumber::Flat);
533 aSpeedNum->display(1);
534 TopLayout->addWidget(aSpeedNum, 4, 3);
536 QwtWheel* aWheel = new QwtWheel(myPlayFrame);
537 aWheel->setOrientation(Qt::Vertical);
538 aWheel->setRange(1, 99, 1);
539 connect( aWheel, SIGNAL(valueChanged(double)),
540 aSpeedNum, SLOT(display(double)) );
541 connect( aWheel, SIGNAL(valueChanged(double)),
542 this, SLOT(onSpeedChange(double)) );
543 TopLayout->addMultiCellWidget(aWheel, 1, 3, 3, 3, Qt::AlignRight);
545 QCheckBox* aCycleCheck = new QCheckBox("Cycled animation",myPlayFrame);
546 aCycleCheck->setChecked(myAnimator->isCycling());
547 connect(aCycleCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setCyclingSlot(bool)));
548 TopLayout->addMultiCellWidget(aCycleCheck, 5, 5, 0, 3);
550 QCheckBox* aPropCheck = new QCheckBox("Use proportional timing",myPlayFrame);
551 aPropCheck->setChecked(myAnimator->isProportional());
552 connect(aPropCheck, SIGNAL(toggled(bool)), myAnimator, SLOT(setProportionalSlot(bool)));
553 TopLayout->addMultiCellWidget(aPropCheck, 6, 6, 0, 3);
555 QGroupBox* aSaveBox = new QGroupBox( "Saving", myPlayFrame );
556 aSaveBox->setColumnLayout(0, Qt::Horizontal );
557 QGridLayout* aSaveLay = new QGridLayout(aSaveBox->layout());
558 aSaveLay->setSpacing( 5 );
559 aSaveLay->setMargin( 5 );
561 mySaveCheck = new QCheckBox("Save pictures to directory", aSaveBox);
562 aSaveLay->addMultiCellWidget(mySaveCheck, 0, 0, 0, 2);
564 QLabel* aPathLbl = new QLabel("Path:", aSaveBox);
565 aPathLbl->setEnabled(false);
566 connect(mySaveCheck, SIGNAL( toggled(bool)),
567 aPathLbl, SLOT( setEnabled(bool) ));
568 aSaveLay->addWidget(aPathLbl, 1, 0);
570 myPathEdit = new QLineEdit(aSaveBox);
571 myPathEdit->setEnabled(false);
572 connect(mySaveCheck, SIGNAL( toggled(bool)),
573 myPathEdit, SLOT( setEnabled(bool) ));
574 aSaveLay->addWidget(myPathEdit, 1, 1);
576 QPushButton* aBrowseBtn = new QPushButton("Browse...", aSaveBox);
577 aBrowseBtn->setEnabled(false);
578 connect(mySaveCheck, SIGNAL( toggled(bool)),
579 aBrowseBtn, SLOT( setEnabled(bool) ));
580 connect(aBrowseBtn, SIGNAL( clicked()),
581 this, SLOT( onBrowse() ));
582 mySaveCheck->setChecked(false);
583 aSaveLay->addWidget(aBrowseBtn, 1, 2);
585 TopLayout->addMultiCellWidget(aSaveBox, 7, 7, 0, 3);
587 aMainLayout->addWidget(myPlayFrame);
589 QHBox* aBtnBox = new QHBox(this);
590 QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
591 aBtnLayout->addStretch();
593 QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
594 connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close()));
596 aMainLayout->addWidget(aBtnBox);
598 myPlayFrame->setEnabled(false);
602 //************************************************************************
603 VisuGUI_TimeAnimationDlg::~VisuGUI_TimeAnimationDlg() {
608 //************************************************************************
609 void VisuGUI_TimeAnimationDlg::onTypeChange(int index) {
611 myPropBtn->setEnabled(index != 0);
614 myPlayFrame->setEnabled(false);
618 //************************************************************************
619 void VisuGUI_TimeAnimationDlg::addField(SALOMEDS::SObject_var theSObject) {
620 myPlayFrame->setEnabled(false);
621 myAnimator->addField(theSObject);
626 //************************************************************************
627 void VisuGUI_TimeAnimationDlg::createFrames() {
629 QApplication::setOverrideCursor( Qt::waitCursor );
631 for (int i = 0; i < myAnimator->getNbFields(); i++) {
632 if (myAnimator->getFieldData(i).myPrs == 0)
633 myAnimator->generatePresentations(i);
635 mySlider->setMaxValue(myAnimator->getNbFrames()-1);
636 myPlayFrame->setEnabled(true);
637 if (!myAnimator->generateFrames()) {
638 QApplication::restoreOverrideCursor();
639 //myPlayFrame->setEnabled(false);
640 QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), myAnimator->getLastErrorMsg());
643 //myPlayFrame->setEnabled(true);
644 QApplication::restoreOverrideCursor();
649 //************************************************************************
650 void VisuGUI_TimeAnimationDlg::onPlayPressed() {
651 if (myPlayBtn->isOn()) {
652 myPlayBtn->setIconSet(MYpausePixmap);
653 if (mySaveCheck->isChecked())
654 myAnimator->dumpTo(myPathEdit->text());
656 myAnimator->dumpTo("");
657 mySetupBtn->setEnabled(false);
658 myGenBtn->setEnabled(false);
659 myAnimator->startAnimation();
661 myPlayBtn->setIconSet(MYplayPixmap);
662 myAnimator->stopAnimation();
663 mySetupBtn->setEnabled(true);
664 myGenBtn->setEnabled(true);
668 //************************************************************************
669 void VisuGUI_TimeAnimationDlg::onBackPressed() {
671 myAnimator->prevFrame();
675 //************************************************************************
676 void VisuGUI_TimeAnimationDlg::onForvardPressed() {
677 myAnimator->nextFrame();
681 //************************************************************************
682 void VisuGUI_TimeAnimationDlg::onLastPressed() {
683 myAnimator->lastFrame();
687 //************************************************************************
688 void VisuGUI_TimeAnimationDlg::onFirstPressed() {
689 myAnimator->firstFrame();
694 //************************************************************************
695 void VisuGUI_TimeAnimationDlg::clearView() {
696 myAnimator->clearView();
700 //************************************************************************
701 void VisuGUI_TimeAnimationDlg::closeEvent(QCloseEvent* theEvent) {
702 myAnimator->stopAnimation();
703 if (myAnimator->running() && (! myAnimator->finished())) {
707 QDialog::closeEvent(theEvent);
712 //************************************************************************
713 void VisuGUI_TimeAnimationDlg::onFrameChanged(int index) {
714 if (myAnimator->isRunning()) return;
715 myAnimator->gotoFrame(index);
719 //************************************************************************
720 void VisuGUI_TimeAnimationDlg::onSpeedChange(double theSpeed) {
721 myAnimator->setSpeed((int)theSpeed);
725 //************************************************************************
726 void VisuGUI_TimeAnimationDlg::stopAnimation() {
727 myAnimator->stopAnimation();
728 myPlayBtn->setOn(false);
729 myPlayBtn->setIconSet(MYplayPixmap);
730 mySetupBtn->setEnabled(true);
731 myGenBtn->setEnabled(true);
734 //************************************************************************
735 void VisuGUI_TimeAnimationDlg::onExecution(long theNewFrame, double theTime) {
736 myTimeLbl->setText(QString("%1").arg(theTime));
737 mySlider->setValue(theNewFrame);
741 //************************************************************************
742 void VisuGUI_TimeAnimationDlg::onSetupDlg() {
743 SetupDlg* aDlg = new SetupDlg(this, myAnimator);
745 myPlayFrame->setEnabled(false);
749 //************************************************************************
750 void VisuGUI_TimeAnimationDlg::onBrowse() {
751 myPathEdit->setText(QAD_FileDlg::getExistingDirectory(this, "/","Select path"));
755 //************************************************************************
756 void VisuGUI_TimeAnimationDlg::onStop() {
758 QDialog::closeEvent(myEvent);
760 myPlayBtn->setOn(false);
761 myPlayBtn->setIconSet(MYplayPixmap);
762 mySetupBtn->setEnabled(true);
763 myGenBtn->setEnabled(true);