Ë
    ojk  ã                   ó:  — d Z ddlZddlmZmZ ddlmZ  G d„ de«      Z	 G d„ d«      Z
 G d	„ d
«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zd„ Zd„ Zd„ Z G d„ de«      Z G d „ d!e«      Z G d"„ d#e«      Z G d$„ d%e«      Z G d&„ d'e«      Z G d(„ d)e«      Z G d*„ d+e«      Z G d,„ d-e«      Z G d.„ d/e«      Z G d0„ d1e«      Z  G d2„ d3e«      Z!d4„ Z" G d5„ d6e«      Z#y)7z<
Simple insults-based widget library

@author: Jp Calderone
é    N)ÚhelperÚinsults)Útextc                   ó   — e Zd ZdZy)Ú
YieldFocusz,
    Input focus manipulation exception
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú>/usr/lib/python3/dist-packages/twisted/conch/insults/window.pyr   r      s   „ òr   r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚBoundedTerminalWrapperc                 óô   — || _         || _        || _        || _        || _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        y ©N)
ÚwidthÚheightÚxoffÚyoffÚterminalÚcursorForwardÚselectCharacterSetÚselectGraphicRenditionÚ
saveCursorÚrestoreCursor)Úselfr   r   r   r   r   s         r   Ú__init__zBoundedTerminalWrapper.__init__   sj   € ØˆŒ
ØˆŒØˆŒ	ØˆŒ	Ø ˆŒØ%×3Ñ3ˆÔØ"*×"=Ñ"=ˆÔØ&.×&EÑ&EˆÔ#Ø"×-Ñ-ˆŒØ%×3Ñ3ˆÕr   c                 ó¾   — | j                   j                  | j                  t        | j                  |«      z   | j
                  t        | j                  |«      z   «      S r   )r   ÚcursorPositionr   Úminr   r   r   )r   ÚxÚys      r   r    z%BoundedTerminalWrapper.cursorPosition"   sF   € Ø�}‰}×+Ñ+Ø�I‰Iœ˜DŸJ™J¨Ó*Ñ*¨D¯I©I¼¸D¿K¹KÈÓ8KÑ,Kó
ð 	
r   c                 ób   — | j                   j                  | j                  | j                  «      S r   )r   r    r   r   ©r   s    r   Ú
cursorHomez!BoundedTerminalWrapper.cursorHome'   s!   € Ø�}‰}×+Ñ+¨D¯I©I°t·y±yÓAÐAr   c                 ó8   — | j                   j                  |«      S r   )r   Úwrite)r   Údatas     r   r(   zBoundedTerminalWrapper.write*   s   € Ø�}‰}×"Ñ" 4Ó(Ð(r   N)r   r	   r
   r   r    r&   r(   r   r   r   r   r      s   „ ò
4ò
ò
Bó)r   r   c                   ón   — e Zd ZdZdZdZdxZZd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚWidgetFNc                 ó¦   — | j                   sd| _         | j                  �2| j                  j                   s| j                  j                  «        y y y ©NT)ÚdirtyÚparentÚrepaintr%   s    r   r0   zWidget.repaint4   s>   € Ø�zŠzØˆDŒJØ�;‰;Ð"¨4¯;©;×+<Ò+<Ø�K‰K×ÑÕ!ð ,=Ð"r   c                 ó   — d| _         y r-   )r.   r%   s    r   ÚfilthyzWidget.filthy:   s	   € Øˆ�
r   c                 óJ   — | j                  «        | j                  |||«       y r   )r2   Údraw©r   r   r   r   s       r   ÚredrawzWidget.redraw=   s   € Ø�‰ŒØ�	‰	�%˜ Õ*r   c                 óª   — || j                   k7  s|| j                  k7  s| j                  r)|| _         || _        d| _        | j                  |||«       y y ©NF)r   r   r.   Úrenderr5   s       r   r4   zWidget.drawA   sJ   € Ø�D—J‘JÒ &¨D¯K©KÒ"7¸4¿:º:ØˆDŒJØ ˆDŒKØˆDŒJØ�K‰K˜˜v xÕ0ð	 <Fr   c                  ó   — y r   r   r5   s       r   r9   zWidget.renderH   ó   € Ør   c                  ó   — y r   r   r%   s    r   ÚsizeHintzWidget.sizeHintK   s   € Ør   c                 óÌ   — |dk(  r| j                  |«       y |dk(  r| j                  «        y |t        j                  v r| j	                  ||«       y | j                  ||«       y )Nó   	ó   )ÚtabReceivedÚbackspaceReceivedr   ÚFUNCTION_KEYSÚfunctionKeyReceivedÚcharacterReceived©r   ÚkeyIDÚmodifiers      r   ÚkeystrokeReceivedzWidget.keystrokeReceivedN   sY   € Ø�EŠ>Ø×Ñ˜XÕ&Ø�gÒØ×"Ñ"Õ$Ø”g×+Ñ+Ñ+Ø×$Ñ$ U¨HÕ5à×"Ñ" 5¨(Õ3r   c                 ó   — t        «       ‚r   ©r   ©r   rH   s     r   rA   zWidget.tabReceivedX   s
   € ä‹lÐr   c                 ó2   — d| _         | j                  «        y)z„
        Called when focus is being given to this widget.

        May raise YieldFocus is this widget does not want focus.
        TN©Úfocusedr0   r%   s    r   ÚfocusReceivedzWidget.focusReceived\   s   € ð ˆŒØ�‰�r   c                 ó2   — d| _         | j                  «        y r8   rN   r%   s    r   Ú	focusLostzWidget.focusLoste   s   € ØˆŒØ�‰�r   c                  ó   — y r   r   r%   s    r   rB   zWidget.backspaceReceivedi   r;   r   c                 ó€   — |}t        |t        «      s|j                  d«      }t        | d|z   d «      }|�	 ||«       y y )Núutf-8Úfunc_)Ú
isinstanceÚstrÚdecodeÚgetattr)r   rG   rH   ÚnameÚfuncs        r   rD   zWidget.functionKeyReceivedl   sC   € ØˆÜ˜%¤Ô%Ø—;‘;˜wÓ'ˆDÜ�t˜W t™^¨TÓ2ˆØÐÙ��Nð r   c                  ó   — y r   r   rF   s      r   rE   zWidget.characterReceivedt   r;   r   )r   r	   r
   rO   r/   r.   r   r   r0   r2   r6   r4   r9   r=   rI   rA   rP   rR   rB   rD   rE   r   r   r   r+   r+   .   s\   „ Ø€GØ€FØ€EØÐ€EˆFò"òò+ò1òòò4òòòòòór   r+   c                   óH   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚContainerWidgetzZ
    @ivar focusedChild: The contained widget which currently has
    focus, or None.
    NFc                 ó<   — t         j                  | «       g | _        y r   )r+   r   Úchildrenr%   s    r   r   zContainerWidget.__init__�   s   € Ü�‰˜ÔØˆ�r   c                 ó  — |j                   �J ‚| |_         | j                  j                  |«       | j                  €$| j                  r	 |j                  «        || _        | j                  «        y # t        $ r Y Œw xY wr   )r/   ra   ÚappendÚfocusedChildrO   rP   r   r0   ©r   Úchilds     r   ÚaddChildzContainerWidget.addChild…   su   € Ø�|‰|Ð#Ð#Ð#ØˆŒØ�‰×Ñ˜UÔ#Ø×ÑÐ$¨¯ªð*Ø×#Ñ#Ô%ð %*�Ô!Ø�‰�øô	 ò Ùðús   Á
