
    \d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#dS )7z<
Simple insults-based widget library

@author: Jp Calderone
    N)helperinsults)textc                       e Zd ZdZdS )
YieldFocusz,
    Input focus manipulation exception
    N)__name__
__module____qualname____doc__     <lib/python3.11/site-packages/twisted/conch/insults/window.pyr   r      s           r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )BoundedTerminalWrapperc                     || _         || _        || _        || _        || _        |j        | _        |j        | _        |j        | _        |j        | _        |j	        | _	        d S N)
widthheightxoffyoffterminalcursorForwardselectCharacterSetselectGraphicRendition
saveCursorrestoreCursor)selfr   r   r   r   r   s         r   __init__zBoundedTerminalWrapper.__init__   sa    
		 %3"*"=&.&E#"-%3r   c                     | j                             | j        t          | j        |          z   | j        t          | j        |          z             S r   )r   cursorPositionr   minr   r   r   )r   xys      r   r    z%BoundedTerminalWrapper.cursorPosition"   sG    }++IDJ***DIDK8K8K,K
 
 	
r   c                 L    | j                             | j        | j                  S r   )r   r    r   r   r   s    r   
cursorHomez!BoundedTerminalWrapper.cursorHome'   s    }++DItyAAAr   c                 6    | 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      sS        
4 
4 
4
 
 

B B B) ) ) ) )r   r   c                   p    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dS )WidgetFNc                     | j         sd| _         | j        '| j        j         s| j                                         d S d S d S NT)dirtyparentrepaintr%   s    r   r0   zWidget.repaint4   sM    z 	DJ;"4;+<"K!!!!! #"""r   c                     d| _         d S r-   )r.   r%   s    r   filthyzWidget.filthy:   s    


r   c                 \    |                                   |                     |||           d S r   )r2   drawr   r   r   r   s       r   redrawzWidget.redraw=   s+    		%*****r   c                     || j         k    s|| j        k    s| j        r.|| _         || _        d| _        |                     |||           d S d S NF)r   r   r.   renderr5   s       r   r4   zWidget.drawA   s[    DJ&DK"7"74:"7DJ DKDJKKvx00000	 #8"7r   c                     d S r   r   r5   s       r   r9   zWidget.renderH       r   c                     d S r   r   r%   s    r   sizeHintzWidget.sizeHintK   s    tr   c                     |dk    r|                      |           d S |dk    r|                                  d S |t          j        v r|                     ||           d S |                     ||           d S )N   	   )tabReceivedbackspaceReceivedr   FUNCTION_KEYSfunctionKeyReceivedcharacterReceivedr   keyIDmodifiers      r   keystrokeReceivedzWidget.keystrokeReceivedN   s    E>>X&&&&&g""$$$$$g+++$$UH55555""5(33333r   c                     t                      r   r   r   rH   s     r   rA   zWidget.tabReceivedX   s    llr   c                 <    d| _         |                                  dS )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                 <    d| _         |                                  d S r8   rN   r%   s    r   	focusLostzWidget.focusLoste   s    r   c                     d S r   r   r%   s    r   rB   zWidget.backspaceReceivedi   r;   r   c                     |}t          |t                    s|                    d          }t          | d|z   d           }| ||           d S d S )Nutf-8func_)
isinstancestrdecodegetattr)r   rG   rH   namefuncs        r   rD   zWidget.functionKeyReceivedl   s^    %%% 	(;;w''DtWt^T22DNNNNN r   c                     d S 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EF" " "  + + +1 1 1    4 4 4              r   r+   c                   J    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dS )ContainerWidgetzZ
    @ivar focusedChild: The contained widget which currently has
    focus, or None.
    NFc                 H    t                               |            g | _        d S r   )r+   r   childrenr%   s    r   r   zContainerWidget.__init__   s    r   c                     |j         J | |_         | j                            |           | j        4| j        r-	 |                                 || _        n# t          $ r Y nw xY w|                                  d S r   )r/   ra   appendfocusedChildrO   rP   r   r0   r   childs     r   addChildzContainerWidget.addChild   s    |###U###$$*##%%% %*!!     	s   A 
