30 #include <ArmarXCore/interface/observers/ConditionHandlerInterface.h>
40 QStandardItemModel(0, 1), iceManager(iceManager), info(info)
49 const ChannelRegistry& channels,
50 const StringConditionCheckMap& checks)
53 channelRegistry[observerName] = channels;
54 availableChecks[observerName] = checks;
58 markAllForDelete(invisibleRootItem());
61 QStandardItem* observerItem = updateObserver(observerName);
64 updateChannels(getChildByName(observerItem,
"channels"), channels);
67 updateChecks(getChildByName(observerItem,
"checks"), checks);
73 deleteUnusedItems(observerItem);
79 QStandardItem* item = itemFromIndex(
index);
96 QString channelName =
id.toString();
97 QString observerName = item->parent()->parent()->data(
OBSERVER_ITEM_ID).toString();
98 ChannelRegistryEntry& entry =
99 channelRegistry[observerName.toLatin1().data()][channelName.toLatin1().data()];
103 observerName.toLatin1().data(),
117 <<
"No channel registry for name '" << dataFieldIdentifier.
getObserverName()
119 <<
"Available names:\n"
121 ChannelRegistry& chanReg =
126 <<
"' has no channel '" << dataFieldIdentifier.
getChannelName() <<
"' "
127 <<
"Available channels:\n"
129 ChannelRegistryEntry& chanRegEntry =
138 DataFieldRegistryEntry& entry =
144 (!entry.value->data || entry.value->data->ice_id() ==
"::armarx::VariantData"))
146 ARMARX_INFO <<
"Variant Factory for " << entry.typeName
147 <<
" is missing - trying to load lib now";
148 auto lib = info->loadLibraryOfVariant(entry.typeName);
151 widget =
new QWidget(parent);
155 iceManager->getCommunicator());
156 entry.value = ref->getDataField();
160 VariantPtr::dynamicCast(entry.value),
169 QString checkName =
id.toString();
170 QString observerName = item->parent()->parent()->data(
OBSERVER_ITEM_ID).toString();
171 ConditionCheckBasePtr check =
172 availableChecks[observerName.toLatin1().data()][checkName.toLatin1().data()];
176 check, checkName.toLatin1().data(),
true,
false,
false, parent);
210 widget =
new QWidget(parent);
229 ConditionHandlerInterfacePrx handler =
230 iceManager->getProxy<ConditionHandlerInterfacePrx>(
"ConditionHandler");
234 ObserverList registeredObs = handler->getObserverNames();
235 list = registeredObs;
244 iceManager->getIceGridSession()->getRegisteredObjectNames<ObserverInterfacePrx>(
246 list.insert(
list.end(), globalList.begin(), globalList.end());
247 std::sort(
list.begin(),
list.end());
248 ObserverList::iterator it = std::unique(
list.begin(),
list.end());
263 ObserverList::iterator iter = observerList.begin();
265 while (iter != observerList.end())
267 ObserverInterfacePrx proxy;
270 proxy = iceManager->getProxy<ObserverInterfacePrx>(*iter);
273 proxy->getAvailableChannels(
true),
274 proxy->getAvailableChecks());
280 iceManager->removeProxyFromCache(proxy);
289 ObserverItemModel::updateObserver(std::string observerName)
292 QStandardItem* observerItem =
new QStandardItem(QString(observerName.c_str()));
295 observerItem = updateOrInsertItem(invisibleRootItem(), observerItem);
298 QStandardItem* channelsItem =
new QStandardItem(QString(
"channels"));
301 updateOrInsertItem(observerItem, channelsItem);
304 QStandardItem* checksItem =
new QStandardItem(QString(
"checks"));
307 updateOrInsertItem(observerItem, checksItem);
319 ObserverItemModel::updateChannels(QStandardItem* channelsItem,
const ChannelRegistry& channels)
327 ChannelRegistry::const_iterator iterChannels = channels.begin();
329 while (iterChannels != channels.end())
332 QStandardItem* channelItem =
333 new QStandardItem(QString(iterChannels->second.name.c_str()));
336 channelItem->setData(QVariant(iterChannels->second.name.c_str()),
OBSERVER_ITEM_ID);
339 channelItem = updateOrInsertItem(channelsItem, channelItem);
342 DataFieldRegistry::const_iterator iterDataFields =
343 iterChannels->second.dataFields.begin();
345 while (iterDataFields != iterChannels->second.dataFields.end())
348 std::string datafieldName =
349 iterDataFields->second.identifier->channelRef->observerName +
"." +
350 iterDataFields->second.identifier->channelRef->channelName +
"." +
351 iterDataFields->second.identifier->datafieldName;
352 QStandardItem* dataFieldItem =
new QStandardItem(
353 QString(iterDataFields->second.identifier->datafieldName.c_str()));
358 updateOrInsertItem(channelItem, dataFieldItem);
367 ObserverItemModel::updateChecks(QStandardItem* checksItem,
368 const StringConditionCheckMap& checks)
375 StringConditionCheckMap::const_iterator iterChecks = checks.begin();
377 while (iterChecks != checks.end())
379 QStandardItem* checkItem =
new QStandardItem(QString(iterChecks->first.c_str()));
383 updateOrInsertItem(checksItem, checkItem);
424 ObserverItemModel::updateOrInsertItem(QStandardItem* parent, QStandardItem*
insert)
427 for (
int r = 0; r < parent->rowCount(); r++)
429 QStandardItem* item = parent->child(r);
439 parent->appendRow(
insert);
446 ObserverItemModel::getChildByName(QStandardItem* item,
const QString& name)
448 for (
int r = 0; r < item->rowCount(); r++)
452 return item->child(r);
461 ObserverItemModel::markAllForDelete(QStandardItem* observerItem)
464 std::list<QStandardItem*> markList;
465 markList.push_back(observerItem);
467 while (markList.size() > 0)
469 QStandardItem* current = markList.front();
470 markList.pop_front();
474 if (current->hasChildren())
476 for (
int r = 0; r < current->rowCount(); r++)
478 markList.push_back(current->child(r));
485 ObserverItemModel::deleteUnusedItems(QStandardItem* observerItem)
487 std::list<QStandardItem*> searchList;
488 std::vector<int> removeRows;
490 searchList.push_back(observerItem);
492 while (searchList.size() > 0)
494 QStandardItem* current = searchList.back();
495 searchList.pop_back();
503 if (current->hasChildren())
507 for (
int r = 0; r < current->rowCount(); r++)
512 removeRows.push_back(r);
517 searchList.push_back(current->child(r));
522 std::vector<int>::reverse_iterator iter = removeRows.rbegin();
524 while (iter != removeRows.rend())
526 current->removeRow(*iter);