A2 Á2	A>Á=A>c                 óˆ   — |j                   | u sJ ‚d |_         | j                  j                  |«       | j                  «        y r   )r/   ra   Úremover0   re   s     r   ÚremChildzContainerWidget.remChild’   s6   € Ø�|‰|˜tÑ#Ð#Ð#ØˆŒØ�‰×Ñ˜UÔ#Ø�‰�r   c                 óp   — | j                   D ]  }|j                  «        Œ t        j                  | «       y r   )ra   r2   r+   )r   Úchs     r   r2   zContainerWidget.filthy˜   s*   € Ø—-‘-ò 	ˆBØ�I‰I�Kð	ä�‰�dÕr   c                 óL   — | j                   D ]  }|j                  |||«       Œ y r   )ra   r4   )r   r   r   r   rl   s        r   r9   zContainerWidget.render�   s%   € Ø—-‘-ò 	-ˆBØ�G‰G�E˜6 8Õ,ñ	-r   c                 ó  — | j                  «        | j                  �M| j                  j                  «        | j                  }d | _        	 | j                  j	                  |«      dz   }nd}|t        | j                  «      k  r3	 | j                  |   j                  «        | j                  |   | _        y t        «       ‚# t
        $ r t        «       ‚w xY w# t        $ r |dz  }Y nw xY w|t        | j                  «      k  rŒ�ŒO)Né   r   )	r0   rd   rR   ra   ÚindexÚ
ValueErrorr   ÚlenrP   )r   rd   ÚcurFocuss      r   ÚchangeFocuszContainerWidget.changeFocus¡   sð   € Ø�‰Œà×ÑÐ(Ø×Ñ×'Ñ'Ô)Ø×,Ñ,ˆLØ $ˆDÔð#ØŸ=™=×.Ñ.¨|Ó<¸qÑ@‘ð ˆHØœ˜TŸ]™]Ó+Ò+ðØ—‘˜hÑ'×5Ñ5Ô7ð %)§M¡M°(Ñ$;�Ô!Øä‹lÐøô ò #Ü “lÐ"ð#ûô ò Ø˜A‘’ðúð œ˜TŸ]™]Ó+Ó+øs   ÁC ÂC ÃCÃC)Ã(C)c                 ó2   — | j                  «        d| _        y r-   )rt   rO   r%   s    r   rP   zContainerWidget.focusReceived¹   s   € Ø×ÑÔØˆ�r   c                 óä   — | j                   �	 | j                   j                  ||«       y t
        j                  | ||«       y # t        $ r# | j                  «        | j	                  «        Y y w xY wr   )rd   rI   r   rt   r0   r+   rF   s      r   rI   z!ContainerWidget.keystrokeReceived½   sc   € Ø×ÑÐ(ðØ×!Ñ!×3Ñ3°E¸8ÕDô
 ×$Ñ$ T¨5°(Õ;øô	 ò Ø× Ñ Ô"Ø—‘–ðús   ŽA Á)A/Á.A/)r   r	   r
   r   rd   rO   r   rg   rj   r2   r9   rt   rP   rI   r   r   r   r_   r_   x   s;   „ ñð
 €LØ€Gòòòòò
-òò0ó<r   r_   c                   ó6   — e Zd ZdZdZd„ ZdZd„ Zd„ Zd„ Z	d„ Z
y)	Ú	TopWindowaM  
    A top-level container object which provides focus wrap-around and paint
    scheduling.

    @ivar painter: A no-argument callable which will be invoked when this
    widget needs to be redrawn.

    @ivar scheduler: A one-argument callable which will be invoked with a
    no-argument callable and should arrange for it to invoked at some point in
    the near future.  The no-argument callable will cause this widget and all
    its children to be redrawn.  It is typically beneficial for the no-argument
    callable to be invoked at the end of handling for whatever event is
    currently active; for example, it might make sense to call it at the end of
    L{twisted.conch.insults.insults.ITerminalProtocol.keystrokeReceived}.
    Note, however, that since calls to this may also be made in response to no
    apparent event, arrangements should be made for the function to be called
    even if an event handler such as C{keystrokeReceived} is not on the call
    stack (eg, using
    L{reactor.callLater<twisted.internet.interfaces.IReactorTime.callLater>}
    with a short timeout).
    Tc                 óJ   — t         j                  | «       || _        || _        y r   )r_   r   ÚpainterÚ	scheduler)r   rz   r{   s      r   r   zTopWindow.__init__á   s   € Ü× Ñ  Ô&ØˆŒØ"ˆ�r   Nc                 óš   — | j                   €*t        «       | _         | j                  | j                  «       t        j                  | «       y r   )Ú
_paintCallÚobjectr{   Ú_paintr_   r0   r%   s    r   r0   zTopWindow.repaintè   s3   € Ø�?‰?Ð"Ü$›hˆDŒOØ�N‰N˜4Ÿ;™;Ô'Ü×Ñ Õ%r   c                 ó2   — d | _         | j                  «        y r   )r}   rz   r%   s    r   r   zTopWindow._paintî   s   € ØˆŒØ�‰�r   c                 óš   — 	 t         j                  | «       y # t        $ r) 	 t         j                  | «       Y y # t        $ r Y Y y w xY ww xY wr   )r_   rt   r   r%   s    r   rt   zTopWindow.changeFocusò   sI   € ð	Ü×'Ñ'¨Õ-øÜò 	ðÜ×+Ñ+¨DÖ1øÜò Úðúð	ús$   ‚ ˜	A
¢9¹	AÁA
ÁAÁA
c                 ór   — 	 t         j                  | ||«       y # t        $ r | j                  «        Y y w xY wr   )r_   rI   r   rt   rF   s      r   rI   zTopWindow.keystrokeReceivedû   s4   € ð	Ü×-Ñ-¨d°E¸8ÕDøÜò 	Ø×ÑÖð	ús   ‚ š6µ6)r   r	   r
   r   rO   r   r}   r0   r   rt   rI   r   r   r   rx   rx   È   s.   „ ñð, €Gò#ð
 €Jò&òòór   rx   c                   ó   — e Zd Zd„ Zd„ Zy)ÚAbsoluteBoxc                 ó°   — t        t        | j                  «      «      D ]*  }| j                  |   d   |u sŒ|||f| j                  |<    y  t        d|«      ‚)Nr   zNo such child)Úrangerr   ra   rq   )r   rf   r"   r#   Úns        r   Ú	moveChildzAbsoluteBox.moveChild  s[   € Ü”s˜4Ÿ=™=Ó)Ó*ò 	5ˆAØ�}‰}˜QÑ Ñ" eÒ+Ø$)¨1¨a =�—‘˜aÑ Ùð	5ô
 ˜_¨eÓ4Ð4r   c                 ó~   — | j                   D ].  \  }}}t        |||z
  ||z
  ||«      }|j                  |||«       Œ0 y r   )ra   r   r4   )r   r   r   r   rl   r"   r#   Úwraps           r   r9   zAbsoluteBox.render  sE   € ØŸ™ò 	)‰HˆB��1Ü)¨(°E¸A±I¸vÈ¹zÈ1ÈaÓPˆDØ�G‰G�E˜6 4Õ(ñ	)r   N)r   r	   r
   rˆ   r9   r   r   r   r„   r„     s   „ ò5ó)r   r„   c                   ó:   — e Zd Z ed«      \  ZZZefd„Zd„ Zd„ Z	y)Ú_Boxé   c                 ó<   — t         j                  | «       || _        y r   )r_   r   Úgravity)r   r�   s     r   r   z_Box.__init__  s   € Ü× Ñ  Ô&Øˆ�r   c                 ó,  — d}d}| j                   D ]~  }|j                  «       }|€d}| j                  dk(  r-|d   €d }n