A#"A#c                     |j         | u sJ d |_         | j                            |           |                                  d S r   )r/   ra   remover0   re   s     r   remChildzContainerWidget.remChild   sC    |t####U###r   c                 v    | j         D ]}|                                 t                              |            d S r   )ra   r2   r+   )r   chs     r   r2   zContainerWidget.filthy   s:    - 	 	BIIKKKKdr   c                 H    | j         D ]}|                    |||           d S r   )ra   r4   )r   r   r   r   rl   s        r   r9   zContainerWidget.render   s6    - 	- 	-BGGE68,,,,	- 	-r   c                    |                                   | j        b| j                                         | j        }d | _        	 | j                            |          dz   }n# t
          $ r t                      w xY wd}|t          | j                  k     ra	 | j        |                                          | j        |         | _        d S # t          $ r |dz  }Y nw xY w|t          | j                  k     at                      )N   r   )	r0   rd   rR   ra   index
ValueErrorr   lenrP   )r   rd   curFocuss      r   changeFocuszContainerWidget.changeFocus   s    (''))),L $D#=..|<<q@ # # # ll"# HT]++++h'55777 %)M($;!	    A T]++++ lls   A" "A;C CCc                 <    |                                   d| _        d S r-   )rt   rO   r%   s    r   rP   zContainerWidget.focusReceived   s    r   c                     | j         W	 | j                             ||           d S # t          $ r, |                                  |                                  Y d S w xY wt
                              | ||           d S r   )rd   rI   r   rt   r0   r+   rF   s      r   rI   z!ContainerWidget.keystrokeReceived   s    (!33E8DDDDD     """ $$T5(;;;;;s   & 2A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                   8    e Zd ZdZdZd ZdZd Zd Zd Z	d Z
dS )		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                 V    t                               |            || _        || _        d S r   )r_   r   painter	scheduler)r   rz   r{   s      r   r   zTopWindow.__init__   s(      &&&"r   Nc                     | j         -t                      | _         |                     | j                   t                              |            d S r   )
_paintCallobjectr{   _paintr_   r0   r%   s    r   r0   zTopWindow.repaint   sC    ?"$hhDONN4;'''%%%%%r   c                 <    d | _         |                                  d S r   )r}   rz   r%   s    r   r   zTopWindow._paint   s    r   c                     	 t                               |            d S # t          $ r1 	 t                               |            Y d S # t          $ r Y Y d S w xY ww xY wr   )r_   rt   r   r%   s    r   rt   zTopWindow.changeFocus   s    	''----- 	 	 	++D111111   	s&    
AA
AAAAc                     	 t                               | ||           d S # t          $ r |                                  Y d S w xY wr   )r_   rI   r   rt   rF   s      r   rI   zTopWindow.keystrokeReceived   s[    	--dE8DDDDD 	 	 		s     AA)r   r	   r
   r   rO   r   r}   r0   r   rt   rI   r   r   r   rx   rx      sw         , G# # #
 J& & &        r   rx   c                       e Zd Zd Zd ZdS )AbsoluteBoxc                     t          t          | j                            D ]'}| j        |         d         |u r|||f| j        |<    d S (t          d|          )Nr   zNo such child)rangerr   ra   rq   )r   rf   r"   r#   ns        r   	moveChildzAbsoluteBox.moveChild  sj    s4=))** 	5 	5A}Q"e++$)1a=a  , _e444r   c                     | j         D ]6\  }}}t          |||z
  ||z
  ||          }|                    |||           7d S r   )ra   r   r4   )r   r   r   r   rl   r"   r#   wraps           r   r9   zAbsoluteBox.render  sY    - 	) 	)JRA)(EAIvz1aPPDGGE64((((	) 	)r   N)r   r	   r
   r   r9   r   r   r   r   r     s2        5 5 5) ) ) ) )r   r   c                   B    e Zd Z ed          \  ZZZefdZd Zd Z	dS )_Box   c                 H    t                               |            || _        d S r   )r_   r   gravity)r   r   s     r   r   z_Box.__init__  s!      &&&r   c                 Z   d}d}| j         D ]}|                                }|d}| j        dk    r<|d         d }n|||d         z  }|d         d }H|t          ||d                   }a|d         d }n|t          ||d                   }|d         d }|||d         z  }||fS )Nr   NNro   )ra   r=   variableDimensionmax)r   r   r   rl   hints        r   r=   z_Box.sizeHint  s    - 	& 	&B;;==D|#%**7? EE&T!W$E7?!FF' a11F7? EE&tAw//E7?!FF'd1g%Ff}r   c                 4   | j         sd S d}g }| j         D ]L}|                                }|d}|| j                 |dz  }|                    || j                            M||f| j                 }t	          d |D                       }	|rt          ||	z
  |z            }
dx}}t          || j                   D ]]\  }}||
}||}}| j        dk    r|}n|}t          |||||          }|                    |||           | j        dk    r||z  }X||z  }^d S )Nr   r   ro   c              3      K   | ]}||V  	d S r   r   ).0ws     r   	<genexpr>z_Box.render.<locals>.<genexpr>D  s"      ::aAMMMMM::r   )	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  s   } 	F- 	7 	7B;;==D|#D*+3!LLd456666!78::5:::::	 	?)!3v =>>M%&&lE4=11 	% 	%HD"|$"'iH%** 	) D GGHi...%**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dS )HBoxr   Nr   r	   r
   r   r   r   r   r   r   b          r   r   c                       e Zd ZdZdS )VBoxro   Nr   r   r   r   r   r   f  r   r   r   c                       e Zd Zd ZdS )Packerc                    | j         sd S t          t          | j                   dz  dz             }d t          |          D             }t	          | j                   D ]0\  }}||t          |          z                               |           1t                      }t          |j        |           |                    |||           d S )Ng      ?c                 *    g | ]}t                      S r   )r   )r   r   s     r   
<listcomp>z!Packer.render.<locals>.<listcomp>p  s    ---A---r   )	ra   r   rr   r   	enumeraterg   r   mapr9   )	r   r   r   r   rootboxesr   rl   hs	            r   r9   zPacker.renderk  s    } 	F3t}%%,s233--t---t}-- 	/ 	/EAr!c%jj.!**2....FFAJ	)))))r   N)r   r	   r
   r9   r   r   r   r   r   j  s#        
* 
* 
* 
* 
*r   r   c                   :    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
dS )	CanvasFNc                 f    t                               |            |                     dd           d S Nro   )r+   r   resizer%   s    r   r   zCanvas.__init__}  s.    Aqr   c                    t          j         dd|z  |z            }| j        ]t          t          || j                            D ]:}t          t          || j                            D ]}| ||f         |||z  |z   <   ;|| _        || _        || _        | j        |k    r
|dz
  | _        | j        |k    r|dz
  | _        d S d S )NB    ro   )arraycontentsr   r!   _width_heightr"   r#   )r   r   r   r   r"   r#   s         r   r   zCanvas.resize  s    ;sD5L6$9::=$3udk2233 9 9s64<8899 9 9A.21a4jHUQY]++9 6U??QYDF6VaZDFFF r   c                 <    |\  }}| j         | j        |z  |z            S r   r   r   )r   rp   r"   r#   s       r   __getitem__zCanvas.__getitem__  s#    A}dkAo233r   c                 :    |\  }}|| j         | j        |z  |z   <   d S r   r   )r   rp   valuer"   r#   s        r   __setitem__zCanvas.__setitem__  s(    A/4t{Q!+,,,r   c                 d    t          j         ddt          | j                  z            | _        d S )Nr   r   )r   rr   r   r%   s    r   clearzCanvas.clear  s(    CDM0B0B)BCCr   c                 j   |r|sd S || j         k    s|| j        k    r|                     ||           t          |          D ]p}|                    d|           | j        | j         |z  | j         |z  | j         z                                            }|d |         }|                    |           qd S Nr   )r   r   r   r   r    r   tobytesr(   )r   r   r   r   ir   s         r   r9   zCanvas.render  s     	F 	FDK6T\#9#9KKv&&&v 	! 	!A##Aq)))=a$+/DK"??gii  <DNN4    	! 	!r   )r   r	   r
   rO   r   r   r   r   r   r   r9   r   r   r   r   r   x  s{        GH       4 4 45 5 5D D D! ! ! ! !r   r   c                    |                      t          j        t          j                   |                     ||           |                     d||z
  z             |                      t          j        t          j                   d S )N   q)r   r   
CS_DRAWINGG0r    r(   CS_US)r   r#   leftrights       r   horizontalLiner     sn     2GJ???D!$$$NN7edl+,,,wz:::::r   c                 *   |                      t          j        t          j                   t	          ||          D ]-}|                     ||           |                     d           .|                      t          j        t          j                   d S )N   x)r   r   r   r   r   r    r(   r   )r   r"   topbottomr   s        r   verticalLiner     s     2GJ???3    1%%%wwz:::::r   c                     |\  }}|\  }}|                      t          j        t          j                   |                     ||           |                     d           |                     d|dz
  z             |                     d           t          |dz
            D ]`}|                     |||z   dz              |                     d           |                     |dz
             |                     d           a|                     d||z   dz
             |                     d           |                     d|dz
  z             |                     d	           |                      t          j        t          j                   d
S )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|    KS$OUF 2GJ???C&&&NN7NN7eai()))NN76A:    cAgk222wuqy)))wAsV|a/000NN7NN7eai()))NN7wz:::::r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Borderc                 `    t                               |            || _        | | j        _        d S r   )r+   r   	containeer/   r   r   s     r   r   zBorder.__init__  s+    " $r   c                 4    | j                                         S r   )r   rP   r%   s    r   rP   zBorder.focusReceived  s    ~++---r   c                 4    | j                                         S r   )r   rR   r%   s    r   rR   zBorder.focusLost  s    ~'')))r   c                 8    | j                             ||          S r   )r   rI   rF   s      r   rI   zBorder.keystrokeReceived  s    ~//x@@@r   c                     | j                                         }|d}|d         d }n|d         dz   }|d         d }n|d         dz   }||fS )Nr   r   r   ro   )r   r=   )r   r   r"   r#   s       r   r=   zBorder.sizeHint  sb    ~&&((<D7?AAQ!A7?AAQ!A!tr   c                 l    | j                                          t                              |            d S r   r   r2   r+   r%   s    r   r2   zBorder.filthy  .    dr   c                    | j         j        r|                    d           t          |d||f           |                    d           t	          ||dz
  |dz
  dd          }| j                             |dz
  |dz
  |           d S )N   [31m)r   r      [0mr   ro   )r   rO   r(   r   r   r4   )r   r   r   r   r   s        r   r9   zBorder.render  s    >! 	(NN;'''(FUFO444z"""%h	6A:q!LLEAIvz488888r   N)
