;i.TddgZddlZddlmZddlmZddlmZddlm Z m Z m Z e j j Z Gd deZGd d e jZGd deZGd deZdS)TerminalTerminalGraphicsItemN) functions)GraphicsObject)Point)QtCoreQtGui QtWidgetsceZdZd(dZd)dZdZd*dZdZd Zd Z d*d Z d Z d*d Z dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd)dZdZd Zd+d!Z d"Z!d#Z"d$Z#d%Z$d&Z%d'Z&dS),rFNc ||_||_||_tj||_||_||_||_| |_ i|_ t|| |_ | |_|ri|_nd|_d|_|dS)a Construct a new terminal. ============== ================================================================================= **Arguments:** node the node to which this terminal belongs name string, the name of the terminal io 'in' or 'out' optional bool, whether the node may process without connection to this terminal multi bool, for inputs: whether this terminal may make multiple connections for outputs: whether this terminal creates a different value for each connection pos [x, y], the position of the terminal within its node's boundaries renamable (bool) Whether the terminal can be renamed by the user removable (bool) Whether the terminal can be removed by the user multiable (bool) Whether the user may toggle the *multi* option for this terminal bypass (str) Name of the terminal from which this terminal's value is derived when the Node is in bypass mode. ============== ================================================================================= )parentN)_io _optional_multiweakrefref_node_name _renamable _removable _multiable _connectionsr graphicsItem _graphicsItem_bypass_valuevalueOkrecolor) selfnodenameiooptionalmultipos renamable removable multiablebypasss PC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/flowchart/Terminal.py__init__zTerminal.__init__ s(! [&&  ###1$tzz||?X?X?Z?Z[[[  DKKDK  c||jS|r|j|dS|jS)zBReturn the value this terminal provides for the connected terminalN)r isMultiValuegetr terms r+valuezTerminal.value5sA <;       ;??4.. .; r-c|jSN)rr s r+ bypassValuezTerminal.bypassValue?s |r-Tc|s$tj||jrdS||_n=t |jt si|_||j||d|r(|r&| | dS)zIf this is a single-value terminal, val should be a single value. If this is a multi-value terminal, val should be a dict of terminal:value pairsN) r/fneqr isinstancedictupdatesetValueAcceptableisInputr!r)r valprocesss r+setValuezTerminal.setValueBs  "" (uS$+&& DKKdk400 !   ""3''' %%% <<>> !g ! IIKK    r-c |d|j|_|d|j|_|d|j|_d|vr||ddSdS)Nr'r(r)r%)r0rrr setMultiValue)r optss r+setOptszTerminal.setOptsUsu((;@@((;@@((;@@ d??   tG} - - - - - ?r-cl|r)|r|||r:|r&||||dS)znCalled whenever this terminal has been connected to another. (note--this function is called on both terminals)N)r?isOutput inputChangedr/r!r= connectedr1s r+rJzTerminal.connected\s <<>> $dmmoo $   d # # # ==?? !t0022 ! IIKK    dD)))))r-c@|r8||jvr/|j|=|n)|r|d|||dS)zsCalled whenever this terminal has been disconnected from another. (note--this function is called on both terminals)N)r/rr!r=r?rB disconnectedr1s r+rLzTerminal.disconnectedds      $44;#6#6 D! IIKK   ||~~ $ d###   t,,,,,r-c|r.||||i|dS||||dS)zCalled whenever there is a change to the input value to this terminal. It may often be useful to override this function.)rAN)r/rBr3)r r2rAs r+rIzTerminal.inputChangednsm      = MM4D!1!12GM D D D D D MM$**T**GM < < < < acceptable None->unknown False->Unacceptable)rr6s r+valueIsAcceptablezTerminal.valueIsAcceptablevs |r-c<||_|dSr5)rr)r vs r+r>zTerminal.setValueAcceptablezs  r-c|jSr5)rr6s r+ connectionszTerminal.connections~s   r-c*|Sr5)rr6s r+r!z Terminal.nodeszz||r-c|jdkS)Ninrr6s r+r?zTerminal.isInputsx4r-c|jSr5)rr6s r+r/zTerminal.isMultiValues {r-c||_|s9t|dkr||D]}||dS)z+Set whether this is a multi-value terminal.N)rleninputTerminals disconnectAllrI)r r%r2s r+rDzTerminal.setMultiValues}  !T002233a77    '')) $ $D   d # # # # $ $r-c|jdkS)NoutrWr6s r+rHzTerminal.isOutputsx5  r-c|jSr5)rr6s r+ isRenamablezTerminal.isRenamable r-c|jSr5)rr6s r+ isRemovablezTerminal.isRemovablerbr-c|jSr5)rr6s r+ isMultiablezTerminal.isMultiablerbr-c|jSr5rr6s r+r"z Terminal.names zr-c|jSr5)rr6s r+rzTerminal.graphicsItems !!r-cLt|dkS)Nr)r[rSr6s r+ isConnectedzTerminal.isConnecteds!4##%%&&**r-c.||vSr5rSr1s r+ connectedTozTerminal.connectedTost''))))r-cb|D]}|rdSdSNTF)rSrHr ts r+hasInputzTerminal.hasInputs>!!##  Azz|| tt ur-c>d|DS)z3Return the terminal(s) that give input to this one.c:g|]}||S)rH.0rrs r+ z+Terminal.inputTerminals..s%>>>a>>>>r-rmr6s r+r\zTerminal.inputTerminalss">>4++-->>>>r-cXtd|DS)z@Return the list of nodes which receive input from this terminal.c^g|]*}||+Srv)r?r!rws r+ryz+Terminal.dependentNodes..s-HHHAIIKKHAFFHHHHHr-)setrSr6s r+dependentNodeszTerminal.dependentNodess+HHd&6&6&8&8HHHIIIr-c ||rtd||urtd||urtd||fD]}|ry|jsrt |dkrMtd|d|d|dt|d n#|| xYw|mt| | }| |||j|<||j|<||||||S) NzAlready connectedzNot connecting terminal to selfz'Can't connect to terminal on same node.rzCannot connect z <-> z : Terminal z is already connected to z* (and does not allow multiple connections))rn Exceptionr!r?rr[rSlistkeyscloseConnectionItemr getViewBoxaddItemrrrJ)r r2connectionItemrrs r+ connectTozTerminal.connectTosK %% 5 3444t|| ABBByy{{diikk)) IJJJD\ B B99;;BqxBC 4H4H14L4L#)UYUYUY[_[_[_abababdhijivivixixi}i}iid@d@d@d@%ABBB B )$$&&&   !+D,=,=,?,?ARARATATUUN      * * , , 4 4^ D D D"0$"0$  t ts DDDc:||sdS|j|}||j|=|j|=||||||dSr5)rnrrrrL)r r2items r+disconnectFromzTerminal.disconnectFroms%%  F &  d #  d #   $ $r-ct|jD]}||dSr5)rrrrrqs r+r]zTerminal.disconnectAllsId',,..// # #A    " " " " # #r-c||stjddd}n|r+|stjddd}n|jt j|jirtjddd}nn|tjddd}nC|durtjddd}ntjddd}| tj ||r.| D]}| |ddSdS)NrTF)recurse)rkr QColorr?rsrr9r:rOrsetBrushQBrushrSr)r colorrrrs r+rzTerminal.recolorst =##%% 0 Qq++ 0  0 SQ//$dk2(>(>$ SS11''))1 S#q11''))T11 QQ// S!Q// $$U\%%8%8999  0%%'' 0 0 % //// 0 0 0 0r-c|j}||_|||||dSr5)rr!terminalRenamedr termRenamed)r r"oldNames r+renamezTerminal.renamesT*  ##D'222 ''-----r-cdt|dt|dS)Nz )strr!r"r6s r+__repr__zTerminal.__repr__sG%()9)9););%<%<%<%N>N>N>NOOr-c t|Sr5)idr6s r+__hash__zTerminal.__hash__s $xxr-c||}|)||dSdSr5)r]rscene removeItem)r rs r+rzTerminal.closes]   "" ::<< # JJLL # #D ) ) ) ) ) $ #r-cP|j|j|j|j|j|jdS)N)r#r%r$r'r(r))rrrrrrr6s r+ saveStatezTerminal.saveStatesCh$._c_n~B~M\`\kll lr-c"|j|jkS)zWhen the terminal is multi value, the data passed to the DatTreeWidget for each input or output, is {Terminal: value}. To make this sortable, we provide the < operator. rh)r others r+__lt__zTerminal.__lt__szEK''r-)FFNFFFNr5)TNT)'__name__ __module__ __qualname__r,r3r7rBrFrJrLrIrOr>rSr!r?r/rDrHrardrfr"rrkrnrsr\r}rrr]rrrrrrrrvr-r+rr s]&&&&P&...***---====!!!   $$$!!!"""+++*** ???JJJ:    ###0000(... PPP*** lll(((((r-c2eZdZfdZfdZfdZxZS)TextItemcZt||||_dSr5)superr, on_update)r textrr __class__s r+r,zTextItem.__init__s( v&&&"r-ct||j|dSdSr5)r focusOutEventrr evrs r+rzTextItem.focusOutEventsA b!!! > % NN      & %r-c4|tjjjks,|tjjjkr|j|dSt|dSr5) keyr QtKey Key_Enter Key_Returnrr keyPressEventrs r+rzTextItem.keyPressEvent"sq 6688vy}. . ."&&((fim>V2V2V~)    b!!!!!r-)rrrr,rr __classcell__)rs@r+rrsj##### """""""""r-rceZdZddZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdS)rNc~||_tj||tjddd|_t jdddd||_|j r|j nd}t|j |||_ |j dd|_|d|j r.|j t$jjj|dd|_dS)Nr gffffff?TrZ)r2rr,r9mkBrushbrushr QGraphicsRectItemboxra labelChangedrr"labelsetScale newConnectionsetFiltersChildEventssetTextInteractionFlagsr rTextInteractionFlagTextEditorInteraction setZValuemenu)r r2rrs r+r,zTerminalGraphicsItem.__init__,s f---Z!A&& .q!RTBB)-)>)>)@)@JD%%d dinn..i@@  C   ! ""4((( 9 " " d J . .vy/L/b c c c q r-c|j}||jkr|j|dSdSr5)r toPlainTextr2r"r)r newNames r+rz!TerminalGraphicsItem.labelChanged;sP*((** dinn&& & & I  W % % % % % ' &r-c:|j|dSr5)r setPlainText)r r"s r+rz TerminalGraphicsItem.termRenamed@s %%%%%r-cH||_|j|dSr5)rrr)r rs r+rzTerminalGraphicsItem.setBrushCs%  %     r-cD|j|jdSr5)r2rr targets r+ disconnectzTerminalGraphicsItem.disconnectGs    -----r-c|j|j}|j|j}||zSr5)rmapRectToParent boundingRectr)r brlrs r+rz!TerminalGraphicsItem.boundingRectJsQ X % %dh&;&;&=&= > > Z ' ' (?(?(A(A B BBwr-cdSr5rvr pargss r+paintzTerminalGraphicsItem.paintOs r-ctj||}||_|j|j}|j|j}|jr|j | | | dz z |j | | z| | dz z n|j | | z | | dz z |j | | z | z | | dz z |dS)Ng@)r QPointF anchorPosrrrrr2r?setPosxyheightwidthupdateConnections)r rrr&rrs r+ setAnchorzTerminalGraphicsItem.setAnchorRsnQ"" X % %dh&;&;&=&= > > Z ' ' (?(?(A(A B B 9     U HOOCEEGGSUUWWRYY[[^%; < < < J  ceegg 2CEEGGbiikk"n4L M M M M HOOCEEGGBHHJJ. B0F G G G J  ceeggbhhjj0;SUUWWRYY[[QS^=S T T T      r-c|jD]\}}|dSr5r2rSitems updateLine)r rrcs r+rz&TerminalGraphicsItem.updateConnectionsasHI))++1133  DAq LLNNNN  r-c.|dSr5ignorer rs r+mousePressEventz$TerminalGraphicsItem.mousePressEventes r-c|tjjjkrD||jtjjj dS|tjjj kr+|| |dSdSr5) buttonr r MouseButton LeftButtonacceptrsetFocus FocusReasonMouseFocusReason RightButtonraiseContextMenurs r+mouseClickEventz$TerminalGraphicsItem.mouseClickEventis 99;;&)/: : : IIKKK J   5 F G G G G G YY[[FI1= = = IIKKK  ! !" % % % % %> =r-c t|}||||}|}|t jt|t| dSr5) getMenuraddParentContextMenus screenPospopupr QPointintrr)r rrr&s r+rz%TerminalGraphicsItem.raiseContextMenuqs{||~~zz||11$bAAllnn 6=SUUWWs35577||<<=====r-c|jtj|_|jt ddt jt dd|j}|j|j |j |||j_ |j s|dt jt dd|j}|d||j ||j |j|j|j |||j_|j rd|_|jS)Nz Context MenurzRemove terminalFz Multi-valueT)rr QMenusetTitle translater QAction triggeredconnect removeSelf addActionremActr2rd setEnabled setCheckable setCheckedr/rf toggleMultimultiAct)r rrs r+rzTerminalGraphicsItem.getMenuxs 9 !))DI I  yDD E E E]9^=N#O#OQUQZ[[F   $ $T_ 5 5 5 I   ' ' '%DI 9((** )!!%(((}Y~}%M%MtyYYH  ! !$ ' ' '    6 6 8 8 9 9 9    5 5 7 7 8 8 8   & &t'7 8 8 8 I   ) ) )!)DI y$$&& ,&+#yr-cv|jj}|j|dSr5)rr isCheckedr2rD)r r%s r+rz TerminalGraphicsItem.toggleMultis4 ",,.. &&&&&r-ch|j|jdSr5)r2r!removeTerminalr6s r+rzTerminalGraphicsItem.removeSelfs* '' 22222r-c|tjjjkr|dS||r|j@t||_| |j|j | |dS|r|j||}d}|D]}t'|t(r~|j | |j|j|jd}n9#||jd|_xYwn|s|jd|_dSdS|jA|j | |dSdS)NFT)rr rrrrrisStartrrrr setTarget mapToViewr&isFinishrrscenePosr;rr2rrr)r rr gotTargetis r+mouseDragEventz#TerminalGraphicsItem.mouseDragEvents 99;;&)/: : : IIKKK F ::<< G!)%3D%9%9"!!))$*<===   ( ()A)A B B B B B [[]] G!- **2;;==99!   A!!%9:: *44Q777" I//8JKKK(,II" JJLL33D4FGGG15D.! !/&,,...%)"""#.-&!-",,T^^BFFHH-E-EFFFFF.-s >'F&&6Gc|s|tjjjr|tjjj|tjjj|j tj dn|j |j | dS)Nw)isExit acceptDragsr rrr acceptClicksrrrr9rrr=rs r+ hoverEventzTerminalGraphicsItem.hoverEventsyy{{ *r~~fi.C.NOO * OOFI1< = = = OOFI1= > > > H  bjoo . . . . H  dj ) ) ) r-c|||j|jSr5)r! mapFromItemrrcenterr6s r+ connectPointz!TerminalGraphicsItem.connectPoints@~~d..tx9N9N9P9P9W9W9Y9YZZ[[[r-c|jD]\}}|dSr5r)r rrrs r+ nodeMovedzTerminalGraphicsItem.nodeMovedsLy,,..4466  GAt OO      r-r5)rrrr,rrrrrrrrrrrrrrr&r,r0r2rvr-r+rr*s=    &&& &&&!!!...     ! ! !&&&>>>,'''333#G#G#GJ\\\r-cdeZdZddZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdS)rNctj|||jj|jjz||_||_d|_d|_ d|_ d|_ dddddddd |_ |j |||ddS) NrFline)dr6g?)r8r7)rrrg@)shaperr hoverColor hoverWidth selectedColor selectedWidth)rr,setFlagsGraphicsItemFlagItemIsSelectableItemIsFocusablesourcerlengthhoveredpath shapePathstylerrrr)r rBrs r+r,zConnectionItem.__init__s%%%  ! 2  ! 1 2        $)*     ((...  qr-c|)||dSdSr5)rrr6s r+rzConnectionItem.closes: ::<< # JJLL # #D ) ) ) ) ) $ #r-c<||_|dSr5)rrrs r+r zConnectionItem.setTargets  r-c |j|d|vr|dS|dS)Nr9)rGr=r)r kwdss r+setStylezConnectionItem.setStylesH $ d?? OO      KKMMMMMr-ct|j}t|jt r't|j}n6t|jt jrt|j}ndS|| |||_ d|_ | dSr5) rrBr0r;rrr rprepareGeometryChange generatePathrErFr=)r startstops r+rzConnectionItem.updateLinesdk..0011 dk#7 8 8 113344DD  V^ 4 4 %%DD F ""$$$%%eT22  r-c \tj}|||jddkr||n|jddkr|t ||t ||t ||ntd|jdz|S)Nr9r5cubicz1Invalid shape "%s"; options are "line" or "cubic") r QPainterPathmoveTorGlineTocubicTorrrr)r rPrQrEs r+rOzConnectionItem.generatePaths!## E :g & ( ( KK     Z G + + LLtvvxx33U57799dffhh5O5OQVW[W]W]W_W_aeagagaiaiQjQj k k k kORVR\]dReeff f r-c|s|dS|tjjjks,|tjjjkr5|j |j | dS|dSr5) isSelectedrrr rr Key_Delete Key_BackspacerBrrrrs r+rzConnectionItem.keyPressEvents    IIKKK F 6688vy}/ / /26688vy}?Z3Z3Z K " "4; / / / IIKKKKK IIKKKKKr-c.|dSr5rrs r+rzConnectionItem.mousePressEvents r-c`|tjjjkr}||}|d||s,|r| dSdSdSdSr) rr rrrrrY setSelectedrr=)r rsels r+rzConnectionItem.mouseClickEvents 99;;&)/: : : IIKKK//##C   T " " " MMOOO 4??,,  ; :     r-c|s1|tjjjrd|_nd|_|dSrp)r)r+r rrrrDr=rs r+r,zConnectionItem.hoverEvent&sN  !1F1Q!R!R !DLL DL r-cN|Sr5)r9rr6s r+rzConnectionItem.boundingRect-szz||((***r-c<d|_|dSr5)rFrNr6s r+viewRangeChangedzConnectionItem.viewRangeChanged0s! ""$$$$$r-c|jx|jtjStj}|}||dz||j|_|jS)N)rFrEr rTQPainterPathStroker pixelWidthsetWidth createStroke)r strokerpxs r+r9zConnectionItem.shape4su > !y )+++/11G""B   RT " " "$11$)<s ??   S HHRXdj9OA\]]] ^ ^ ^ ^| S$*\":$*\BZ[[[\\\\$*W"5TZ=PQQQRRR 49r-r5)rrrr,rr rLrrOrrrr,rrcr9rrvr-r+rrs2***         +++%%%     r-r)__all__rrr9graphicsItems.GraphicsObjectrrrr r r QCoreApplicationrobjectrQGraphicsTextItemrrrrvr-r+rvsI - .999999))))))))))  # - I(I(I(I(I(vI(I(I(X"""""y*"""$_____>___D{{{{{^{{{{{r-