|�||d   z  }|d   €d }Œ@|€ŒCt        ||d   «      }ŒS|d   €d }n|�t        ||d   «      }|d   €d }Œt|€Œw||d   z  }Œ€ ||fS )Nr   ©NNro   )ra   r=   ÚvariableDimensionÚmax)r   r   r   rl   Úhints        r   r=   z_Box.sizeHint  sÚ   € ØˆØˆØ—-‘-ò 	&ˆBØ—;‘;“=ˆDØˆ|Ø#�à×%Ñ%¨Ò*Ø˜‘7�?Ø ‘EØÐ&Ø˜T !™WÑ$�EØ˜‘7�?Ø!‘FØÑ'Ü  ¨¨a©Ó1‘Fà˜‘7�?Ø ‘EØÐ&Ü  t¨A¡wÓ/�EØ˜‘7�?Ø!‘FØÑ'Ø˜d 1™gÑ%‘Fð-	&ð0 �fˆ}Ðr   c                 ó4  — | j                   sy d}g }| j                   D ]H  }|j                  «       }|€d}|| j                     €|dz  }|j                  || j                     «       ŒJ ||f| j                     }t	        d„ |D «       «      }	|rt        ||	z
  |z  «      }
dx}}t        || j                   «      D ]]  \  }}|€
}||}}| j                  dk(  r|}n|}t        |||||«      }|j                  |||«       | j                  dk(  r||z  }ŒY||z  }Œ_ y )Nr   r‘   ro   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr   r   )Ú.0Úws     r   ú	<genexpr>z_Box.render.<locals>.<genexpr>D  s   è ø€ Ò:˜a¨A©MœÑ:ùs   ‚Š)	ra   r=   r’   rc   ÚsumÚintÚzipr   r4   )r   r   r   r   ÚgreedyÚwantsrl   r”   ÚlengthÚ	totalWantÚleftForGreedyÚwidthOffsetÚheightOffsetÚwantÚsubWidthÚ	subHeightrŠ   s                    r   r9   z_Box.render5  sL  € Ø�}Š}ØàˆØˆØ—-‘-ò 	7ˆBØ—;‘;“=ˆDØˆ|Ø#�Ø�D×*Ñ*Ñ+Ð3Ø˜!‘�Ø�L‰L˜˜d×4Ñ4Ñ5Õ6ð	7ð ˜� ×!7Ñ!7Ñ8ˆÜÑ: 5Ô:Ó:ˆ	ÙÜ ¨)Ñ!3°vÑ =Ó>ˆMà%&Ð&ˆ�lä˜E 4§=¡=Ó1ò 	%‰HˆD�"Øˆ|Ø$�à"'¨�iˆHØ×%Ñ%¨Ò*Ø‘à �	ä)ØØØØØóˆDð �G‰G�H˜i¨Ô.Ø×%Ñ%¨Ò*Ø˜tÑ#‘à Ñ$‘ñ+	%r   N)
r   r	   r
   r†   ÚTOPÚCENTERÚBOTTOMr   r=   r9   r   r   r   rŒ   rŒ     s$   „ Ù ›(Ñ€Cˆ�à%ó òó:*%r   rŒ   c                   ó   — e Zd ZdZy)ÚHBoxr   N©r   r	   r
   r’   r   r   r   r«   r«   b  ó   „ ØÑr   r«   c                   ó   — e Zd ZdZy)ÚVBoxro   Nr¬   r   r   r   r¯   r¯   f  r­   r   r¯   c                   ó   — e Zd Zd„ Zy)ÚPackerc                 ó�  — | j                   sy t        t        | j                   «      dz  dz   «      }t        |«      D �cg c]  }t	        «       ‘Œ }}t        | j                   «      D ]%  \  }}||t        |«      z     j                  |«       Œ' t        «       }t        |j                  |«       |j                  |||«       y c c}w )Ng      à?)
ra   r›   rr   r†   r¯   Ú	enumeraterg   r«   Úmapr9   )	r   r   r   r   Úrootr‡   Úboxesrl   Úhs	            r   r9   zPacker.renderk  s£   € Ø�}Š}Øä”3�t—}‘}Ó%¨Ñ,¨sÑ2Ó3ˆÜ!& t£Ö-˜A”•Ð-ˆÐ-Ü˜tŸ}™}Ó-ò 	/‰EˆAˆrØ�!”c˜%“j‘.Ñ!×*Ñ*¨2Õ.ð	/ä‹FˆÜˆA�J‰J˜ÔØ	�‰�˜ Õ)ùò .s   ¿CN)r   r	   r
   r9   r   r   r   r±   r±   j  s   „ ó
*r   r±   c                   ó8   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y)	ÚCanvasFNc                 óR   — t         j                  | «       | j                  dd«       y ©Nro   )r+   r   Úresizer%   s    r   r   zCanvas.__init__}  s   € Ü�‰˜ÔØ�‰�A�qÕr   c                 ó”  — t        j                   dd|z  |z  «      }| j                  �Xt        t        || j                  «      «      D ]6  }t        t        || j
                  «      «      D ]  }| ||f   |||z  |z   <   Œ Œ8 || _        || _        || _        | j                  |k\  r