r   r	   r
   r   rP   rR   rI   r=   r2   r9   r   r   r   r   r     s        % % %
. . .* * *A A A    9 9 9 9 9r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )Buttonc                 V    t                               |            || _        || _        d S r   )r+   r   labelonPress)r   r   r   s      r   r   zButton.__init__  s&    
r   c                 .    t          | j                  dfS r   )rr   r   r%   s    r   r=   zButton.sizeHint  s    4:!!r   c                 >    |dk    r|                                   d S d S N   )r   rF   s      r   rE   zButton.characterReceived	  s#    E>>LLNNNNN >r   c                     |                     dd           | j        r"|                    d| j        z   dz              d S |                    | j                   d S )Nr   s   [1mr   )r    rO   r(   r   r5   s       r   r9   zButton.render  s`    1%%%< 	'NN:
2Z?@@@@@NN4:&&&&&r   N)r   r	   r
   r   r=   rE   r9   r   r   r   r   r      sP          
" " "  ' ' ' ' 'r   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )	TextInputc                 r    t                               |            || _        || _        d| _        d| _        d S )Nr   r   )r+   r   onSubmitmaxwidthbuffercursor)r   r  r  s      r   r   zTextInput.__init__  s4      r   c                     |d | j                  | _        t          | j                  | _        |                                  d S r   )r  r  rr   r  r0   r   r   s     r   setTextzTextInput.setText  s6    ?T]?+$+&&r   c                 h    | j         dk    r&| xj         dz  c_         |                                  d S d S Nr   ro   )r  r0   rL   s     r   func_LEFT_ARROWzTextInput.func_LEFT_ARROW"  s5    ;??KK1KKLLNNNNN ?r   c                     | j         t          | j                  k     r&| xj         dz  c_         |                                  d S d S r   )r  rr   r  r0   rL   s     r   func_RIGHT_ARROWzTextInput.func_RIGHT_ARROW'  sB    ;T[))))KK1KKLLNNNNN *)r   c                     | j         dk    rW| j        d | j         dz
           | j        | j         d          z   | _        | xj         dz  c_         |                                  d S d S r  )r  r  r0   r%   s    r   rB   zTextInput.backspaceReceived,  sa    ;??+&7a&784;t{}};UUDKKK1KKLLNNNNN ?r   c                 2   |dk    r|                      | j                   d S t          | j                  | j        k     rW| j        d | j                 |z   | j        | j        d          z   | _        | xj        dz  c_        |                                  d S d S )Nr   ro   )r  r  rr   r  r  r0   rF   s      r   rE   zTextInput.characterReceived2  s    E>>MM$+&&&&&4;$-//K$+.6T[]]9SS  q  0/r   c                     | j         dz   dfS r   )r  r%   s    r   r=   zTextInput.sizeHint=  s    }q !##r   c                    |                                  }|                    dd           | j        r|                    |d | j                            t	          ||| j        | j        dz            pd           |                    || j        dz   d                     |                    d| j        t          |          z
  dz   z             d S | j        t          |          z
  }|                    |d|z  z              d S )Nr   ro   r      _)_renderTextr    rO   r(   r  r  rr   )r   r   r   r   currentTextmores         r   r9   zTextInput.render@  s    &&((1%%%< 	6NN;}}56668[t{Q)FGO4PPPNN;t{Q'8'89:::NN44=3{3C3C#Ca#GHIIIII=3{#3#33DNN;45555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 
6 
6    r   r  c                       e Zd Zd ZdS )PasswordInputc                 0    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                   2    e Zd ZdZddZd Zd Zd Zd ZdS )	
TextOutputr   Nc                 H    t                               |            || _        d S 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r   c                     |                     dd           | j        d |         }|                    |d|t          |          z
  z  z              d S Nr   r   )r    r   r(   rr   )r   r   r   r   r   s        r   r9   zTextOutput.render_  sU    1%%%y% tdec$ii&78899999r   c                 <    || _         |                                  d S r   )r   r0   r	  s     r   r
  zTextOutput.setTextd  s    	r   c                     t                      r   rK   r%   s    r   rP   zTextOutput.focusReceivedh  s    llr   r   )	r   r	   r
   r   r   r=   r9   r
  rP   r   r   r   r  r  U  si        D     : : :
      r   r  c                   <    e Zd Z ed          \  ZZdefdZd ZdS )TextOutputArear   Nc                 J    t                               | |           || _        d S r   )r  r   	longLines)r   r   r)  s      r   r   zTextOutputArea.__init__o  s#    D$'''"r   c                    d}| j                                         }g }|r| j        | j        k    r|                    d          }t          |t                    s|                    d          }g }t          j	        ||          D ]A}	t          |	t                    s|	                    d          }	|                    |	           B|                    |pdg           n0|                    |                    d          d |                    t          |          |k    rn|t          |d |                   D ]0\  }}
