25 #include <ArmarXGui/gui-plugins/StatechartEventSenderPlugin/ui_EventSenderConfig.h>
41 #include <IceUtil/IceUtil.h>
46 #include <QFileDialog>
47 #include <QMessageBox>
48 #include <QPushButton>
49 #include <QScrollArea>
50 #include <QTableWidget>
51 #include <QTableWidgetItem>
83 settings->setValue(
"eventName",
event->eventName.c_str());
84 settings->setValue(
"eventReceiverName",
event->eventReceiverName.c_str());
85 settings->beginWriteArray(
"parameters");
86 StringVariantContainerBaseMap::const_iterator it =
event->properties.begin();
89 for (; it !=
event->properties.end(); ++it, i++)
92 settings->setArrayIndex(i);
93 settings->setValue(
"key", it->first.c_str());
94 settings->setValue(
"VariantTypeId", sVar->get()->getType());
95 settings->setValue(
"value", sVar->get()->getOutputValueOnly().c_str());
106 description = settings->value(
"description").toString();
108 event =
new Event(settings->value(
"eventReceiverName").toString().toStdString(),
109 settings->value(
"eventName").toString().toStdString());
111 int size = settings->beginReadArray(
"parameters");
113 for (
int i = 0; i < size; ++i)
115 settings->setArrayIndex(i);
118 var->setType(settings->value(
"VariantTypeId").toInt());
119 QVariant
data = settings->value(
"value");
124 var->setString(
data.toString().toStdString());
128 var->setInt(
data.toInt());
132 var->setLong(
data.toLongLong());
136 var->setFloat(
data.toFloat());
140 var->setDouble(
data.toDouble());
144 var->setBool(
data.toBool());
151 sVar->setVariant(var);
152 std::string key = settings->value(
"key").toString().toStdString();
153 event->properties[key] = sVar;
157 settings->endArray();
187 throw NotImplementedYetException(
"Sending event");
215 QString currentEventString =
ui->CBEvent->currentText();
217 event->properties =
ui->paramEditor->getStringValueMap();
298 QModelIndex oldIndex = treeBox->rootModelIndex();
299 treeBox->setRootModelIndex(
index.parent());
300 treeBox->setCurrentIndex(
index.row());
301 treeBox->setRootModelIndex(oldIndex);
302 treeBox->view()->setCurrentIndex(
index);
307 ui->CBEvent->setCurrentIndex(
308 ui->CBEvent->findText(config.
event->eventName.c_str()));
312 ui->paramEditor->setRowCount(0);
313 StringVariantContainerBaseMap::const_iterator it = config.
event->properties.begin();
315 for (; it != config.
event->properties.end(); ++it)
318 ui->paramEditor->addParameterRow(
320 QString::fromStdString(
322 sVar->get()->getOutputValueOnly().c_str());
328 QString searchString,
330 QVariant userData)
const
332 QStandardItem* item = model->invisibleRootItem();
333 return getRowOfItem(item, searchString, userDataRole, userData);
338 QString searchString,
340 QVariant userData)
const
342 if (userDataRole == 0 && searchString.length() == 0)
344 throw LocalException(
"Either searchString or userDataRole must be given!");
348 QStandardItem* child;
350 while (i++, child = item->child(i), child != NULL)
358 if ((searchString.length() == 0 || child->text() == searchString) &&
359 (userDataRole == 0 || child->data(userDataRole) == userData))
361 return child->index();
364 QModelIndex result =
getRowOfItem(child, searchString, userDataRole, userData);
366 if (result.isValid())
372 return QModelIndex();
378 this->iceManager = iceManager;
382 ui->paramEditor->setCommunicator(iceManager->getCommunicator());
391 for (
unsigned int i = 0; i < state->transitions.size(); i++)
393 TransitionIceBase& t = state->transitions[i];
395 if (!events.contains(QString(t.evt->eventName.c_str())))
397 events.push_back(QString(t.evt->eventName.c_str()));
407 QSettings settings(first, second);
414 int rows = settings.beginReadArray(
"TableWidget");
415 ui->paramEditor->setRowCount(rows);
417 for (
int i = 0; i < rows; i++)
419 settings.setArrayIndex(i);
420 int columns = settings.beginReadArray(
"Column");
421 ui->paramEditor->setColumnCount(columns);
423 for (
int j = 0; j < columns; j++)
425 settings.setArrayIndex(j);
429 ui->paramEditor->item(i, j)->setText(settings.value(
"Cell").toString());
434 QComboBox* tempBox =
new QComboBox;
435 int comboLength = settings.beginReadArray(
"ComboBox");
441 tempBox->insertItem(
index, settings.value(cell).toString());
444 ui->paramEditor->setCellWidget(i, j, tempBox);
455 QLineEdit* tempEdit =
new QLineEdit;
456 tempEdit->setText(settings.value(
"Cell").toString());
457 ui->paramEditor->setCellWidget(i, j, tempEdit);
470 QSettings settings(
"armarx",
"eventSender");
472 settings.beginWriteArray(
"ComboBox");
478 settings.beginWriteArray(
"TableWidget");
480 for (
int i = 0; i <
ui->paramEditor->rowCount(); i++)
482 settings.setArrayIndex(i);
483 settings.beginWriteArray(
"Column");
485 for (
int j = 0; j <
ui->paramEditor->columnCount(); j++)
487 settings.setArrayIndex(j);
491 settings.setValue(
"Cell",
ui->paramEditor->item(i, j)->text());
496 QComboBox* tempBox = qobject_cast<QComboBox*>(
ui->paramEditor->cellWidget(i, j));
497 settings.beginWriteArray(
"ComboBox");
501 settings.setArrayIndex(
index);
504 settings.setValue(cell, tempBox->itemText(
index));
512 QLineEdit* tempEdit = qobject_cast<QLineEdit*>(
ui->paramEditor->cellWidget(i, j));
513 settings.setValue(
"Cell", tempEdit->text());
527 std::vector<StateIceBasePtr> baseStateList;
528 std::vector<StateIceBasePtr> instanceStateList;
529 std::string stateSearchMask =
ui->edtStateSearchMask->text().toStdString();
530 std::vector<std::string> remoteStateOffererList =
531 iceManager->getIceGridSession()->getRegisteredObjectNames<RemoteStateOffererInterfacePrx>(
534 QStringList componentNames;
536 for (
unsigned int i = 0; i < remoteStateOffererList.size(); ++i)
538 componentNames << QString::fromStdString(remoteStateOffererList.at(i));
541 if (componentNames.size() == 0)
547 foreach (QString componentNameQStr, componentNames)
549 std::string componentName = componentNameQStr.trimmed().toStdString();
554 model->
updateModel(componentName, baseStateList, instanceStateList);
556 catch (Ice::NotRegisteredException& e)
558 ARMARX_WARNING <<
"The entered component with name '" << componentName
559 <<
"' was not found - maybe you forgot to start it?" <<
flush;
561 catch (IceUtil::NullHandleException& e)
563 ARMARX_ERROR <<
"IceUtil::NullHandleException: " << e.what()
564 <<
"\nFile: " << e.ice_file() << e.ice_line() <<
"\nBacktrace:\n"
565 << e.ice_stackTrace() <<
flush;
567 catch (armarx::UserException& e)
569 ARMARX_WARNING <<
"Found component but cannot communicate with component - probably it "
570 "is a component of another type\nreason: "
571 << e.reason <<
flush;
578 std::vector<StateIceBasePtr>& baseStateList,
579 std::vector<StateIceBasePtr>& instanceStateList)
581 RemoteStateOffererInterfacePrx statePrx;
582 statePrx = iceManager->getProxy<armarx::RemoteStateOffererInterfacePrx>(componentName);
590 Ice::StringSeq availableStates = statePrx->getAvailableStates();
591 baseStateList.clear();
593 for (
unsigned int i = 0; i < availableStates.size(); ++i)
595 baseStateList.push_back(statePrx->getStatechart(availableStates[i]));
598 StateIdNameMap availableStateInstances = statePrx->getAvailableStateInstances();
599 instanceStateList.clear();
600 StateIdNameMap::iterator it = availableStateInstances.begin();
602 for (; it != availableStateInstances.end(); ++it)
604 instanceStateList.push_back(statePrx->getStatechartInstance(it->first));
612 QModelIndex modelIndex = treeBox->view()->currentIndex();
614 std::string globalStateId =
616 std::string componentName =
623 ui->CBEvent->clear();
624 ui->edtSelectedState->setText(
"");
628 StateIceBasePtr statePtr = model->
getState(componentName, globalStateId);
632 ARMARX_WARNING <<
"Could not find state with id " << globalStateId <<
" of component '"
633 << componentName <<
"'" <<
flush;
637 ui->edtSelectedState->setText(globalStateId.c_str());
638 ui->CBEvent->clear();
640 ui->CBEvent->addItems(eventList);
646 QObject::connect(
ui->buttonBox, SIGNAL(accepted()),
this, SLOT(accept()));
647 QObject::connect(
ui->buttonBox, SIGNAL(rejected()),
this, SLOT(reject()));
650 treeBox =
new TreeBox(model,
true,
this);
651 ui->gridLayout->addWidget(treeBox, 3, 4, 1, 1);
654 ui->paramEditor->setDefaultValueState(Qt::Checked);
676 connect(
ui->addRowButton, SIGNAL(clicked()),
ui->paramEditor, SLOT(addParameterRow()));
677 connect(
ui->sendButton, SIGNAL(clicked()),
this, SLOT(
send()));
681 connect(treeBox, SIGNAL(currentIndexChanged(
int)),
this, SLOT(
stateSelected(
int)));
682 ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(
true);
689 QModelIndex
index = treeBox->view()->currentIndex();
696 QModelIndex
index = treeBox->view()->currentIndex();