|dz
  | _        | j                  |k\  r|dz
  | _        y y )NÚBó    ro   )ÚarrayÚcontentsr†   r!   Ú_widthÚ_heightr"   r#   )r   r   r   rÁ   r"   r#   s         r   r¼   zCanvas.resize�  sÆ   € Ü—;‘;˜s D¨5¡L°6Ñ$9Ó:ˆØ�=‰=Ð$Üœ3˜u d§k¡kÓ2Ó3ò 9�Üœs 6¨4¯<©<Ó8Ó9ò 9�AØ.2°1°a°4©j�H˜U Q™Y¨™]Ò+ñ9ð9ð !ˆŒØˆŒØˆŒØ�6‰6�UŠ?Ø˜Q‘YˆDŒFØ�6‰6�VÒØ˜a‘ZˆD�Fð r   c                 óJ   — |\  }}| j                   | j                  |z  |z      S r   ©rÁ   rÂ   )r   rp   r"   r#   s       r   Ú__getitem__zCanvas.__getitem__�  s'   € Ø‰ˆˆAØ�}‰}˜dŸk™k¨A™o°Ñ2Ñ3Ð3r   c                 óL   — |\  }}|| j                   | j                  |z  |z   <   y r   rÅ   )r   rp   Úvaluer"   r#   s        r   Ú__setitem__zCanvas.__setitem__“  s&   € Ø‰ˆˆAØ/4ˆ�‰�t—{‘{ Q‘¨!Ñ+Ò,r   c                 óf   — t        j                   ddt        | j                  «      z  «      | _        y )Nr¾   r¿   )rÀ   rr   rÁ   r%   s    r   ÚclearzCanvas.clear—  s"   € ÜŸ™ C¨´°D·M±MÓ0BÑ)BÓCˆ�r   c                 óf  — |r|sy || j                   k7  s|| j                  k7  r| j                  ||«       t        |«      D ]n  }|j	                  d|«       | j
                  | j                   |z  | j                   |z  | j                   z    j                  «       }|d | }|j                  |«       Œp y ©Nr   )rÂ   rÃ   r¼   r†   r    rÁ   Útobytesr(   )r   r   r   r   Úir   s         r   r9   zCanvas.renderš  s¡   € Ù™FØà�D—K‘KÒ 6¨T¯\©\Ò#9Ø�K‰K˜˜vÔ&Ü�v“ò 	!ˆAØ×#Ñ# A qÔ)Ø—=‘=Ø—‘˜a‘ $§+¡+°¡/°D·K±KÑ"?ðç‰g‹ið ð ˜˜�<ˆDØ�N‰N˜4Õ ñ	!r   )r   r	   r
   rO   rÁ   r   r¼   rÆ   rÉ   rË   r9   r   r   r   r¹   r¹   x  s+   „ Ø€Gà€Hòò ò4ò5òDó!r   r¹   c                 ó  — | j                  t        j                  t        j                  «       | j	                  ||«       | j                  d||z
  z  «       | j                  t        j                  t        j                  «       y )Nó   q)r   r   Ú
CS_DRAWINGÚG0r    r(   ÚCS_US)r   r#   ÚleftÚrights       r   ÚhorizontalLiner×   ©  sY   € Ø×Ñ¤× 2Ñ 2´G·J±JÔ?Ø×Ñ˜D !Ô$Ø‡N�N�7˜e d™lÑ+Ô,Ø×Ñ¤§¡¬w¯z©zÕ:r   c                 ó$  — | j                  t        j                  t        j                  «       t	        ||«      D ]%  }| j                  ||«       | j                  d«       Œ' | j                  t        j                  t        j                  «       y )Nó   x)r   r   rÒ   rÓ   r†   r    r(   rÔ   )r   r"   ÚtopÚbottomr‡   s        r   ÚverticalLinerÜ   °  sh   € Ø×Ñ¤× 2Ñ 2´G·J±JÔ?Ü�3˜Óò  ˆØ×Ñ  1Ô%Ø�‰�wÕð ð ×Ñ¤§¡¬w¯z©zÕ:r   c                 óÊ  — |\  }}|\  }}| j                  t        j                  t        j                  «       | j	                  ||«       | j                  d«       | j                  d|dz
  z  «       | j                  d«       t        |dz
  «      D ]P  }| j	                  |||z   dz   «       | j                  d«       | j                  |dz
  «       | j                  d«       ŒR | j	                  d||z   dz
  «       | j                  d«       | j                  d|dz
  z  «       | j                  d	«       | j                  t        j                  t        j                  «       y
)zð
    Draw a rectangle

    @type position: L{tuple}
    @param position: A tuple of the (top, left) coordinates of the rectangle.
    @type dimension: L{tuple}
    @param dimension: A tuple of the (width, height) size of the rectangle.
    ó   lrÑ   é   ó   kro   rÙ   r   ó   mó   jN)	r   r   rÒ   rÓ   r    r(   r†   r   rÔ   )r   ÚpositionÚ	dimensionrÚ   rÕ   r   r   r‡   s           r   Ú	rectanglerå   ¸  s'  € ð �K€Sˆ$Ø�O€UˆFØ×Ñ¤× 2Ñ 2´G·J±JÔ?à×Ñ˜C Ô&Ø‡N�N�7ÔØ‡N�N�7˜e a™iÑ(Ô)Ø‡N�N�7ÔÜ�6˜A‘:Óò  ˆØ×Ñ  c¨A¡g°¡kÔ2Ø�‰�wÔØ×Ñ˜u q™yÔ)Ø�‰�wÕð	 ð
 ×Ñ˜A˜s V™|¨aÑ/Ô0Ø‡N�N�7ÔØ‡N�N�7˜e a™iÑ(Ô)Ø‡N�N�7Ôà×Ñ¤§¡¬w¯z©zÕ:r   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚBorderc                 ó^   — t         j                  | «       || _        | | j                  _        y r   )r+   r   Ú	containeer/   ©r   ré   s     r   r   zBorder.__init__×  s!   € Ü�‰˜ÔØ"ˆŒØ $ˆ�‰Õr   c                 ó6   — | j                   j                  «       S r   )ré   rP   r%   s    r   rP   zBorder.focusReceivedÜ  s   € Ø�~‰~×+Ñ+Ó-Ð-r   c                 ó6   — | j                   j                  «       S r   )ré   rR   r%   s    r   rR   zBorder.focusLostß  s   € Ø�~‰~×'Ñ'Ó)Ð)r   c                 ó:   — | j                   j                  ||«      S r   )ré   rI   rF   s      r   rI   zBorder.keystrokeReceivedâ  s   € Ø�~‰~×/Ñ/°°xÓ@Ð@r   c                 óŒ   — | j                   j                  «       }|€d}|d   €d }n|d   dz   }|d   €d }||fS |d   dz   }||fS )Nr‘   r   rß   ro   )ré   r=   )r   r”   r"   r#   s       r   r=   zBorder.sizeHintå  sj   € Ø�~‰~×&Ñ&Ó(ˆØˆ<ØˆDØ�‰7ˆ?Ø‰Aà�Q‘˜!‘ˆAØ�‰7ˆ?ØˆAð �!ˆtˆð �Q‘˜!‘ˆAØ�!ˆtˆr   c                 ób   — | j                   j                  «        t        j                  | «       y r   ©ré   r2   r+   r%   s    r   r2   zBorder.filthyó  ó   € Ø�‰×ÑÔÜ�‰�dÕr   c                 ó  — | j                   j                  r|j                  d«       t        |d||f«       |j                  d«       t	        ||dz
  |dz
  dd«      }| j                   j                  |dz
  |dz
  |«       y )Nó   [31m)r   r   ó   [0mrß   ro   )ré   rO   r(   rå   r   r4   )r   r   r   r   rŠ   s        r   r9   zBorder.render÷  so   € Ø�>‰>×!Ò!Ø�N‰N˜;Ô'Ü�(˜F U¨F OÔ4Ø�‰�zÔ"Ü% h°¸±	¸6ÀA¹:ÀqÈ!ÓLˆØ�‰×Ñ˜E A™I v°¡z°4Õ8r   N)
