53 qRegisterMetaType<statechartmodel::TransitionCPtr>(
"TransitionCPtr");
54 qRegisterMetaType<statechartmodel::StateInstancePtr>(
"StateInstancePtr");
81 ARMARX_DEBUG << tempList.size() <<
" new subscriptions received";
82 for (
auto& elem : tempList)
84 StateIceBasePtr iceState = elem.first;
86 StateItem* stateItem = elem.second.second;
87 StateListenerDataMap::iterator it;
90 it =
stateMap.find(iceState->globalStateIdentifier);
91 if (it !=
stateMap.end() && state && it->second.states.count(state) > 0)
95 if (it !=
stateMap.end() && stateItem && it->second.stateItems.count(stateItem) > 0)
100 ARMARX_VERBOSE <<
"subscribing : " << iceState->globalStateIdentifier;
109 data.iceState = iceState;
112 data.states.insert(state);
116 data.stateItems.insert(stateItem);
141 ARMARX_WARNING <<
"State NULL: " << iceState->globalStateIdentifier;
145 subscriptionQueue.push_back(std::make_pair(iceState, std::make_pair(state, item)));
155 for (
auto item : pair.second.stateItems)
159 pair.second.stateItems.erase(state);
178 ARMARX_WARNING <<
"State NULL: " << iceState->globalStateIdentifier;
188 const std::string paramMapType)
const
193 for (
const auto& stateData :
stateMap)
195 if (stateData.second.states.count(state))
199 for (
auto& entry : stateData.second.parameters.at(paramMapType))
201 map.
addElement(entry.first, entry.second->value);
217 const std::string paramMapType)
const
222 for (
const auto& stateData :
stateMap)
224 if (stateData.second.states.count(state))
228 << stateData.second.iceState->globalStateIdentifier;
230 auto it = stateData.second.parameters.find(paramMapType);
231 if (it == stateData.second.parameters.end())
234 for (
auto& e : stateData.second.parameters)
236 s << e.first <<
", ";
238 throw LocalException()
239 <<
"could not find " << paramMapType <<
" available: " <<
s.str();
264 if (globalIdString.find(
"->") == std::string::npos)
266 return globalIdString;
268 return globalIdString.substr(globalIdString.find_last_of(
"->") + 1);
274 return "StateWatcher";
291 std::string stateIdentifier =
event.parentName;
292 if (event.functionName !=
296 auto it =
stateMap.find(stateIdentifier);
299 ARMARX_VERBOSE <<
"Could not find state with id " << stateIdentifier;
303 for (
auto& state :
data.states)
307 QMetaObject::invokeMethod(state.get(),
335 ARMARX_DEBUG <<
"Got event reported for active state changed: "
336 <<
event.parentStateIdentifier;
337 auto it =
stateMap.find(event.parentStateIdentifier);
341 <<
event.parentStateIdentifier;
347 auto activeSubstate = state->getActiveSubstate();
352 std::string activeSubstateName =
ExtractStateName(event.targetStateIdentifier);
353 if (!activeSubstateName.empty())
356 state->getSubstates().find(QString::fromStdString(activeSubstateName));
357 if (it != state->getSubstates().end())
362 ARMARX_DEBUG <<
"Invoking setActive for " << activeSubstateName;
363 QMetaObject::invokeMethod(
372 ARMARX_INFO <<
"could not find state " << activeSubstateName;
377 QMetaObject::invokeMethod(state.get(),
383 for (
auto item :
data.stateItems)
385 std::string activeSubstateName =
ExtractStateName(event.targetStateIdentifier);
386 QMetaObject::invokeMethod(
389 Q_ARG(QString, QString::fromStdString(activeSubstateName)));
396 auto it =
stateMap.find(event.parentStateIdentifier);
400 <<
event.parentStateIdentifier;
408 std::string eventName =
event.eventName;
409 std::string sourceStateName =
ExtractStateName(event.sourceStateIdentifier);
410 std::string destinationStateName =
413 if (state && !eventName.empty() && !destinationStateName.empty())
416 state->findTransition(QString::fromStdString(eventName),
417 QString::fromStdString(sourceStateName),
418 QString::fromStdString(destinationStateName)))
420 ARMARX_DEBUG <<
"Invoking transition highlight for " << eventName
421 <<
" from " << sourceStateName <<
" to "
422 << destinationStateName;
423 QMetaObject::invokeMethod(state.get(),
424 "setTransitionActivated",
429 auto ct = cstate->getStartTransition();
430 if (ct && eventName ==
"InitialTransition")
432 ARMARX_DEBUG <<
"Invoking inital transition highlight for "
433 << state->getStateName();
434 QMetaObject::invokeMethod(
436 "setTransitionActivated",
442 <<
" for highlighting "
443 << QString::fromStdString(sourceStateName) <<
" -> "
444 << QString::fromStdString(destinationStateName);
449 for (
auto item :
data.stateItems)
451 QString eventName = QString::fromStdString(event.eventName);
452 QString sourceStateName =
454 QString destinationStateName =
456 if (item && !eventName.isEmpty() && !destinationStateName.isEmpty())
458 for (
auto t : item->getTransitionItems())
461 item->getStateInstance()->getStateClass();
462 if ((t->getTransition()->eventName == eventName &&
463 t->getTransition()->sourceState->getInstanceName() ==
466 t->getTransition() == stateclass->getStartTransition() &&
467 eventName ==
"InitialTransition"))
469 QMetaObject::invokeMethod(
470 t,
"highlightAnimation", Q_ARG(
int, 10000));
480 ARMARX_DEBUG <<
"updating state " <<
event.parentStateIdentifier <<
" failed";
490 stateMap[
event.stateIdentifier].parameters[
"inputParameters"] =
event.parameterMap;
499 stateMap[
event.stateIdentifier].parameters[
"localParameters"] =
event.parameterMap;
508 stateMap[
event.stateIdentifier].parameters[
"outputParameters"] =
event.parameterMap;
528 const Ice::Current&
c)
530 for (
auto& elem :
data)
538 const Ice::Current&
c)
540 for (
auto& elem :
data)
548 const Ice::Current&
c)
550 for (
auto& elem :
data)
558 const Ice::Current&
c)
560 for (
auto& elem :
data)