26 #include <IceUtil/Time.h>
33 #include <RobotComponents/gui-plugins/MMMPlayerPlugin/ui_MMMPlayerConfigDialog.h>
42 #include <QInputDialog>
44 #include <QMessageBox>
45 #include <QPushButton>
53 #define PROJECT_DEFAULT "Armar4"
54 #define CONFIG_FILE_DEFAULT "data/MMM/punching.xml"
56 #define POSITION_CONTROL 0
57 #define VELOCITY_CONTROL 1
61 addWidget<MMMPlayerWidget>();
68 fileDialog2 =
new QFileDialog();
69 fileDialog2->setModal(
true);
70 fileDialog2->setFileMode(QFileDialog::ExistingFiles);
71 QStringList fileTypes;
72 fileTypes << tr(
"XML (*.xml)") << tr(
"All Files (*.*)");
73 fileDialog2->setNameFilters(fileTypes);
75 jointList =
new QListWidget();
76 updateTimer =
new QTimer(
this);
105 isComponentCreated =
false;
106 if (dialog->needtoCreate)
109 std::string kinematicUnitName =
110 dialog->kinematicUnitComponentProxyFinder->getSelectedProxyName()
113 std::string kinematicTopic = dialog->kinematicTopicName;
116 std::string packageName(
"RobotComponents");
119 std::string appPath = finder.
getBinaryDir() +
"/TrajectoryPlayerAppRun";
121 pros.push_back(appPath);
124 properties->setProperty(
"ArmarX.TrajectoryPlayer.KinematicUnitName", kinematicUnitName);
125 properties->setProperty(
"ArmarX.TrajectoryPlayer.KinematicTopicName", kinematicTopic);
135 isComponentCreated =
true;
139 dialog->mmmPlayerComponentProxyFinder->getSelectedProxyName().trimmed().toStdString());
141 dialog->trajPlayerComponentProxyFinder->getSelectedProxyName().trimmed().toStdString());
151 MMMLoader = getProxy<MMMPlayerInterfacePrx>(
152 dialog->mmmPlayerComponentProxyFinder->getSelectedProxyName().trimmed().toStdString());
153 trajPlayer = getProxy<TrajectoryPlayerInterfacePrx>(
154 dialog->trajPlayerComponentProxyFinder->getSelectedProxyName().trimmed().toStdString());
157 ui.editConfigFile->setText(QString::fromStdString(
configFile));
159 fileDialog2->setDirectory(QString::fromStdString(dir.remove_filename().string()));
168 ui.frameSlider->blockSignals(
true);
169 ui.frameSlider->setMaximum(100);
170 on_loopPlayback_toggled(
false);
192 if (isComponentCreated)
195 dialog->mmmPlayerComponentProxyFinder->getSelectedProxyName()
218 TrajectoryBasePtr t =
MMMLoader->getJointTraj();
230 connect(
ui.initializeButton, SIGNAL(clicked()),
this, SLOT(on_initializeButton_clicked()));
231 connect(
ui.startButton, SIGNAL(clicked()),
this, SLOT(on_startButton_clicked()));
232 connect(
ui.pauseButton, SIGNAL(clicked()),
this, SLOT(on_pauseButton_clicked()));
233 connect(
ui.stopButton, SIGNAL(clicked()),
this, SLOT(on_stopButton_clicked()));
234 connect(
ui.previewButton, SIGNAL(clicked()),
this, SLOT(on_previewButton_clicked()));
236 connect(
ui.btnSelectConfig, SIGNAL(clicked()), fileDialog2, SLOT(show()));
237 connect(
ui.selectJoints, SIGNAL(clicked()), jointList, SLOT(show()));
238 connect(fileDialog2, SIGNAL(accepted()),
this, SLOT(configFileSelected()));
239 connect(updateTimer, SIGNAL(timeout()),
this, SLOT(updateSlider()));
242 connect(
ui.loopPlayback, SIGNAL(toggled(
bool)),
this, SLOT(on_loopPlayback_toggled(
bool)));
243 connect(
ui.enableRobotPoseUnit,
244 SIGNAL(toggled(
bool)),
246 SLOT(on_enableRobotPoseUnit_toggled(
bool)));
247 connect(
ui.speedSpinBox,
248 SIGNAL(valueChanged(
double)),
250 SLOT(on_spinBoxFPS_valueChanged(
double)));
252 ui.controlMode, SIGNAL(currentIndexChanged(
int)),
this, SLOT(on_controlMode_changed(
int)));
254 SIGNAL(itemChanged(QListWidgetItem*)),
256 SLOT(jointListChanged(QListWidgetItem*)));
260 armarx::MMMPlayerWidget::on_initializeButton_clicked()
264 trajPlayer->resetTrajectoryPlayer(
true);
265 ui.startButton->setEnabled(
true);
266 ui.previewButton->setEnabled(
true);
274 trajPlayer->setEndTime(trajPlayer->getTrajEndTime() /
value);
278 armarx::MMMPlayerWidget::on_startButton_clicked()
280 trajPlayer->setIsPreview(
false);
281 setSpeed(ui.speedSpinBox->value());
282 on_controlMode_changed(ui.controlMode->currentIndex());
283 bool started = trajPlayer->startTrajectoryPlayer();
288 updateTimer->start(100);
289 ui.initializeButton->setDisabled(started);
290 ui.startButton->setDisabled(started);
291 ui.previewButton->setDisabled(started);
292 ui.motionName->setDisabled(started);
293 ui.controlMode->setDisabled(started);
294 ui.pauseButton->setEnabled(started);
295 ui.pauseButton->setText(
"Pause");
296 ui.btnSelectConfig->setEnabled(
false);
297 ui.speedSpinBox->setDisabled(started);
298 ui.stopButton->setEnabled(started);
299 ui.frameSlider->setDisabled(started);
300 ui.frameSlider->blockSignals(
true);
302 ui.status->setText(
"Real");
307 armarx::MMMPlayerWidget::on_previewButton_clicked()
309 trajPlayer->setIsPreview(
true);
310 ARMARX_INFO <<
"speed spin box val: " << ui.speedSpinBox->value();
311 setSpeed(ui.speedSpinBox->value());
312 trajPlayer->resetTrajectoryPlayer(
false);
313 bool previewed = trajPlayer->startTrajectoryPlayer();
317 updateTimer->start(100);
318 ui.initializeButton->setDisabled(previewed);
319 ui.startButton->setDisabled(previewed);
320 ui.previewButton->setDisabled(previewed);
321 ui.motionName->setDisabled(previewed);
322 ui.controlMode->setDisabled(previewed);
323 ui.pauseButton->setEnabled(previewed);
324 ui.pauseButton->setText(
"Pause");
325 ui.btnSelectConfig->setEnabled(
false);
326 ui.speedSpinBox->setDisabled(previewed);
327 ui.stopButton->setEnabled(previewed);
328 ui.frameSlider->setDisabled(previewed);
329 ui.frameSlider->blockSignals(
true);
331 ui.status->setText(
"Preview");
336 MMMPlayerWidget::on_pauseButton_clicked()
342 ui.pauseButton->setText(
"Resume");
346 ui.pauseButton->setText(
"Pause");
349 ui.controlMode->setEnabled(paused);
350 ui.frameSlider->setEnabled(paused);
351 ui.speedSpinBox->setEnabled(paused);
352 ui.frameSlider->blockSignals(!paused);
356 armarx::MMMPlayerWidget::on_stopButton_clicked()
358 bool stopped = trajPlayer->stopTrajectoryPlayer();
363 ui.initializeButton->setEnabled(stopped);
364 ui.startButton->setDisabled(stopped);
365 ui.previewButton->setEnabled(stopped);
366 ui.pauseButton->setText(
"Pause");
367 ui.btnSelectConfig->setEnabled(
true);
368 ui.motionName->setEnabled(stopped);
369 ui.controlMode->setEnabled(stopped);
370 ui.speedSpinBox->setEnabled(stopped);
371 ui.frameSlider->blockSignals(
false);
372 ui.pauseButton->setDisabled(stopped);
373 ui.stopButton->setDisabled(stopped);
375 ui.status->setText(
"");
380 MMMPlayerWidget::configFileSelected()
382 configFile = (this->fileDialog2->selectedFiles()[0]).toStdString();
383 ui.editConfigFile->setText(this->fileDialog2->selectedFiles()[0]);
387 ui.frameSlider->setMaximum(100);
398 MMMPlayerWidget::setupMotionList()
400 Ice::StringSeq motionNames =
MMMLoader->getMotionNames();
402 ui.motionName, SIGNAL(currentIndexChanged(
int)),
this, SLOT(motionChanged(
int)));
403 ui.motionName->clear();
405 for (
size_t i = 0; i < motionNames.size(); ++i)
407 ui.motionName->addItem(QString::fromStdString(motionNames.at(i)));
410 if (motionNames.size() > 0)
412 ui.motionName->setCurrentIndex(0);
413 connect(
ui.motionName, SIGNAL(currentIndexChanged(
int)),
this, SLOT(motionChanged(
int)));
418 MMMPlayerWidget::setupJointList()
420 Ice::StringSeq jointNames =
MMMLoader->getJointNames();
421 jointList->blockSignals(
true);
424 for (
size_t i = 0; i < jointNames.size(); ++i)
426 std::string jointName = jointNames.at(i);
427 QListWidgetItem* joint =
new QListWidgetItem(QString::fromStdString(jointName), jointList);
428 joint->setCheckState(Qt::Checked);
431 jointList->blockSignals(
false);
435 MMMPlayerWidget::updateSlider()
437 double currentTime =
trajPlayer->getCurrentTime();
439 double posPer = currentTime / endTime;
441 int sliderPos = posPer * 100;
443 ui.frameSlider->blockSignals(
true);
444 ui.frameSlider->setSliderPosition(sliderPos);
445 ui.frameSlider->blockSignals(
false);
446 ui.currentFrame->display(currentTime);
450 MMMPlayerWidget::jointListChanged(QListWidgetItem* joint)
454 if (joint->checkState() == Qt::Checked)
456 jointState =
trajPlayer->setJointsInUse(joint->text().toStdString(),
true);
460 jointState =
trajPlayer->setJointsInUse(joint->text().toStdString(),
false);
465 joint->setCheckState(Qt::Checked);
469 joint->setCheckState(Qt::Unchecked);
474 MMMPlayerWidget::motionChanged(
int)
476 std::string motionName =
ui.motionName->currentText().toStdString();
477 ARMARX_INFO <<
"Choosing motion with name '" << motionName <<
"'";
488 MMMPlayerWidget::on_spinBoxFPS_valueChanged(
double value)
497 MMMPlayerWidget::on_loopPlayback_toggled(
bool state)
500 ui.loopPlayback->setChecked(state);
504 MMMPlayerWidget::on_controlMode_changed(
int controlMode)
506 ui.controlMode->setCurrentIndex(controlMode);
519 armarx::MMMPlayerWidget::on_enableRobotPoseUnit_toggled(
bool state)
521 trajPlayer->enableRobotPoseUnit(state);
522 ui.enableRobotPoseUnit->setChecked(state);