Ϫfk:dZddlZddlmZmZddlmZGddeZ GddZ Gd d Z Gd d e Z Gd de Z Gdde ZGdde ZGddeZGddeZGdde ZGdde ZdZdZdZGdde ZGd d!e ZGd"d#e ZGd$d%eZGd&d'e ZGd(d)eZGd*d+e ZGd,d-e ZGd.d/eZGd0d1eZ Gd2d3e Z!d4Z"Gd5d6e Z#y)7z< Simple insults-based widget library @author: Jp Calderone N)helperinsults)textceZdZdZy) YieldFocusz, Input focus manipulation exception N)__name__ __module__ __qualname____doc__>/usr/lib/python3/dist-packages/twisted/conch/insults/window.pyrrsr rc$eZdZdZdZdZdZy)BoundedTerminalWrapperc||_||_||_||_||_|j |_|j |_|j|_|j|_|j|_ yN) widthheightxoffyoffterminal cursorForwardselectCharacterSetselectGraphicRendition saveCursor restoreCursor)selfrrrrrs r__init__zBoundedTerminalWrapper.__init__sj      %33"*"="=&.&E&E#"--%33r c|jj|jt|j|z|j t|j |zSr)rcursorPositionrminrrr)rxys rr z%BoundedTerminalWrapper.cursorPosition"sF}}++ IIDJJ* *DIIDKK8K,K  r cb|jj|j|jSr)rr rrrs r cursorHomez!BoundedTerminalWrapper.cursorHome's!}}++DIItyyAAr c8|jj|Sr)rwrite)rdatas rr(zBoundedTerminalWrapper.write*s}}""4((r N)rr r rr r&r(r r rrrs 4 B)r rcneZdZdZdZdZdxZZdZdZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZy)WidgetFNc|jsd|_|j2|jjs|jjyyyNT)dirtyparentrepaintr%s rr0zWidget.repaint4s>zzDJ ;; "4;;+<+< KK   !,= "r cd|_yr-)r.r%s rfilthyz Widget.filthy:s  r cJ|j|j|||yr)r2drawrrrrs rredrawz Widget.redraw=s  %*r c||jk7s||jk7s |jr)||_||_d|_|j|||yyNF)rrr.renderr5s rr4z Widget.drawAsJ DJJ &DKK"74::DJ DKDJ KKvx 0   X & g   " " $ g++ +  $ $UH 5  " "5( 3r ctrrrrHs rrAzWidget.tabReceivedXs lr c2d|_|jy)z Called when focus is being given to this widget. May raise YieldFocus is this widget does not want focus. TNfocusedr0r%s r focusReceivedzWidget.focusReceived\s   r c2d|_|jyr8rNr%s r focusLostzWidget.focusLostes  r cyrr r%s rrBzWidget.backspaceReceivedir;r c|}t|ts|jd}t|d|zd}| ||yy)Nutf-8func_) isinstancestrdecodegetattr)rrGrHnamefuncs rrDzWidget.functionKeyReceivedlsC%%;;w'DtWt^T2   N r cyrr rFs rrEzWidget.characterReceivedtr;r )rr r rOr/r.rrr0r2r6r4r9r=rIrArPrRrBrDrEr r rr+r+.s\G F EEF" +1 4  r r+cHeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z y) ContainerWidgetzZ @ivar focusedChild: The contained widget which currently has focus, or None. NFc<tj|g|_yr)r+rchildrenr%s rrzContainerWidget.__init__s r c|jJ||_|jj||j$|jr |j ||_|jy#t $rYwxYwr)r/raappend focusedChildrOrPrr0rchilds raddChildzContainerWidget.addChildsu||###  U#    $ *##%%*!    s A22 A>=A>c|j|usJd|_|jj||jyr)r/raremover0res rremChildzContainerWidget.remChilds6||t###  U# r cp|jD]}|jtj|yr)rar2r+)rchs rr2zContainerWidget.filthys*-- B IIK  dr cL|jD]}|j|||yr)rar4)rrrrrls rr9zContainerWidget.renders%-- -B GGE68 , -r c |j|jM|jj|j}d|_ |jj |dz}nd}|t|jkr3 |j|j|j||_yt #t $r t wxYw#t $r|dz }YnwxYw|t|jkrO)Nr) r0rdrRraindex ValueErrorrlenrP)rrdcurFocuss r changeFocuszContainerWidget.changeFocuss     (    ' ' ),,L $D  #==..|} with a short timeout). TcJtj|||_||_yr)r_rpainter scheduler)rrzr{s rrzTopWindow.__init__s  & "r Nc|j*t|_|j|jtj |yr) _paintCallobjectr{_paintr_r0r%s rr0zTopWindow.repaints3 ?? "$hDO NN4;; '%r c2d|_|jyr)r}rzr%s rrzTopWindow._paints r c tj|y#t$r) tj|Yy#t$rYYywxYwwxYwr)r_rtrr%s rrtzTopWindow.changeFocussI   ' ' -  ++D1   s$ A 9 AA AA cr tj|||y#t$r|jYywxYwr)r_rIrrtrFs rrIzTopWindow.keystrokeReceiveds4   - -dE8 D      s 66) rr r r rOrr}r0rrtrIr r rrxrxs.,G# J& r rxceZdZdZdZy) AbsoluteBoxctt|jD]*}|j|d|us|||f|j|<ytd|)Nrz No such child)rangerrrarq)rrfr"r#ns r moveChildzAbsoluteBox.moveChilds[s4==)* 5A}}Q"e+$)1a= a  5 _e4 4r c~|jD].\}}}t|||z ||z ||}|j|||0yr)rarr4)rrrrrlr"r#wraps rr9zAbsoluteBox.render sE  )HB1)(EAIvz1aPD GGE64 ( )r N)rr r rr9r r rrrs 5)r rc:eZdZed\ZZZefdZdZdZ y)_Boxc<tj|||_yr)r_rgravity)rrs rrz _Box.__init__s  & r c,d}d}|jD]~}|j}|d}|jdk(r-|dd}n |||dz }|dd}@|Ct||d}S|dd}n|t||d}|dd}t|w||dz }||fS)NrNNro)rar=variableDimensionmax)rrrrlhints rr=z _Box.sizeHints-- &B;;=D|#%%*7? E&T!W$E7?!F' a1F7? E&tAw/E7?!F'd1g%F- &0f}r c4|jsyd}g}|jD]H}|j}|d}||j|dz }|j||jJ||f|j}t d|D} |rt || z |z } dx} } t ||jD]]\} }|  } ||}}|jdk(r| }n| }t|||| | }|j||||jdk(r| | z } Y| | z } _y)Nrrroc3&K|] }|| ywrr ).0ws r z_Box.render..Ds:aAM:s) rar=rrcsumintziprr4)rrrrgreedywantsrlrlength totalWant leftForGreedy widthOffset heightOffsetwantsubWidth subHeightrs rr9z _Box.render5sL}} -- 7B;;=D|#D**+3!  LLd445 6  7!7!78:5:: )!3v =>M%&& lE4==1 %HD"|$"'iH%%* ) D GGHi .%%*t# $ + %r N) rr r rTOPCENTERBOTTOMrr=r9r r rrrs$(C%:*%r rceZdZdZy)HBoxrNrr r rr r rrrbr rceZdZdZy)VBoxroNrr r rrrfrr rceZdZdZy)Packerc|jsytt|jdzdz}t|Dcgc] }t }}t |jD]%\}}||t|zj |'t}t|j ||j|||ycc}w)Ng?) rarrrrr enumeratergrmapr9) rrrrrootrboxesrlhs rr9z Packer.renderks}} 3t}}%,s23!&t-A--t}}- /EAr !c%j. ! * *2 . / F AJJ ) .sCN)rr r r9r r rrrjs *r rc8eZdZdZdZdZdZdZdZdZ dZ y) CanvasFNcRtj||jddyNro)r+rresizer%s rrzCanvas.__init__}s Aqr ctjdd|z|z}|jXtt||jD]6}tt||j D]}|||f|||z|z<8||_||_||_|j |k\r |dz |_|j|k\r |dz |_yy)NB ro)arraycontentsrr!_width_heightr"r#)rrrrr"r#s rrz Canvas.resizes;;sD5L6$9: == $3udkk23 9s64<<899A.21a4jHUQY]+9 9!   66U?QYDF 66V aZDF r cJ|\}}|j|j|z|zSrrr)rrpr"r#s r __getitem__zCanvas.__getitem__s'A}}dkkAo233r cL|\}}||j|j|z|z<yrr)rrpvaluer"r#s r __setitem__zCanvas.__setitem__s&A/4 t{{Q!+,r cftjddt|jz|_y)Nrr)rrrrr%s rclearz Canvas.clears" CDMM0B)BC r cf|r|sy||jk7s||jk7r|j||t|D]n}|j d||j |j|z|j|z|jzj }|d|}|j|pyNr)rrrrr rtobytesr()rrrrirs rr9z Canvas.rendersF  DKK 6T\\#9 KKv &v !A  # #Aq )== a$++/DKK"?gi > ! ! NN; '(FUFO4z"%h 6A:q!L EAIvz48r N) rr r rrPrRrIr=r2r9r r rrrs&% .*A 9r rc$eZdZdZdZdZdZy)ButtoncJtj|||_||_yr)r+rlabelonPress)rrrs rrzButton.__init__s  r c0t|jdfSr)rrrr%s rr=zButton.sizeHints4::!!r c0|dk(r|jyyN )rrFs rrEzButton.characterReceived s E> LLN r c|jdd|jr"|jd|jzdzy|j|jy)Nrsr)r rOr(rr5s rr9z Button.render sC1% << NN: 2Z? @ NN4:: &r N)rr r rr=rEr9r r rrrs "'r rcBeZdZdZdZdZdZdZdZdZ dZ d Z y ) TextInputcftj|||_||_d|_d|_y)Nr r)r+ronSubmitmaxwidthbuffercursor)rrrs rrzTextInput.__init__s*      r c|d|j|_t|j|_|j yr)rrrrrr0rrs rsetTextzTextInput.setTexts-?T]]+ $++&  r cn|jdkDr&|xjdzc_|jyyNrro)rr0rLs rfunc_LEFT_ARROWzTextInput.func_LEFT_ARROW"s) ;;? KK1 K LLN r c|jt|jkr&|xjdz c_|jyyr)rrrrr0rLs rfunc_RIGHT_ARROWzTextInput.func_RIGHT_ARROW's3 ;;T[[) ) KK1 K LLN *r c|jdkDra|jd|jdz |j|jdz|_|xjdzc_|jyyr )rrr0r%s rrBzTextInput.backspaceReceived,sX ;;?++&7 a84;;t{{};UUDK KK1 K LLN r cL|dk(r|j|jyt|j|jkra|jd|j|z|j|jdz|_|xjdz c_|j yy)Nrro)rrrrrrr0rFs rrEzTextInput.characterReceived2s~ E> MM$++ &4;;$--/KK $++.6T[[]9SS  q   0r c$|jdzdfSr)rr%s rr=zTextInput.sizeHint=s}}q !##r c|j}|jdd|jr|j|d|jt |||j|jdzxsd|j||jdzd|jd|j t |z dzzy|j t |z }|j|d|zzy)Nrror_) _renderTextr rOr(rrrr)rrrr currentTextmores rr9zTextInput.render@s&&( 1% << NN;}5 6 8[t{{QGO4 P NN;t{{Q'89 : NN44==3{3C#Ca#GH I==3{#33D NN;4 5r c|jSr)rr%s rrzTextInput._renderTextLs {{r N) rr r rrr r rBrEr=r9rr r rrrs/    $ 6r rceZdZdZy) PasswordInputc2dt|jzS)N*)rrrr%s rrzPasswordInput._renderTextQsS%%%r N)rr r rr r rrrPs&r rc0eZdZdZddZdZdZdZdZy) TextOutputr Nc<tj|||_yr)r+rsize)rrs rrzTextOutput.__init__Xs r c|jSr)rr%s rr=zTextOutput.sizeHint\s yyr c|jdd|jd|}|j|d|t|z zzyNrr)r rr(rr)rrrrrs rr9zTextOutput.render_sA1%yy% tdec$i&7889r c2||_|jyr)rr0rs rrzTextOutput.setTextds  r ctrrKr%s rrPzTextOutput.focusReceivedhs lr r) rr r rrr=r9rrPr r rrrUs D: r rc4eZdZed\ZZdefdZdZy)TextOutputArearNc>tj||||_yr)rr longLines)rrr's rrzTextOutputArea.__init__osD$'"r cd}|jj}g}|r|j|jk(r|j d}t |t s|jd}g}tj||D]4} t | ts| jd} |j| 6|j|xsdgn#|j|j dd|t||k\rn|rt|d|D](\}} |j!d||j#| *y)NrrUr )r splitlinesr'WRAPpoprWrXrYtptext greedyWrapbytesencodercextendrrrr r() rrrrr inputLines outputLinesline wrappedLines wrappedLineLs rr9zTextOutputArea.renderss' YY))+  ~~*!~~a(!$,;;w/D! #)#4#4T5#A5K%k59&1&8&8&A  '' 45""<#8C59"":>>!#4Ve#<=;6)k'623 DAq  # #Aq ) NN1  r )rr r rr*TRUNCATErr9r r rr%r%ls1XND( D#r r%ceZdZdZdZedZejdZedZejdZdZ dZ dZ d Z d Z y ) Viewportrc|jSr)_xOffsetr%s rxOffsetzViewport.xOffset }}r cR|j|k7r||_|jyyr)r;r0rrs rr<zViewport.xOffset# ==E !!DM LLN "r c|jSr)_yOffsetr%s ryOffsetzViewport.yOffsetr=r cR|j|k7r||_|jyyr)rBr0r?s rrCzViewport.yOffsetr@r c0tj|||_||j_t j |_|j|j _|j|j _ |j jyr) r+rrr/rTerminalBuffer_bufrrrrconnectionMaders rrzViewport.__init__s`" $))+ ++ <<    "r cb|jjtj|yrrr%s rr2zViewport.filthyrr c|jj|j|j|jt |jj |j|j|zD]\}}|jd|d}t ||j|j|zD]3\}\}}||jjurd}|j|5||ks{|jd||z dz zy)Nrrro) rr4rrrIrlinesrBr r;voidr() rrrrr#r3rrlattrs rr9zViewport.renders DKKtyyA! IIOODMMDMMF,B C 7GAt  # #Aq )A!*4  PU@U+V!W # :B'Br" #5ytuqy1}56 7r N)rr r r;rBpropertyr<setterrCrrrr2r9r r rr9r9s}HH  ^^  ^^ FG#7r r9ceZdZdZdZdZy) _ScrollbarcJtj|||_d|_y)N)r+ronScrollpercent)rrVs rrz_Scrollbar.__init__s   r c xtdtd|jd|_|j y)N?rUr!rrVrWr0r%s rsmallerz_Scrollbar.smaller)3Cr): ;<  r c xtdtd|jd|_|j y)NrYrUror[r%s rbiggerz_Scrollbar.biggerr]r N)rr r rr\r_r r rrSrSs r rSc4eZdZdZdZdZdZdZdZdZ dZ y ) HorizontalScrollbarcy)Nrr r%s rr=zHorizontalScrollbar.sizeHintr c$|jyrr\rLs rr z#HorizontalScrollbar.func_LEFT_ARROW  r c$|jyrr_rLs rr z$HorizontalScrollbar.func_RIGHT_ARROW  r u◀u▶░▓c8|jdd|dz }t||jz}||z }|j|j|zz|j z|j|zz|j z}|j|jdy)NrrrU) r rrW_left_bar_slider_rightr(r/)rrrrrbeforeaftermes rr9zHorizontalScrollbar.renders1% AIQ%&F  JJyy6! #ll yy5  "kk    ryy)*r N) rr r r=r r rmrprnror9r r rraras, /E 0F DG +r rac4eZdZdZdZdZdZdZdZdZ dZ y ) VerticalScrollbarcy)N)roNr r%s rr=zVerticalScrollbar.sizeHintrcr c$|jyrrerLs r func_UP_ARROWzVerticalScrollbar.func_UP_ARROWrfr c$|jyrrhrLs rfunc_DOWN_ARROWz!VerticalScrollbar.func_DOWN_ARROWrir u▲u▼rjrkc6|jddt|j|dz z}|j|jj dt d|dz D]q}|jd|||dzk7r+|j|jj dH|j|jj ds|jd|dz |j|jj dy)NrrrUro) r rrWr(_upr/rrnro_down)rrrrknobrs rr9zVerticalScrollbar.renders1%4<<6A:./txxw/0q&1*% =A  # #Aq )TAXtyy//89t||227;<  = 6A:.tzz((12r N) rr r r=rxrzr|r}rnror9r r rrurus, +C .E DG 3r rucFeZdZdZdZdZdZdZdZdZ dZ d Z d Z y ) ScrolledAreaz A L{ScrolledArea} contains another widget wrapped in a viewport and vertical and horizontal scrollbars for moving the viewport around. ctj|t||_t |j |_t|j|_ |j|j |jfD] }||_ yr) r+rr9 _viewportra _horizScroll_horizru _vertScroll_vertr/)rrrs rrzScrolledArea.__init__sg!),)$*;*;< &t'7'78 djj8 AAH r c|jxj|z c_td|jj|j_|jjdz SNrg9@)rr<rrrs rrzScrolledArea._horizScrollI !#!$Q(>(>!?~~%%,,r c|jxj|z c_td|jj|j_|jjdz Sr)rrCrrs rrzScrolledArea._vertScroll#rr c8|jjyr)rr\rLs rrxzScrolledArea.func_UP_ARROW(s r c8|jjyr)rr_rLs rrzzScrolledArea.func_DOWN_ARROW+s r c8|jjyr)rr\rLs rr zScrolledArea.func_LEFT_ARROW.s r c8|jjyr)rr_rLs rr zScrolledArea.func_RIGHT_ARROW1s r c|jj|jj|jjtj|yr)rr2rrr+r%s rr2zScrolledArea.filthy4s>    dr c t||dz |dz dd}|jj|dz |dz ||jr|j dt |dd|dz t |dd|dz |jjd|dz t|d|dz |dz d|jj|dt||dd|dz |j dy)Nrrorrr) rrr4rOr(rrrr)rrrrwrappers rr9zScrolledArea.render:s(519fqj!QO EAIvz7; << NN; 'xAuqy1Xq!VaZ0  vz1(Avz5ST9VWX   1,XuaFQJO  z"r N) rr r r rrrrxrzr r r2r9r r rrrs4 - -  #r rc|j|jttj|j ||j |jyr)rrrXr REVERSE_VIDEOr(rr)rrls rrrJsK  ##C(=(=$>? NN2  r cFeZdZdZdZd dZdZdZdZdZ dZ d Z d Z y) SelectionrNctj|||_||_||_|)t t t|j|_yyr) r+rsequenceonSelect minVisiblerrrrr)rrrrs rrzSelection.__init__YsE    $  !c#t}}56DK "r cL|j|j|jfSyr)rrr%s rr=zSelection.sizeHintas$ ?? &;;/ / 'r c|jdkDrJ|xjdzc_|jdkDr|xjdzc_|jyyr ) focusedIndex renderOffsetr0rLs rrxzSelection.func_UP_ARROWesN   q    "   1$!!Q&! LLN !r c|jdk7r'|xj|jzc_d|_n(td|j|jz |_|j yr)rrrrr0rLs r func_PGUPzSelection.func_PGUPlsV    !   !2!2 2  !D  #At'8'84;;'F GD  r c|jt|jdz krW|xjdz c_|j|jdz kr|xjdz c_|j yyr)rrrrrrr0rLs rrzzSelection.func_DOWN_ARROWtsd   s4==1A5 5    "   4;;?2!!Q&! LLN 6r c|j|jdz k7r|j|jz dz }||jzt|jk\r%t|j|jz dz }|xj|z c_|jdz |_n>t t|jdz |j|jz|_|j yr)rrrrrrr!r0)rrHchanges r func_PGDNzSelection.func_PGDN{s    a /[[4#4#44q8F)))S-??T]]+d.?.??!C    '  $ aD  #DMM"Q&(9(9DKK(G!D  r c`|dk(r)|j|j|jyyr)rrrrFs rrEzSelection.characterReceiveds) E> MM$--(9(9: ; r c ||_|j|jz }|t|j|z kDr"t dt|j|z }|j|||z}t |D]\}}|jd|||jk(rx|j|jr3ttjttjf}nttjf}|j||d|} |j| d|t| z zz||jk(s|j!yr!)rrrrrrrrr rrOrXrrBOLDrr(r) rrrrstartelementsrelemodesrs rr9zSelection.renders1 !!D$5$55 3t}}%. .3t}}-67E==8) )FAs  # #Aq )D%%%##%<< 5 56GLL8IIE !6!679E///7v;D NN4453t9+<#=> ?D%%%&&( )r r) rr r rrrr=rxrrzrrEr9r r rrrRs6LL70 <)r r)$r rtwisted.conch.insultsrrtwisted.pythonrr, Exceptionrrr+r_rxrrrrrrrrrrrrrrr%r9rSrarurrrr r rrsJ  1) ))2G G TM77v77t  +*+<3 3:8#68#vN)N)r