|                    d|           |                    |
           1d S )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))++
 	~**!~~a((!$,, 0;;w//D!#)#4T5#A#A 5 5K%k599 B&1&8&8&A&A ''4444""<#8C59999"":>>!#4#4VeV#<===;6))  	 k'6'233 	 	DAq##Aq)))NN1	 	r   )r   r	   r
   r   r,  TRUNCATEr   r9   r   r   r   r'  r'  l  sM        U1XXND( 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dS )Viewportr   c                     | j         S r   )_xOffsetr%   s    r   xOffsetzViewport.xOffset  
    }r   c                 V    | j         |k    r|| _         |                                  d S d S r   )r=  r0   r   r   s     r   r>  zViewport.xOffset  /    =E!!!DMLLNNNNN "!r   c                     | j         S r   )_yOffsetr%   s    r   yOffsetzViewport.yOffset  r?  r   c                 V    | j         |k    r|| _         |                                  d S d S r   )rD  r0   rA  s     r   rE  zViewport.yOffset  rB  r         c                    t                               |            || _        | | j        _        t	          j                    | _        | j        | j        _        | j	        | j        _
        | j                                         d S r   )r+   r   r   r/   r   TerminalBuffer_bufr   r   r   r   connectionMader   s     r   r   zViewport.__init__  sf    " $)++	+	<		  """""r   c                 l    | j                                          t                              |            d S r   r   r%   s    r   r2   zViewport.filthy  r   r   c                    | j                             | j        | j        | j                   t          | j        j        | j        | j        |z                      D ]\  }}|                    d|           d}t          || j	        | j	        |z                      D ]-\  }\  }}|| j        j
        u rd}|                    |           .||k     r|                    d||z
  dz
  z             d S )Nr   r   ro   )r   r4   r   r   rK  r   linesrD  r    r=  voidr(   )	r   r   r   r   r#   r5  r   rl   attrs	            r   r9   zViewport.render  s   DKtyAAA !IODMDMF,BBC
 
 
	7 
	7GAt ##Aq)))A!*4PU@U0U+V!W!W # #:B''Br""""5yytuqy1}5666
	7 
	7r   N)r   r	   r
   r=  rD  propertyr>  setterrE  r   r   r   r2   r9   r   r   r   r;  r;    s        HH  X ^  ^
   X ^  ^
 FG# # #  7 7 7 7 7r   r;  c                        e Zd Zd Zd Zd ZdS )