r   r	   r
   r   rP   rR   rI   r=   r2   r9   r   r   r   rç   rç   Ö  s&   „ ò%ò
.ò*òAòòó9r   rç   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚButtonc                 óJ   — t         j                  | «       || _        || _        y r   )r+   r   ÚlabelÚonPress)r   rø   rù   s      r   r   zButton.__init__  s   € Ü�‰˜ÔØˆŒ
Øˆ�r   c                 ó0   — t        | j                  «      dfS r»   )rr   rø   r%   s    r   r=   zButton.sizeHint  s   € Ü�4—:‘:‹ Ð!Ð!r   c                 ó0   — |dk(  r| j                  «        y y ©Nó   )rù   rF   s      r   rE   zButton.characterReceived	  s   € Ø�EŠ>Ø�L‰L�Nð r   c                 óº   — |j                  dd«       | j                  r"|j                  d| j                  z   dz   «       y |j                  | j                  «       y )Nr   s   [1mrô   )r    rO   r(   rø   r5   s       r   r9   zButton.render  sC   € Ø×Ñ  1Ô%Ø�<Š<Ø�N‰N˜:¨¯
©
Ñ2°ZÑ?Õ@à�N‰N˜4Ÿ:™:Õ&r   N)r   r	   r
   r   r=   rE   r9   r   r   r   rö   rö      s   „ òò
"òó'r   rö   c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)Ú	TextInputc                 óf   — t         j                  | «       || _        || _        d| _        d| _        y )Nr   r   )r+   r   ÚonSubmitÚmaxwidthÚbufferÚcursor)r   r  r  s      r   r   zTextInput.__init__  s*   € Ü�‰˜ÔØ ˆŒØ ˆŒØˆŒØˆ�r   c                 ó€   — |d | j                    | _        t        | j                  «      | _        | j	                  «        y r   )r  r  rr   r  r0   ©r   r   s     r   ÚsetTextzTextInput.setText  s-   € Ø˜?˜TŸ]™]Ð+ˆŒÜ˜$Ÿ+™+Ó&ˆŒØ�‰�r   c                 ón   — | j                   dkD  r&| xj                   dz  c_         | j                  «        y y ©Nr   ro   )r  r0   rL   s     r   Úfunc_LEFT_ARROWzTextInput.func_LEFT_ARROW"  s)   € Ø�;‰;˜Š?Ø�KŠK˜1Ñ�KØ�L‰L�Nð r   c                 ó”   — | j                   t        | j                  «      k  r&| xj                   dz  c_         | j                  «        y y r»   )r  rr   r  r0   rL   s     r   Úfunc_RIGHT_ARROWzTextInput.func_RIGHT_ARROW'  s3   € Ø�;‰;œ˜TŸ[™[Ó)Ò)Ø�KŠK˜1Ñ�KØ�L‰L�Nð *r   c                 óä   — | j                   dkD  ra| j                  d | j                   dz
   | j                  | j                   d  z   | _        | xj                   dz  c_         | j                  «        y y r
  )r  r  r0   r%   s    r   rB   zTextInput.backspaceReceived,  sX   € Ø�;‰;˜Š?ØŸ+™+Ð&7¨¯©°a©Ð8¸4¿;¹;ÀtÇ{Á{À}Ð;UÑUˆDŒKØ�KŠK˜1Ñ�KØ�L‰L�Nð r   c                 óL  — |dk(  r| j                  | j                  «       y t        | j                  «      | j                  k  ra| j                  d | j                   |z   | j                  | j                  d  z   | _        | xj                  dz  c_        | j                  «        y y )Nrý   ro   )r  r  rr   r  r  r0   rF   s      r   rE   zTextInput.characterReceived2  s~   € Ø�EŠ>Ø�M‰M˜$Ÿ+™+Õ&ä�4—;‘;Ó $§-¡-Ò/à—K‘K  $§+¡+Ð.°Ñ6¸¿¹ÀTÇ[Á[À]Ð9SÑSð ”ð —’˜qÑ •Ø—‘•ð 0r   c                 ó$   — | j                   dz   dfS r»   )r  r%   s    r   r=   zTextInput.sizeHint=  s   € Ø�}‰}˜qÑ  !Ð#Ð#r   c                 óì  — | j                  «       }|j                  dd«       | j                  r—|j                  |d | j                   «       t	        ||| j                  | j                  dz    xs d«       |j                  || j                  dz   d  «       |j                  d| j
                  t        |«      z
  dz   z  «       y | j
                  t        |«      z
  }|j                  |d|z  z   «       y )Nr   ro   r¿   ó   _)Ú_renderTextr    rO   r(   r  r  rr   )r   r   r   r   ÚcurrentTextÚmores         r   r9   zTextInput.render@  sÈ   € Ø×&Ñ&Ó(ˆØ×Ñ  1Ô%Ø�<Š<Ø�N‰N˜; }¨¯©Ð5Ô6Ü�8˜[¨¯©°t·{±{ÀQ±ÐGÒOÈ4ÔPØ�N‰N˜; t§{¡{°Q¡Ð'8Ð9Ô:Ø�N‰N˜4 4§=¡=´3°{Ó3CÑ#CÀaÑ#GÑHÕIà—=‘=¤3 {Ó#3Ñ3ˆDØ�N‰N˜;¨°©Ñ4Õ5r   c                 ó   — | j                   S r   )r  r%   s    r   r  zTextInput._renderTextL  s   € Ø�{‰{Ðr   N)r   r	   r
   r   r  r  r  rB   rE   r=   r9   r  r   r   r   r   r     s/   „ òòò
ò
ò
ò	ò$ò
6ór   r   c                   ó   — e Zd Zd„ Zy)ÚPasswordInputc                 ó2   — dt        | j                  «      z  S )NÚ*)rr   r  r%   s    r   r  zPasswordInput._renderTextQ  s   € Ø”S˜Ÿ™Ó%Ñ%Ð%r   N)r   r	   r
   r  r   r   r   r  r  P  s   „ ó&r   r  c                   ó0   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zy)	Ú
TextOutputr   Nc                 ó<   — t         j                  | «       || _        y r   )r+   r   Úsize)r   r  s     r   r   zTextOutput.__init__X  s   € Ü�‰˜ÔØˆ�	r   c                 ó   — | j                   S r   )r  r%   s    r   r=   zTextOutput.sizeHint\  s   € Ø�y‰yÐr   c                 óŒ   — |j                  dd«       | j                  d | }|j                  |d|t        |«      z
  z  z   «       y ©Nr   r¿   )r    r   r(   rr   )r   r   r   r   r   s        r   r9   zTextOutput.render_  sA   € Ø×Ñ  1Ô%Ø�y‰y˜˜%Ð ˆØ�‰�t˜d e¬c°$«iÑ&7Ñ8Ñ8Õ9r   c                 ó2   — || _         | j                  «        y r   )r   r0   r  s     r   r  zTextOutput.setTextd  s   € ØˆŒ	Ø�‰�r   c                 ó   — t        «       ‚r   rK   r%   s    r   rP   zTextOutput.focusReceivedh  s
   € Ü‹lÐr   r   )	r   r	   r
   r   r   r=   r9   r  rP   r   r   r   r  r  U  s    „ Ø€Dóòò:ò
