16 class DataLinkItem(Item.Item):
17 def __init__(self,pin,pout):
18 Item.Item.__init__(self)
21 self.label= pout.getNode().getName()+":"+pout.getName()+"->"+pin.getNode().getName()+":"+pin.getName()
23 def getIconName(self):
26 class StreamLinkItem(Item.Item):
27 def __init__(self,pin,pout):
28 Item.Item.__init__(self)
31 self.label= pout.getNode().getName()+":"+pout.getName()+"->"+pin.getNode().getName()+":"+pin.getName()
33 def getIconName(self):
34 return "streamlink.png"
36 class ControlLinkItem(Item.Item):
37 def __init__(self,nodeup,nodedown):
38 Item.Item.__init__(self)
39 self.nodedown=nodedown
41 self.label= nodeup.getName()+"->"+nodedown.getName()
43 def getIconName(self):
44 return "controllink.png"
46 class ControlLinksItem(Item.Item):
47 """Item for all control links of a composed node"""
48 def __init__(self,item):
49 Item.Item.__init__(self)
51 self.label="Control Links"
53 def getIconName(self):
55 def isExpandable(self):
58 def getChildren(self):
60 for n in self.item.node.edGetDirectDescendants():
61 for p in n.getOutNodes():
62 sublist.append(ControlLinkItem(n,p))
65 def addLink(self,link):
66 CONNECTOR.Emit(self,"add",link)
68 class DataLinksItem(Item.Item):
69 """Item for all data links of a composed node"""
70 def __init__(self,item):
71 Item.Item.__init__(self)
73 self.label="Data Links"
75 def getIconName(self):
77 def isExpandable(self):
80 def getChildren(self):
82 for pout,pin in self.item.node.getSetOfInternalLinks():
83 if pout.getNode().getFather() != self.item.node and pin.getNode().getFather() != self.item.node:
85 if isinstance(pin,pilot_InputDataStreamPort):
86 sublist.append(StreamLinkItem(pin,pout))
88 sublist.append(DataLinkItem(pin,pout))
89 #for pout,pin in self.item.node.getSetOfLinksLeavingCurrentScope():
90 # sublist.append(DataLinkItem(pin,pout))
91 #for pin,pout in self.item.node.getSetOfLinksComingInCurrentScope():
92 # sublist.append(DataLinkItem(pin,pout))
95 def addLink(self,link):
96 CONNECTOR.Emit(self,"add",link)
98 class ItemComposedNode(Item.Item):
99 """Item pour les noeuds composes"""
101 def __init__(self,node):
102 #node is an instance of YACS::ENGINE::ComposedNode
103 Item.Item.__init__(self)
106 self.label=node.getName()
107 self.datalinks=DataLinksItem(self)
108 self.controllinks=ControlLinksItem(self)
110 def isExpandable(self):
113 def getChildren(self):
114 #liste des noeuds fils
115 liste=self.node.edGetDirectDescendants()
116 #On les adapte en item avant de les retourner
120 sublist.append(Item.adapt(n))
123 #traceback.print_exc()
125 sublist.append(self.datalinks)
126 sublist.append(self.controllinks)
129 def dblselected(self):
130 #print "ItemComposedNode dblselected"
131 root=self.node.getRootNode()
132 rootItem=Item.adapt(root)
133 if not self.emitting:
135 CONNECTOR.Emit(rootItem,"dblselected",self)
139 #print "ItemComposedNode selected"
140 root=self.node.getRootNode()
141 rootItem=Item.adapt(root)
142 if not self.emitting:
144 CONNECTOR.Emit(rootItem,"selected",self)
147 def getIconName(self):
150 def panel(self,parent):
151 """Retourne un tab widget pour browser/editer la proc"""
152 tabWidget = QTabWidget( parent )
153 for name,method in self.panels:
154 tabWidget.addTab( method(self,tabWidget), name )
157 def addNode(self,service):
158 print "Composed.addNode",service
159 #add node service in the parent self which is a ComposedNode
160 new_node=service.clone(None)
161 ItemComposedNode.n=ItemComposedNode.n+1
162 name=service.getName()+"_%d" % ItemComposedNode.n
163 new_node.setName(name)
164 self.node.edAddChild(new_node)
165 item=Item.adapt(new_node)
166 CONNECTOR.Emit(self,"add",item)
168 def panel1(self,parent):
170 self.graph=graph.Graph(self,qvbox)
173 def layout(self,rankdir):
175 self.graph.layout(rankdir)
177 panels=[("Panel1",panel1)]
179 def addLink(self,link):
180 print "Composed.addLink",link
181 if isinstance(link,DataLinkItem):
182 self.datalinks.addLink(link)
183 elif isinstance(link,StreamLinkItem):
184 self.datalinks.addLink(link)
186 self.controllinks.addLink(link)
189 class ItemForLoop(ItemComposedNode):
190 def box(self,parent):
191 return panels.PanelForLoop(parent,self)
193 def addNode(self,service):
194 new_node=service.clone(None)
195 ItemComposedNode.n=ItemComposedNode.n+1
196 name=service.getName()+"_%d" % ItemComposedNode.n
197 new_node.setName(name)
198 #replace the old node (if it exists) with the new one
199 nodes=self.node.edGetDirectDescendants()
201 old_item=Item.adapt(nodes[0])
202 CONNECTOR.Emit(old_item,"remove")
203 self.node.edSetNode(new_node)
204 item=Item.adapt(new_node)
205 CONNECTOR.Emit(self,"add",item)
206 CONNECTOR.Emit(self,"changed")
208 class ItemWhile(ItemForLoop):
211 class ItemForEach(ItemForLoop):
214 class ItemSwitch(ItemComposedNode):
215 def addNode(self,service):
218 class ItemProc(ItemComposedNode):
219 """Item pour la procedure"""
220 def connecting(self,item):
221 print "ItemProc.connecting",item
222 self._connecting=item
224 class ItemPort(Item.Item):
225 """Item pour les ports """
227 def __init__(self,port,root=None):
228 Item.Item.__init__(self)
230 self.label=port.getName()
233 elif self.port.getNode().getFather():
234 root=self.port.getNode().getRootNode()
235 self.root=Item.adapt(root)
240 #print "ItemPort selected"
243 if not self.emitting:
245 CONNECTOR.Emit(self.root,"selected",self)
248 def getIconName(self):
251 def panel(self,parent):
252 """Retourne un tab widget pour browser/editer l'item"""
253 tabWidget = QTabWidget( parent )
254 for name,method in self.panels:
255 tabWidget.addTab( method(self,tabWidget), name )
259 def link(self,other):
260 print "ItemPort.link:",self,other
263 print "ItemPort.connect:"
264 self.root.connecting(self)
266 class ItemInPort(ItemPort):
267 def getIconName(self):
270 def panel1(self,parent):
271 return panels.PanelInPort(parent,self)
273 panels=[("Panel1",panel1)]
275 class ItemOutPort(ItemPort):
276 def getIconName(self):
279 def panel1(self,parent):
280 return panels.PanelOutPort(parent,self)
282 panels=[("Panel1",panel1)]
284 def link(self,other):
285 nodeS=self.port.getNode()
286 nodeE=other.port.getNode()
287 father=nodeS.getFather()
288 if father != nodeE.getFather():
289 #not same father : do nothing for the moment
292 #cflink=nodeS.getOutGate().isAlreadyInSet(nodeE.getInGate())
293 cflink= nodeE.getInGate() in nodeS.getOutGate().edSetInGate()
294 father.edAddDFLink(self.port,other.port)
295 l=DataLinkItem(other.port,self.port)
296 fitem=Item.adapt(father)
299 #add also a control flow link
300 fitem.addLink(ControlLinkItem(nodeS,nodeE))
301 except ValueError,ex:
302 traceback.print_exc()
303 QMessageBox.warning(None,"YACS error",str(ex))
306 class ItemInStream(ItemPort):
307 def getIconName(self):
308 return "instream.png"
310 class ItemOutStream(ItemPort):
311 def getIconName(self):
312 return "outstream.png"
314 def link(self,other):
315 father=self.port.getNode().getFather()
316 if father != other.port.getNode().getFather():
317 #not same father : not for the moment
320 father.edAddLink(self.port,other.port)
321 l=StreamLinkItem(other.port,self.port)
322 fitem=Item.adapt(father)
324 except ValueError,ex:
325 traceback.print_exc()
326 QMessageBox.warning(None,"YACS error",str(ex))
329 class ItemInGate(ItemPort):
330 """Item for InGate"""
331 def __init__(self,port):
332 Item.Item.__init__(self)
334 class ItemOutGate(ItemPort):
335 """Item for OutGate"""
336 def __init__(self,port):
337 Item.Item.__init__(self)
340 class ItemNode(Item.Item):
341 """Item pour les noeuds elementaires
344 #attr donnant la liste des panels du noeud (nom,method)
346 def __init__(self,node):
347 Item.Item.__init__(self)
349 self.label=node.getName()
350 self.father=Item.adapt(node.getFather())
353 #print "ItemNode selected"
354 root=self.node.getRootNode()
355 rootItem=Item.adapt(root)
356 if not self.emitting:
358 #for those that have subscribed to item level
359 CONNECTOR.Emit(self,"selected",self)
360 #for those that have subscribed to rootItem level
361 CONNECTOR.Emit(rootItem,"selected",self)
364 def isExpandable(self):
367 def getChildren(self):
369 for n in self.node.getSetOfInputPort():
370 sublist.append(Item.adapt(n))
371 for n in self.node.getSetOfOutputPort():
372 sublist.append(Item.adapt(n))
373 for n in self.node.getSetOfInputDataStreamPort():
374 sublist.append(Item.adapt(n))
375 for n in self.node.getSetOfOutputDataStreamPort():
376 sublist.append(Item.adapt(n))
379 def panel(self,parent):
380 """Retourne un tab widget pour browser/editer l'item"""
381 tabWidget = QTabWidget( parent )
382 for name,method in self.panels:
383 tabWidget.addTab( method(self,tabWidget), name )
387 class ItemScriptNode(ItemNode):
389 def panel1(self,parent):
390 return panels.PanelScript(parent,self)
392 panels=[("Panel1",panel1)]
394 def getIconName(self):
397 class ItemFuncNode(ItemNode):
398 def panel1(self,parent):
399 return panels.PanelFunc(parent,self)
401 panels=[("Panel1",panel1)]
403 def getIconName(self):
406 def FuncChanged(self, newText ):
407 self.myFunc=str(newText)
409 class ItemService(ItemNode):
410 def panel1(self,parent):
411 """Retourne un widget pour browser/editer l'item"""
412 self.myName=self.node.getName()
415 qvbox.layout().setAlignment(Qt.AlignTop|Qt.AlignLeft)
416 qvbox.setSpacing( 5 )
419 label=QLabel("Name: ",row0)
420 self.lined0 = QLineEdit(self.node.getName(),row0)
421 qvbox.connect( self.lined0, SIGNAL("textChanged(const QString &)"), self.NameChanged )
422 qvbox.connect( self.lined0, SIGNAL("returnPressed()"), self.NameReturn )
423 QToolTip.add( self.lined0, "Node name" )
426 label1=QLabel("Ref: ",row1)
427 self.lined1 = QLineEdit(row1)
428 if self.node.getComponent():
429 self.lined1.setText(self.node.getComponent().getName())
431 self.lined1.setText("NO_COMPONENT_NAME")
434 label2=QLabel("Method: ",row2)
435 self.lined2 = QLineEdit(row2)
436 self.lined2.setText(self.node.getMethod())
439 but1=QPushButton( "Save", row3 )
440 but2=QPushButton( "Cancel", row3 )
441 qvbox.connect( but1, SIGNAL("clicked()"), self.handleSave )
442 qvbox.connect( but2, SIGNAL("clicked()"), self.handleCancel )
446 panels=[("Panel1",panel1)]
448 def NameChanged(self, newText ):
449 self.myName=str(newText)
451 def NameReturn(self):
454 def getIconName(self):
455 return "green-square"
457 def handleSave(self):
458 self.node.setRef(str(self.lined1.text()))
459 self.node.setMethod(str(self.lined2.text()))
460 def handleCancel(self):
461 self.lined0.setText(self.node.getName())
462 self.lined1.setText(self.node.getComponent().getName())
463 self.lined2.setText(self.node.getMethod())
465 def adapt_Proc_to_Item(obj, protocol, alternate):
468 def adapt_Node_to_Item(obj, protocol, alternate):
471 def adapt_ComposedNode_to_Item(obj, protocol, alternate):
472 return ItemComposedNode(obj)
474 def adapt_ForLoop_to_Item(obj, protocol, alternate):
475 return ItemForLoop(obj)
477 def adapt_Switch_to_Item(obj, protocol, alternate):
478 return ItemSwitch(obj)
480 def adapt_While_to_Item(obj, protocol, alternate):
481 return ItemWhile(obj)
483 def adapt_ForEach_to_Item(obj, protocol, alternate):
484 return ItemForEach(obj)
486 def adapt_InlineFuncNode_to_Item(obj, protocol, alternate):
487 return ItemFuncNode(obj)
489 def adapt_InlineScriptNode_to_Item(obj, protocol, alternate):
490 return ItemScriptNode(obj)
492 def adapt_ServiceNode_to_Item(obj, protocol, alternate):
493 return ItemService(obj)
495 def adapt_Port_to_Item(obj, protocol, alternate):
498 def adapt_InPort_to_Item(obj, protocol, alternate):
499 return ItemInPort(obj)
501 def adapt_OutPort_to_Item(obj, protocol, alternate):
502 return ItemOutPort(obj)
504 def adapt_InStream_to_Item(obj, protocol, alternate):
505 return ItemInStream(obj)
507 def adapt_OutStream_to_Item(obj, protocol, alternate):
508 return ItemOutStream(obj)
510 def adapt_InGate_to_Item(obj, protocol, alternate):
511 return ItemInGate(obj)
513 def adapt_OutGate_to_Item(obj, protocol, alternate):
514 return ItemOutGate(obj)
516 if hasattr(pilot,"ProcPtr"):
518 adapt.registerAdapterFactory(pilot.ProcPtr, Item.Item, adapt_Proc_to_Item)
519 adapt.registerAdapterFactory(pilot.BlocPtr, Item.Item, adapt_ComposedNode_to_Item)
520 adapt.registerAdapterFactory(pilot.ForLoopPtr, Item.Item, adapt_ComposedNode_to_Item)
521 adapt.registerAdapterFactory(pilot.WhileLoopPtr, Item.Item, adapt_ComposedNode_to_Item)
522 adapt.registerAdapterFactory(pilot.ForEachLoopPtr, Item.Item, adapt_ComposedNode_to_Item)
523 adapt.registerAdapterFactory(pilot.SwitchPtr, Item.Item, adapt_ComposedNode_to_Item)
524 adapt.registerAdapterFactory(pilot.ComposedNodePtr, Item.Item, adapt_ComposedNode_to_Item)
526 adapt.registerAdapterFactory(pilot.ServiceNodePtr, Item.Item, adapt_ServiceNode_to_Item)
527 #adapt.registerAdapterFactory(pilot.ServiceNodeNodePtr, Item.Item, adapt_Node_to_Item)
528 adapt.registerAdapterFactory(pilot.InlineNodePtr, Item.Item, adapt_InlineScriptNode_to_Item)
529 adapt.registerAdapterFactory(pilot.InlineFuncNodePtr, Item.Item, adapt_InlineFuncNode_to_Item)
530 adapt.registerAdapterFactory(pilot.NodePtr, Item.Item, adapt_Node_to_Item)
532 adapt.registerAdapterFactory(pilot.OutputPortPtr, Item.Item, adapt_OutPort_to_Item)
533 adapt.registerAdapterFactory(pilot.InputPortPtr, Item.Item, adapt_InPort_to_Item)
534 adapt.registerAdapterFactory(pilot.OutputDataStreamPortPtr, Item.Item, adapt_OutStream_to_Item)
535 adapt.registerAdapterFactory(pilot.InputDataStreamPortPtr, Item.Item, adapt_InStream_to_Item)
537 pilot_InputDataStreamPort=pilot.InputDataStreamPortPtr
541 adapt.registerAdapterFactory(pilot.Proc, Item.Item, adapt_Proc_to_Item)
542 adapt.registerAdapterFactory(SALOMERuntime.SalomeProc, Item.Item, adapt_Proc_to_Item)
543 adapt.registerAdapterFactory(pilot.Bloc, Item.Item, adapt_ComposedNode_to_Item)
544 adapt.registerAdapterFactory(pilot.ForLoop, Item.Item, adapt_ForLoop_to_Item)
546 adapt.registerAdapterFactory(pilot.WhileLoop, Item.Item, adapt_While_to_Item)
547 adapt.registerAdapterFactory(pilot.ForEachLoop, Item.Item, adapt_ForEach_to_Item)
548 adapt.registerAdapterFactory(pilot.Switch, Item.Item, adapt_Switch_to_Item)
549 adapt.registerAdapterFactory(pilot.ComposedNode, Item.Item, adapt_ComposedNode_to_Item)
551 adapt.registerAdapterFactory(pilot.ServiceNode, Item.Item, adapt_ServiceNode_to_Item)
552 adapt.registerAdapterFactory(SALOMERuntime.CORBANode, Item.Item, adapt_ServiceNode_to_Item)
553 adapt.registerAdapterFactory(SALOMERuntime.SalomeNode, Item.Item, adapt_ServiceNode_to_Item)
554 #adapt.registerAdapterFactory(pilot.ServiceNodeNode, Item.Item, adapt_Node_to_Item)
555 adapt.registerAdapterFactory(pilot.InlineNode, Item.Item, adapt_InlineScriptNode_to_Item)
556 adapt.registerAdapterFactory(SALOMERuntime.PythonNode, Item.Item, adapt_InlineScriptNode_to_Item)
557 adapt.registerAdapterFactory(pilot.InlineFuncNode, Item.Item, adapt_InlineFuncNode_to_Item)
558 adapt.registerAdapterFactory(SALOMERuntime.PyFuncNode, Item.Item, adapt_InlineFuncNode_to_Item)
559 adapt.registerAdapterFactory(pilot.Node, Item.Item, adapt_Node_to_Item)
561 adapt.registerAdapterFactory(pilot.OutputPort, Item.Item, adapt_OutPort_to_Item)
562 adapt.registerAdapterFactory(SALOMERuntime.OutputPyPort, Item.Item, adapt_OutPort_to_Item)
563 adapt.registerAdapterFactory(SALOMERuntime.OutputCorbaPort, Item.Item, adapt_OutPort_to_Item)
564 adapt.registerAdapterFactory(pilot.InputPort, Item.Item, adapt_InPort_to_Item)
565 adapt.registerAdapterFactory(SALOMERuntime.InputPyPort, Item.Item, adapt_InPort_to_Item)
566 adapt.registerAdapterFactory(SALOMERuntime.InputCorbaPort, Item.Item, adapt_InPort_to_Item)
567 adapt.registerAdapterFactory(pilot.OutputDataStreamPort, Item.Item, adapt_OutStream_to_Item)
568 adapt.registerAdapterFactory(pilot.InputDataStreamPort, Item.Item, adapt_InStream_to_Item)
569 adapt.registerAdapterFactory(pilot.OutGate, Item.Item, adapt_OutGate_to_Item)
570 adapt.registerAdapterFactory(pilot.InGate, Item.Item, adapt_InGate_to_Item)
572 pilot_InputDataStreamPort=pilot.InputDataStreamPort