_Scrollbarc                 V    t                               |            || _        d| _        d S )N        )r+   r   onScrollpercent)r   rX  s     r   r   z_Scrollbar.__init__  s&     r   c           	          t          dt          d|                     d                              | _        |                                  d S )N      ?rW  r!   r   rX  rY  r0   r%   s    r   smallerz_Scrollbar.smaller  :    3Cr):): ; ;<<r   c           	          t          dt          d|                     d                              | _        |                                  d S )Nr[  rW  ro   r]  r%   s    r   biggerz_Scrollbar.bigger  r_  r   N)r   r	   r
   r   r^  ra  r   r   r   rU  rU    sA          
      r   rU  c                   6    e Zd Zd Zd Zd ZdZdZdZdZ	d Z
d	S )
HorizontalScrollbarc                     dS )Nr   r   r%   s    r   r=   zHorizontalScrollbar.sizeHint      yr   c                 .    |                                   d S r   r^  rL   s     r   r  z#HorizontalScrollbar.func_LEFT_ARROW      r   c                 .    |                                   d S r   ra  rL   s     r   r  z$HorizontalScrollbar.func_RIGHT_ARROW      r   u   ◀u   ▶   ░   ▓c                    |                     dd           |dz
  }t          || j        z            }||z
  }| j        | j        |z  z   | j        z   | j        |z  z   | j        z   }|                    |                    d                     d S )Nr   r   rU   )	r    r   rY  _left_bar_slider_rightr(   r1  )r   r   r   r   r   beforeaftermes           r   r9   zHorizontalScrollbar.render  s    1%%%AIQ%&&F