ór   r  c                   ó4   — e Zd Z ed«      \  ZZdefd„Zd„ Zy)ÚTextOutputArearß   Nc                 ó>   — t         j                  | |«       || _        y r   )r  r   Ú	longLines)r   r  r'  s      r   r   zTextOutputArea.__init__o  s   € Ü×Ñ˜D $Ô'Ø"ˆ�r   c                 ó‚  — d}| j                   j                  «       }g }|ræ| j                  | j                  k(  r˜|j	                  d«      }t        |t        «      s|j                  d«      }g }t        j                  ||«      D ]4  }	t        |	t        «      s|	j                  d«      }	|j                  |	«       Œ6 |j                  |xs dg«       n#|j                  |j	                  d«      d | «       t        |«      |k\  rn|rŒæt        |d | «      D ](  \  }}
|j!                  d|«       |j#                  |
«       Œ* y )Nr   rU   r   )r   Ú
splitlinesr'  ÚWRAPÚpoprW   rX   rY   ÚtptextÚ
greedyWrapÚbytesÚencoderc   Úextendrr   r³   r    r(   )r   r   r   r   r‡   Ú
inputLinesÚoutputLinesÚlineÚwrappedLinesÚwrappedLineÚLs              r   r9   zTextOutputArea.renders  s'  € ØˆØ—Y‘Y×)Ñ)Ó+ˆ
ØˆÙØ�~‰~ §¡Ò*Ø!—~‘~ aÓ(�Ü! $¬Ô,ØŸ;™; wÓ/�DØ!�Ü#)×#4Ñ#4°T¸5Ó#Aò 5�KÜ% k´5Ô9Ø&1×&8Ñ&8¸Ó&A˜Ø ×'Ñ'¨Õ4ð5ð ×"Ñ" <Ò#8°C°5Õ9à×"Ñ" :§>¡>°!Ó#4°V°eÐ#<Ô=Ü�;Ó 6Ò)Øò ô ˜k¨'¨6Ð2Ó3ò 	‰DˆAˆqØ×#Ñ# A qÔ)Ø�N‰N˜1Õñ	r   )r   r	   r
   r†   r*  ÚTRUNCATEr   r9   r   r   r   r%  r%  l  s   „ Ù˜1“X�N€Dˆ(à ¨Dó #ór   r%  c                   ó–   — e Zd ZdZdZed„ «       Zej                  d„ «       Zed„ «       Zej                  d„ «       ZdZ	dZ
d„ Zd	„ Zd
„ Zy)ÚViewportr   c                 ó   — | j                   S r   )Ú_xOffsetr%   s    r   ÚxOffsetzViewport.xOffset�  ó   € à�}‰}Ðr   c                 óR   — | j                   |k7  r|| _         | j                  «        y y r   )r;  r0   ©r   rÈ   s     r   r<  zViewport.xOffset“  ó#   € à�=‰=˜EÒ!Ø!ˆDŒMØ�L‰L�Nð "r   c                 ó   — | j                   S r   )Ú_yOffsetr%   s    r   ÚyOffsetzViewport.yOffset™  r=  r   c                 óR   — | j                   |k7  r|| _         | j                  «        y y r   )rB  r0   r?  s     r   rC  zViewport.yOffset�  r@  r   é    é   c                 ó0  — t         j                  | «       || _        | | j                  _        t	        j
                  «       | _        | j                  | j                  _        | j                  | j                  _
        | j                  j                  «        y r   )r+   r   ré   r/   r   ÚTerminalBufferÚ_bufrÂ   r   rÃ   r   ÚconnectionMaderê   s     r   r   zViewport.__init__¦  s`   € Ü�‰˜ÔØ"ˆŒØ $ˆ�‰Ôä×)Ñ)Ó+ˆŒ	ØŸ+™+ˆ�	‰	ŒØŸ<™<ˆ�	‰	ÔØ�	‰	× Ñ Õ"r   c                 ób   — | j                   j                  «        t        j                  | «       y r   rð   r%   s    r   r2   zViewport.filthy°  rñ   r   c                 ó  — | j                   j                  | j                  | j                  | j                  «       t        | j                  j                  | j                  | j                  |z    «      D ]”  \  }}|j                  d|«       d}t        || j                  | j                  |z    «      D ]3  \  }\  }}|| j                  j                  u rd}|j                  |«       Œ5 ||k  sŒ{|j                  d||z
  dz
  z  «       Œ– y )Nr   r¿   ro   )ré   r4   rÂ   rÃ   rI  r³   ÚlinesrB  r    r;  Úvoidr(   )	r   r   r   r   r#   r3  r‡   rl   Úattrs	            r   r9   zViewport.render´  sè   € Ø�‰×Ñ˜DŸK™K¨¯©°t·y±yÔAô !Ø�I‰I�O‰O˜DŸM™M¨D¯M©M¸FÑ,BÐCó
ò 
	7‰GˆAˆtð ×#Ñ# A qÔ)ØˆAÜ!*¨4°·±ÀÇÁÐPUÑ@UÐ+VÓ!Wò #‘�‘:�B˜Ø˜Ÿ™Ÿ™Ñ'Ø�BØ—‘˜rÕ"ð#ð �5‹yØ—‘˜t u¨q¡y°1¡}Ñ5Õ6ñ
	7r   N)r   r	   r
   r;  rB  Úpropertyr<  ÚsetterrC  rÂ   rÃ   r   r2   r9   r   r   r   r9  r9  ‹  s}   „ Ø€HØ€Hàñó ðð ‡^�^ñó ðð
 ñó ðð ‡^�^ñó ðð
 €FØ€Gò#òó7r   r9  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú
_Scrollbarc                 óJ   — t         j                  | «       || _        d| _        y )Nç        )r+   r   ÚonScrollÚpercent)r   rV  s     r   r   z_Scrollbar.__init__Æ  s   € Ü�‰˜ÔØ ˆŒØˆ�r   c           	      óx   — t        dt        d| j                  d«      «      «      | _        | j	                  «        y )Nç      ð?rU  éÿÿÿÿ©r!   r“   rV  rW  r0   r%   s    r   Úsmallerz_Scrollbar.smallerË  ó)   € Ü˜3¤ C¨¯©°rÓ):Ó ;Ó<ˆŒØ�‰�r   c           	      óx   — t        dt        d| j                  d«      «      «      | _        | j	                  «        y )NrY  rU  ro   r[  r%   s    r   Úbiggerz_Scrollbar.biggerÏ  r]  r   N)r   r	   r
   r   r\  r_  r   r   r   rS  rS  Å  s   „ òò
ór   rS  c                   ó4   — e Zd Zd„ Zd„ Zd„ ZdZdZdZdZ	d„ Z
y	)
ÚHorizontalScrollbarc                  ó   — y)Nr»   r   r%   s    r   r=   zHorizontalScrollbar.sizeHintÕ  ó   € Ør   c                 ó$   — | j                  «        y r   ©r\  rL   s     r   r  z#HorizontalScrollbar.func_LEFT_ARROWØ  ó   € Ø�‰�r   c                 ó$   — | j                  «        y r   ©r_  rL   s     r   r  z$HorizontalScrollbar.func_RIGHT_ARROWÛ  ó   € Ø�‰�r   u   â—€u   â–¶õ   â–‘õ   â–“c                 ó8  — |j                  dd«       |dz
  }t        || j                  z  «      }||z
  }| j                  | j                  |z  z   | j
                  z   | j                  |z  z   | j                  z   }|j                  |j                  d«      «       y )Nr   r�   rU   )	r    r›   rW  Ú_leftÚ_barÚ_sliderÚ_rightr(   r/  )r   r   r   r   r‡   ÚbeforeÚafterÚmes           r   r9   zHorizontalScrollbar.renderã  s˜   € Ø×Ñ  1Ô%Ø�A‰IˆÜ�Q˜Ÿ™Ñ%Ó&ˆØ�F‘
ˆà�J‰JØ�y‰y˜6Ñ!ñ#à�l‰lñð �y‰y˜5Ñ ñ"ð �k‰kñ	ð 	ð 	�‰�r—y‘y Ó)Õ*r   N)r   r	   r
   r=   r  r  rm  rp  rn  ro  r9   r   r   r   ra  ra  Ô  s,   „ òòòð /€EØ0€FØ€DØ€Gó+r   ra  c                   ó4   — e Zd Zd„ Zd„ Zd„ ZdZdZdZdZ	d„ Z
y	)
ÚVerticalScrollbarc                  ó   — y)N)ro   Nr   r%   s    r   r=   zVerticalScrollbar.sizeHintó  rc  r   c                 ó$   — | j                  «        y r   re  rL   s     r   Úfunc_UP_ARROWzVerticalScrollbar.func_UP_ARROWö  rf  r   c                 ó$   — | j                  «        y r   rh  rL   s     r   Úfunc_DOWN_ARROWz!VerticalScrollbar.func_DOWN_ARROWù  ri  r   u   â–²u   â–¼rj  rk  c                 ó6  — |j                  dd«       t        | j                  |dz
  z  «      }|j                  | j                  j                  d«      «       t        d|dz
  «      D ]q  }|j                  d|«       ||dz   k7  r+|j                  | j                  j                  d«      «       ŒH|j                  | j                  j                  d«      «       Œs |j                  d|dz
  «       |j                  | j                  j                  d«      «       y )Nr   rß   rU   ro   )
r    r›   rW  r(   Ú_upr/  r†   rn  ro  Ú_down)r   r   r   r   ÚknobrÏ   s         r   r9   zVerticalScrollbar.render  sÞ   € Ø×Ñ  1Ô%Ü�4—<‘< 6¨A¡:Ñ.Ó/ˆØ�‰�t—x‘x—‘ wÓ/Ô0Ü�q˜& 1™*Ó%ò 	=ˆAØ×#Ñ# A qÔ)Ø�T˜A‘XŠØ—‘˜tŸy™y×/Ñ/°Ó8Õ9à—‘˜tŸ|™|×2Ñ2°7Ó;Õ<ð	=ð 	×Ñ  6¨A¡:Ô.Ø�‰�t—z‘z×(Ñ(¨Ó1Õ2r   N)r   r	   r
   r=   rx  rz  r|  r}  rn  ro  r9   r   r   r   ru  ru  ò  s,   „ òòòð +€CØ.€EØ€DØ€Gó3r   ru  c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
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.
    c                 ó  — t         j                  | «       t        |«      | _        t	        | j
                  «      | _        t        | j                  «      | _	        | j                  | j                  | j                  fD ]	  }| |_
        Œ y r   )r+   r   r9  Ú	_viewportra  Ú_horizScrollÚ_horizru  Ú_vertScrollÚ_vertr/   )r   ré   r˜   s      r   r   zScrolledArea.__init__  sg   € Ü�‰˜ÔÜ! )Ó,ˆŒÜ)¨$×*;Ñ*;Ó<ˆŒÜ& t×'7Ñ'7Ó8ˆŒ
à—‘ §¡¨d¯j©jÐ8ò 	ˆAØˆA�Hñ	r   c                 óÐ   — | j                   xj                  |z  c_        t        d| j                   j                  «      | j                   _        | j                   j                  dz  S ©Nr   g      9@)r‚  r<  r“   ©r   r‡   s     r   rƒ  zScrolledArea._horizScroll  óI   € Ø�‰×Ò !Ñ#ÕÜ!$ Q¨¯©×(>Ñ(>Ó!?ˆ�‰ÔØ�~‰~×%Ñ%¨Ñ,Ð,r   c                 óÐ   — | j                   xj                  |z  c_        t        d| j                   j                  «      | j                   _        | j                   j                  dz  S rˆ  )r‚  rC  r“   r‰  s     r   r…  zScrolledArea._vertScroll#  rŠ  r   c                 ó8   — | j                   j                  «        y r   )r†  r\  rL   s     r   rx  zScrolledArea.func_UP_ARROW(  s   € Ø�
‰
×ÑÕr   c                 ó8   — | j                   j                  «        y r   )r†  r_  rL   s     r   rz  zScrolledArea.func_DOWN_ARROW+  s   € Ø�
‰
×ÑÕr   c                 ó8   — | j                   j                  «        y r   )r„  r\  rL   s     r   r  zScrolledArea.func_LEFT_ARROW.  s   € Ø�‰×ÑÕr   c                 ó8   — | j                   j                  «        y r   )r„  r_  rL   s     r   r  zScrolledArea.func_RIGHT_ARROW1  s   € Ø�‰×ÑÕr   c                 óÊ   — | j                   j                  «        | j                  j                  «        | j                  j                  «        t        j                  | «       y r   )r‚  r2   r„  r†  r+   r%   s    r   r2   zScrolledArea.filthy4  s>   € Ø�‰×ÑÔØ�‰×ÑÔØ�
‰
×ÑÔÜ�‰�dÕr   c                 óÔ  — t        ||dz
  |dz
  dd«      }| j                  j                  |dz
  |dz
  |«       | j                  r|j	                  d«       t        |dd|dz
  «       t        |dd|dz
  «       | j                  j                  d|dz
  t        |d|dz
  |dz
  d«      «       | j                  j                  |dt        ||dd|dz
  «      «       |j	                  d«       y )Nrß   ro   ró   r   rô   )	r   r‚  r4   rO   r(   r×   rÜ   r†  r„  )r   r   r   r   Úwrappers        r   r9   zScrolledArea.render:  sß   € Ü(¨°5¸1±9¸fÀq¹jÈ!ÈQÓOˆØ�‰×Ñ˜E A™I v°¡z°7Ô;Ø�<Š<Ø�N‰N˜;Ô'Ü�x  A u¨q¡yÔ1Ü�X˜q ! V¨a¡ZÔ0Ø�
‰
�‰Øˆv˜‰zÔ1°(¸A¸vÈ¹zÈ5ÐSTÉ9ÐVWÓXô	
ð 	�‰×ÑØ�1Ô,¨X°u¸aÀÀFÈQÁJÓOô	
ð 	�‰�zÕ"r   N)r   r	   r
   r   r   rƒ  r…  rx  rz  r  r  r2   r9   r   r   r   r€  r€    s4   „ ñò
ò-ò
-ò
òòòòó#r   r€  c                 óÖ   — | j                  «        | j                  t        t        j                  «      «       | j                  |«       | j                  «        | j                  «        y r   )r   r   rX   r   ÚREVERSE_VIDEOr(   r   r   )r   rl   s     r   r  r  J  sK   € Ø×ÑÔØ×#Ñ#¤C¬×(=Ñ(=Ó$>Ô?Ø‡N�N�2ÔØ×ÑÔØ×ÑÕr   c                   óF   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)Ú	Selectionr   Nc                 ó®   — t         j                  | «       || _        || _        || _        |�)t        t        t        | j                  «      «      | _        y y r   )	r+   r   ÚsequenceÚonSelectÚ
minVisibler“   r´   rr   rÂ   )r   r˜  r™  rš  s       r   r   zSelection.__init__Y  sE   € Ü�‰˜ÔØ ˆŒØ ˆŒØ$ˆŒØÐ!Üœc¤# t§}¡}Ó5Ó6ˆD�Kð "r   c                 óL   — | j                   �| j                  | j                   fS y r   )rš  rÂ   r%   s    r   r=   zSelection.sizeHinta  s$   € Ø�?‰?Ð&Ø—;‘; §¡Ð/Ð/ð 'r   c                 ó¶   — | j                   dkD  rJ| xj                   dz  c_         | j                  dkD  r| xj                  dz  c_        | j                  «        y y r
  )ÚfocusedIndexÚrenderOffsetr0   rL   s     r   rx  zSelection.func_UP_ARROWe  sN   € Ø×Ñ˜qÒ Ø×Ò Ñ"ÕØ× Ñ  1Ò$Ø×!Ò! QÑ&Õ!Ø�L‰L�Nð	 !r   c                 óà   — | j                   dk7  r'| xj                  | j                   z  c_        d| _         n(t        d| j                  | j                  z
  «      | _        | j	                  «        y rÍ   )rž  r�  r“   r   r0   rL   s     r   Ú	func_PGUPzSelection.func_PGUPl  sV   € Ø×Ñ Ò!Ø×Ò ×!2Ñ!2Ñ2ÕØ !ˆDÕä # A t×'8Ñ'8¸4¿;¹;Ñ'FÓ GˆDÔØ�‰�r   c                 óü   — | j                   t        | j                  «      dz
  k  rW| xj                   dz  c_         | j                  | j                  dz
  k  r| xj                  dz  c_        | j                  «        y y r»   )r�  rr   r˜  rž  r   r0   rL   s     r   rz  zSelection.func_DOWN_ARROWt  sd   € Ø×Ñœs 4§=¡=Ó1°AÑ5Ò5Ø×Ò Ñ"ÕØ× Ñ  4§;¡;°¡?Ò2Ø×!Ò! QÑ&Õ!Ø�L‰L�Nð	 6r   c                 óø  — | j                   | j                  dz
  k7  r�| j                  | j                   z
  dz
  }|| j                  z   t        | j                  «      k\  r%t        | j                  «      | j                  z
  dz
  }| xj                  |z  c_        | j                  dz
  | _         n>t        t        | j                  «      dz
  | j                  | j                  z   «      | _        | j                  «        y r»   )rž  r   r�  rr   r˜  r!   r0   )r   rH   Úchanges      r   Ú	func_PGDNzSelection.func_PGDN{  sÆ   € Ø×Ñ §¡¨a¡Ò/Ø—[‘[ 4×#4Ñ#4Ñ4°qÑ8ˆFØ˜×)Ñ)Ñ)¬S°·±Ó-?Ò?Ü˜TŸ]™]Ó+¨d×.?Ñ.?Ñ?À!ÑC�Ø×Ò Ñ'ÕØ $§¡¨a¡ˆDÕä #Ü�D—M‘MÓ" QÑ&¨×(9Ñ(9¸D¿K¹KÑ(Gó!ˆDÔð 	�‰�r   c                 ó`   — |dk(  r)| j                  | j                  | j                     «       y y rü   )r™  r˜  r�  rF   s      r   rE   zSelection.characterReceivedˆ  s)   € Ø�EŠ>Ø�M‰M˜$Ÿ-™-¨×(9Ñ(9Ñ:Õ;ð r   c           	      óÊ  — || _         | j                  | j                  z
  }|t        | j                  «      |z
  kD  r"t        dt        | j                  «      |z
  «      }| j                  |||z    }t        |«      D ]æ  \  }}|j                  d|«       || j                  k(  rx|j                  «        | j                  r3t        t        j                  «      t        t        j                  «      f}nt        t        j                  «      f} |j                  |Ž  |d | }	|j                  |	d|t        |	«      z
  z  z   «       || j                  k(  sŒ×|j!                  «        Œè y r!  )r   r�  rž  rr   r˜  r“   r³   r    r   rO   rX   r   r”  ÚBOLDr   r(   r   )
