33 const QSize TermNode::LiteralNodeSize(50, 50);
34 const QSize TermNode::ExpressionNodeSize(30, 30);
35 const QSize TermNode::ConditionRootNodeSize(50, 50);
38 QTableWidget* checksTable,
42 ConditionHandlerInterfacePrx handler) :
43 TreeNode(scene), conditionId(conditionId), manager(manager), handler(handler)
46 this->checksTable = checksTable;
52 switch (term->getType())
57 graphicsItem->setPixmap(QPixmap(
":/icons/arrow-right.png"));
65 graphicsItem->setText(
66 OperationPtr::dynamicCast(term)->getOperationString().c_str());
73 graphicsItem->setPixmap(QPixmap(
":/icons/wave.png"));
85 graphicsItem->setToolTip(ss.str().c_str());
90 graphicsItem->setColor(Qt::green);
94 graphicsItem->setColor(Qt::red);
99 scene->addItem(graphicsItem);
100 graphicsItem->hide();
103 if (checksTable && (term->getType() == eLiteral))
105 updateChecksTable(term);
119 graphicsItem->setRect(boundingBox);
120 graphicsItem->show();
132 std::unique_lock lock(dataMutex);
137 VariantPtr var = VariantPtr::dynamicCast(curDatafield->getDataField());
138 auto valueString = var->getOutputValueOnly();
139 return QString::fromStdString(valueString);
141 catch (std::exception& e)
145 return "Retrieval Failed";
157 std::unique_lock lock(dataMutex);
161 QTableWidgetItem* item =
new QTableWidgetItem(
"true");
162 item->setBackground(Qt::green);
163 checksTable->setItem(literalRow,
eStateCol, item);
164 graphicsItem->setColor(Qt::green);
168 QTableWidgetItem* item =
new QTableWidgetItem(
"false");
169 item->setBackground(Qt::red);
170 checksTable->setItem(literalRow,
eStateCol, item);
171 graphicsItem->setColor(Qt::red);
178 std::unique_lock lock(dataMutex);
181 CheckConfiguration config = literal->getCheckConfiguration();
184 checksTable->insertRow(checksTable->rowCount());
185 literalRow = checksTable->rowCount() - 1;
189 DataFieldIdentifierPtr::dynamicCast(config.dataFieldIdentifier);
191 if (dataFieldIdentifier)
193 literaldatafieldName = dataFieldIdentifier->getIdentifierStr().c_str();
194 checksTable->setItem(
197 new QTableWidgetItem(dataFieldIdentifier->getIdentifierStr().c_str()));
198 ObserverInterfacePrx prx =
199 manager->getProxy<ObserverInterfacePrx>(dataFieldIdentifier->getObserverName());
203 if (prx->existsChannel(dataFieldIdentifier->channelName))
206 prx, dataFieldIdentifier->channelName, dataFieldIdentifier->datafieldName);
209 catch (std::exception& e)
217 checksTable->setItem(literalRow,
eDataFieldCol,
new QTableWidgetItem(
"NULL"));
218 literaldatafieldName =
"";
221 ARMARX_INFO <<
"updating " << dataFieldIdentifier->getIdentifierStr();
224 checksTable->setItem(
225 literalRow,
eCheckTypeCol,
new QTableWidgetItem(config.checkName.c_str()));
228 ParameterList::iterator iter = config.checkParameters.begin();
229 std::stringstream parameters;
231 while (iter != config.checkParameters.end())
233 VariantPtr var = VariantPtr::dynamicCast(*iter);
234 parameters << var <<
", ";
238 checksTable->setItem(
239 literalRow,
eParametersCol,
new QTableWidgetItem(parameters.str().c_str()));
247 connect(
this, SIGNAL(
literalClicked(
int)), checksTable, SLOT(selectRow(
int)));
254 checksTable->resizeColumnsToContents();
262 std::unique_lock lock(dataMutex);
263 truthy = curDatafield && literaldatafieldName ==
264 curDatafield->getDataFieldIdentifier()->getIdentifierStr();
277 if (term->getType() == eLiteral)
286 QList<QTableWidgetItem*> selectedItems = checksTable->selectedItems();
288 int size = selectedItems.size();
292 QTableWidgetItem* widget = selectedItems.front();
293 int row = checksTable->row(widget);
295 if (row == literalRow)
297 scene->resetActivation();
298 graphicsItem->activateNodeSilent();
306 std::unique_lock lock(dataMutex);
307 checksTable->setItem(literalRow,
eCurrentValueCol,
new QTableWidgetItem(valueString));
The DatafieldRef class is similar to the ChannelRef, but points to a specific Datafield instead of to...
QString getDatafieldValue()
void drawNode(QRectF boundingBox) override
Draws the node.
void newValueString(QString newValue)
void graphicsItemClicked()
void checksTableSelectionChanged()
void newLiteralValue(bool truthy)
void setTermEvaluationState(TermImplPtr term)
void updateValueString(const QString &valueString)
void drawEdge(QLineF line) override
Draws an edge to this node.
TermNode(TermTreeGraphicsScene *scene, QTableWidget *checksTable, TermImplPtr term, int conditionId, IceManagerPtr manager, ConditionHandlerInterfacePrx handler)
void setSize(QSize nodeSize)
Sets size of node.
virtual void drawEdge(QLineF line)
Draws an edge to this node.
TreeNode(QGraphicsScene *scene, QSize nodeSize=TreeNode::DefaultNodeSize)
Constructs a tree node as part of a Qt visualizable tree.
#define ARMARX_INFO
The normal logging level.
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceInternal::Handle< Variant > VariantPtr
IceInternal::Handle< TermImpl > TermImplPtr
Typedef of TermImplPtr as IceInternal::Handle<TermImpl> for convenience.
IceUtil::Handle< IceManager > IceManagerPtr
IceManager smart pointer.
IceInternal::Handle< DataFieldIdentifier > DataFieldIdentifierPtr
Typedef of DataFieldIdentifierPtr as IceInternal::Handle<DataFieldIdentifier> for convenience.
IceInternal::Handle< LiteralImpl > LiteralImplPtr
Typedef of LiteralImplPtr as IceInternal::Handle<LiteralImpl> for convenience.