Jy6!#l y5 " k	 	 	ryy))*****r   N)r   r	   r
   r=   r  r  ro  rr  rp  rq  r9   r   r   r   rc  rc    sf               /E0FDG+ + + + +r   rc  c                   6    e Zd Zd Zd Zd ZdZdZdZdZ	d Z
d	S )
VerticalScrollbarc                     dS )N)ro   Nr   r%   s    r   r=   zVerticalScrollbar.sizeHint  re  r   c                 .    |                                   d S r   rg  rL   s     r   func_UP_ARROWzVerticalScrollbar.func_UP_ARROW  rh  r   c                 .    |                                   d S r   rj  rL   s     r   func_DOWN_ARROWz!VerticalScrollbar.func_DOWN_ARROW  rk  r   u   ▲u   ▼rl  rm  c                 l   |                     dd           t          | j        |dz
  z            }|                    | j                            d                     t          d|dz
            D ]|}|                     d|           ||dz   k    r.|                    | j                            d                     O|                    | j                            d                     }|                     d|dz
             |                    | j	                            d                     d S )Nr   r   rU   ro   )
r    r   rY  r(   _upr1  r   rp  rq  _down)r   r   r   r   knobr   s         r   r9   zVerticalScrollbar.render  s   1%%%4<6A:.//txw//000q&1*%% 	= 	=A##Aq)))TAXty//889999t|227;;<<<<6A:...tz((1122222r   N)r   r	   r
   r=   rz  r|  r~  r  rp  rq  r9   r   r   r   rw  rw    sf               +C.EDG3 3 3 3 3r   rw  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S )ScrolledAreaz
    A L{ScrolledArea} contains another widget wrapped in a viewport and
    vertical and horizontal scrollbars for moving the viewport around.
    c                    t                               |            t          |          | _        t	          | j                  | _        t          | j                  | _	        | j        | j        | j	        fD ]	}| |_
        