r   r   r   r   ÚstartÚelementsr‡   ÚeleÚmodesr   s
             r   r9   zSelection.renderŒ  s1  € ØˆŒØ×!Ñ! D×$5Ñ$5Ñ5ˆØ”3�t—}‘}Ó%¨Ñ.Ò.Ü˜œ3˜tŸ}™}Ó-°Ñ6Ó7ˆEà—=‘= ¨°©Ð8ˆä Ó)ò 	)‰FˆAˆsØ×#Ñ# A qÔ)Ø�D×%Ñ%Ò%Ø×#Ñ#Ô%Ø—<’<Ü¤× 5Ñ 5Ó6¼¼G¿L¹LÓ8IÐI‘Eä ¤×!6Ñ!6Ó7Ð9�EØ/�×/Ñ/°Ñ7Ø�v˜�;ˆDØ�N‰N˜4 4¨5´3°t³9Ñ+<Ñ#=Ñ>Ô?Ø�D×%Ñ%Ó%Ø×&Ñ&Õ(ñ	)r   r   )r   r	   r
   r�  rž  r   r=   rx  r   rz  r¤  rE   r9   r   r   r   r–  r–  R  s6   „ à€Lð €Ló7ò0òòòòò<ó)r   r–  )$r   rÀ   Útwisted.conch.insultsr   r   Útwisted.pythonr   r,  Ú	Exceptionr   r   r+   r_   rx   r„   rŒ   r«   r¯   r±   r¹   r×   rÜ   rå   rç   rö   r   r  r  r%  r9  rS  ra  ru  r€  r  r–  r   r   r   ú<module>r¯     sJ  ðñó ç 1Ý )ô�ô ÷)ñ )÷2Gñ GôTM<�fô M<ô`7�ô 7ôt)�/ô )ôN%ˆ?ô N%ôbˆ4ô ôˆ4ô ô*ˆ_ô *ô.!ˆVô .!òb;ò;ò;ô<'9ˆVô '9ôT'ˆVô 'ô*8�ô 8ôv&�Iô &ô
�ô ô.�Zô ô>77ˆvô 77ôt�ô ô+˜*ô +ô<3˜
ô 3ô:8#�6ô 8#òvôN)�õ N)r   