d S r   )r+   r   r;  	_viewportrc  _horizScroll_horizrw  _vertScroll_vertr/   )r   r   r   s      r   r   zScrolledArea.__init__  sv    !),,)$*;<<&t'788
dj8 	 	AAHH	 	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  A    !#!$Q(>!?!?~%,,r   c                     | j         xj        |z  c_        t          d| j         j                  | j         _        | j         j        dz  S r  )r  rE  r   r  s     r   r  zScrolledArea._vertScroll#  r  r   c                 8    | j                                          d S r   )r  r^  rL   s     r   rz  zScrolledArea.func_UP_ARROW(  s    
r   c                 8    | j                                          d S r   )r  ra  rL   s     r   r|  zScrolledArea.func_DOWN_ARROW+  s    
r   c                 8    | j                                          d S r   )r  r^  rL   s     r   r  zScrolledArea.func_LEFT_ARROW.  s    r   c                 8    | j                                          d S r   )r  ra  rL   s     r   r  zScrolledArea.func_RIGHT_ARROW1  s    r   c                     | j                                          | j                                         | j                                         t                              |            d S r   )r  r2   r  r  r+   r%   s    r   r2   zScrolledArea.filthy4  sV    
dr   c                    t          ||dz
  |dz
  dd          }| j                            |dz
  |dz
  |           | j        r|                    d           t          |dd|dz
             t          |dd|dz
             | j                            d|dz
  t          |d|dz
  |dz
  d                     | j                            |dt          ||dd|dz
                       |                    d           d S )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   (519fqj!QOOEAIvz7;;;< 	(NN;'''xAuqy111Xq!VaZ000
vz1(Avz5ST9VWXX	
 	
 	
 	1,XuaFQJOO	
 	
 	
 	z"""""r   N)r   r	   r
   r   r   r  r  rz  r|  r  r  r2   r9   r   r   r   r  r    s         
  - - -
- - -
          # # # # #r   r  c                     |                                   |                     t          t          j                             |                     |           |                                  |                                  d S r   )r   r   rX   r   REVERSE_VIDEOr(   r   r   )r   rl   s     r   r  r  J  so    ##C(=$>$>???NN2r   c                   H    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dS )	Selectionr   Nc                     t                               |            || _        || _        || _        |.t          t          t          | j                            | _        d S d S r   )	r+   r   sequenceonSelect
minVisibler   r   rr   r   )r   r  r  r  s       r   r   zSelection.__init__Y  sV      $!c#t}5566DKKK "!r   c                 0    | j         | j        | j         fS d S r   )r  r   r%   s    r   r=   zSelection.sizeHinta  s!    ?&;// '&r   c                     | j         dk    rA| xj         dz  c_         | j        dk    r| xj        dz  c_        |                                  d S d S r  )focusedIndexrenderOffsetr0   rL   s     r   rz  zSelection.func_UP_ARROWe  s_    q  " 1$$!!Q&!!LLNNNNN	 ! r   c                     | j         dk    r| xj        | j         z  c_        d| _         n"t          d| j        | j        z
            | _        |                                  d S r   )r  r  r   r   r0   rL   s     r   	func_PGUPzSelection.func_PGUPl  s_    !!!22 !D #At'84;'F G GDr   c                     | j         t          | j                  dz
  k     rI| xj         dz  c_         | j        | j        dz
  k     r| xj        dz  c_        |                                  d S d S r   )r  rr   r  r  r   r0   rL   s     r   r|  zSelection.func_DOWN_ARROWt  st    s4=11A555" 4;?22!!Q&!!LLNNNNN	 65r   c                    | j         | j        dz
  k    rq| j        | j         z
  dz
  }|| j        z   t          | j                  k    rt          | j                  | j        z
  dz
  }| xj        |z  c_        | j        dz
  | _         n7t          t          | j                  dz
  | j        | j        z             | _        |                                  d S r   )r  r   r  rr   r  r!   r0   )r   rH   changes      r   	func_PGDNzSelection.func_PGDN{  s    a//[4#44q8F))S-?-???T]++d.??!C' $aD #DM""Q&(9DK(G! !D 	r   c                 `    |dk    r'|                      | j        | j                            d S d S r   )r  r  r  rF   s      r   rE   zSelection.characterReceived  s4    E>>MM$-(9:;;;;; >r   c           	         || _         | j        | j        z
  }|t          | j                  |z
  k    r%t          dt          | j                  |z
            }| j        |||z            }t          |          D ]\  }}|                    d|           || j        k    rr|                                 | j	        r3t          t          j                  t          t          j                  f}nt          t          j                  f} |j        |  |d |         }	|                    |	d|t          |	          z
  z  z              || j        k    r|                                 d S 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  sd   !D$553t}%%...3t}--677E=!78)) 	) 	)FAs##Aq)))D%%%##%%%< : 566GL8I8IIEE !6779E//77vv;DNN4453t99+<#=>???D%%%&&(((	) 	)r   r   )r   r	   r
   r  r  r   r=   rz  r  r|  r  rE   r9   r   r   r   r  r  R  s        L L7 7 7 70 0 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'  r;  rU  rc  rw  r  r  r  r   r   r   <module>r     sw     1 1 1 1 1 1 1 1 ) ) ) ) ) )       ) ) ) ) ) ) ) )2G G G G G G G GTM< M< M< M< M<f M< M< M<`7 7 7 7 7 7 7 7t) ) ) ) )/ ) ) )N% N% N% N% N%? N% N% N%b    4       4   * * * * *_ * * *.! .! .! .! .!V .! .! .!b; ; ;; ; ;; ; ;<'9 '9 '9 '9 '9V '9 '9 '9T' ' ' ' 'V ' ' '*8 8 8 8 8 8 8 8v& & & & &I & & &
       .    Z   >77 77 77 77 77v 77 77 77t       + + + + +* + + +<3 3 3 3 3
 3 3 3:8# 8# 8# 8# 8#6 8# 8# 8#v  N) N) N) N) N) N) N) N) N) N)r   