
    Yfl                       d Z ddlm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/ d0e           Z! G d1 d2e           Z" G d3 d4e          Z#d5 Z$ G d6 d7e          Z%dS )8z<
Simple insults-based widget library

@author: Jp Calderone
    )annotationsN)helperinsults)textc                      e Zd ZdZdS )
YieldFocusz,
    Input focus manipulation exception
    N)__name__
__module____qualname____doc__     N/var/www/html/env/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                      e Zd ZU dZdZdZdZded<   dZded<   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 )WidgetFNz
int | Noner   r   c                    | j         sd| _         | j        '| j        j         s| j                                         d S d S d S NT)dirtyparentrepaintr&   s    r   r1   zWidget.repaint7   sM    z 	DJ;"4;+<"K!!!!! #"""r   c                    d| _         d S r.   )r/   r&   s    r   filthyzWidget.filthy=   s    


r   c                \    |                                   |                     |||           d S r   )r3   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/   renderr6   s       r   r5   zWidget.drawD   s[    DJ&DK"7"74:"7DJ DKDJKKvx00000	 #8"7r   c                    d S r   r   r6   s       r   r:   zWidget.renderK       r   c                    d S r   r   r&   s    r   sizeHintzWidget.sizeHintN   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.keystrokeReceivedQ   s    E>>X&&&&&g""$$$$$g+++$$UH55555""5(33333r   c                    t                      r   r   r   rI   s     r   rB   zWidget.tabReceived[   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focusedr1   r&   s    r   focusReceivedzWidget.focusReceived_   s     r   c                <    d| _         |                                  d S r9   rO   r&   s    r   	focusLostzWidget.focusLosth   s    r   c                    d S r   r   r&   s    r   rC   zWidget.backspaceReceivedl   r<   r   c                    |}t          |t                    s|                    d          }d|dd         z   }t          | |d           }| ||           d S d S )Nutf-8func_   )
isinstancestrdecodegetattr)r   rH   rI   name
methodNamefuncs         r   rE   zWidget.functionKeyReceivedo   sn    %%% 	(;;w''D tAbDz)
tZ..DNNNNN r   c                    d S r   r   rG   s      r   rF   zWidget.characterReceived|   r<   r   )r	   r
   r   rP   r0   r/   r   __annotations__r   r1   r3   r7   r5   r:   r>   rJ   rB   rQ   rS   rC   rE   rF   r   r   r   r,   r,   0   s
        GFEEF" " "  + + +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   )r0   rf   appendfocusedChildrP   rQ   r   r1   r   childs     r   addChildzContainerWidget.addChild   s    |###U###$$*##%%% %*!!     	s   A 
A#"A#c                    |j         | u sJ d |_         | j                            |           |                                  d S r   )r0   rf   remover1   rj   s     r   remChildzContainerWidget.remChild   sC    |t####U###r   c                v    | j         D ]}|                                 t                              |            d S r   )rf   r3   r,   )r   chs     r   r3   zContainerWidget.filthy   s:    - 	 	BIIKKKKdr   c                H    | j         D ]}|                    |||           d S r   )rf   r5   )r   r   r   r   rq   s        r   r:   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                      )NrX   r   )	r1   ri   rS   rf   index
ValueErrorr   lenrQ   )r   ri   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.   )rx   rP   r&   s    r   rQ   zContainerWidget.focusReceived   s    r   c                    | j         W	 | j                             ||           d S # t          $ r, |                                  |                                  Y d S w xY wt
                              | ||           d S r   )ri   rJ   r   rx   r1   r,   rG   s      r   rJ   z!ContainerWidget.keystrokeReceived   s    (!33E8DDDDD     """ $$T5(;;;;;s   & 2AA)r	   r
   r   r   ri   rP   r   rl   ro   r3   r:   rx   rQ   rJ   r   r   r   rd   rd      s         
 LG        
- - -  0  < < < < <r   rd   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   )rd   r   painter	scheduler)r   r~   r   s      r   r   zTopWindow.__init__   s(      &&&"r   Nc                    | j         -t                      | _         |                     | j                   t                              |            d S r   )
_paintCallobjectr   _paintrd   r1   r&   s    r   r1   zTopWindow.repaint   sC    ?"$hhDONN4;'''%%%%%r   c                <    d | _         |                                  d S r   )r   r~   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   )rd   rx   r   r&   s    r   rx   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   )rd   rJ   r   rx   rG   s      r   rJ   zTopWindow.keystrokeReceived  s[    	--dE8DDDDD 	 	 		s     AA)r	   r
   r   r   rP   r   r   r1   r   rx   rJ   r   r   r   r|   r|      sw         , G# # #
 J& & &        r   r|   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)rangerv   rf   ru   )r   rk   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   )rf   r   r5   )r   r   r   r   rq   r#   r$   wraps           r   r:   zAbsoluteBox.render  sY     	) 	)HB1)(EAIvz1aPPDGGE64((((	) 	)r   N)r	   r
   r   r   r:   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   )rd   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   NNrX   )rf   r>   variableDimensionmax)r   r   r   rq   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   rX   c              3     K   | ]}||V  	d S r   r   ).0ws     r   	<genexpr>z_Box.render.<locals>.<genexpr>L  s"      ::aAMMMMM::r   )	rf   r>   r   rh   sumintzipr   r5   )r   r   r   r   greedywantsrq   r   length	totalWantleftForGreedywidthOffsetheightOffsetwantsubWidth	subHeightr   s                    r   r:   z_Box.render=  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>   r:   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   j          r   r   c                      e Zd ZdZdS )VBoxrX   Nr   r   r   r   r   r   n  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>x  s    ---A---r   )	rf   r   rv   r   	enumeraterl   r   mapr:   )	r   r   r   r   rootboxesr   rq   hs	            r   r:   zPacker.renders  s    } 	F3t}%%,s233--t---t}-- 	/ 	/EAr!c%jj.!**2....FFAJ	)))))r   N)r	   r
   r   r:   r   r   r   r   r   r  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 NrX   )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    rX   )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   rt   r#   r$   s       r   __getitem__zCanvas.__getitem__  s#    A}dkAo233r   c                :    |\  }}|| j         | j        |z  |z   <   d S r   r   )r   rt   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   rv   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   r:   zCanvas.render  s     	F 	FDK6T\#9#9KKv&&&v 	! 	!A##Aq)))=a$+/DK"??gii  <DNN4    	! 	!r   )r	   r
   r   rP   r   r   r   r   r   r   r:   r   r   r   r   r     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         krX   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   	containeer0   r   r   s     r   r   zBorder.__init__  s+    " $r   c                4    | j                                         S r   )r   rQ   r&   s    r   rQ   zBorder.focusReceived  s    ~++---r   c                4    | j                                         S r   )r   rS   r&   s    r   rS   zBorder.focusLost  s    ~'')))r   c                8    | j                             ||          S r   )r   rJ   rG   s      r   rJ   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   rX   )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   r3   r,   r&   s    r   r3   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   rX   )r   rP   r)   r   r   r5   )r   r   r   r   r   s        r   r:   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   rQ   rS   rJ   r>   r3   r:   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   )rv   r   r&   s    r   r>   zButton.sizeHint  s    4:!!r   c                >    |dk    r|                                   d S d S N   )r   rG   s      r   rF   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!   rP   r)   r   r6   s       r   r:   zButton.render  s`    1%%%< 	'NN:
2Z?@@@@@NN4:&&&&&r   N)r	   r
   r   r   r>   rF   r:   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
  rv   r  r1   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   rX   )r  r1   rM   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  rv   r
  r1   rM   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
  r1   r&   s    r   rC   zTextInput.backspaceReceived4  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  rX   )r  r
  rv   r	  r  r1   rG   s      r   rF   zTextInput.characterReceived:  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.sizeHintE  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   rX   r      _)_renderTextr!   rP   r)   r  r	  rv   )r   r   r   r   currentTextmores         r   r:   zTextInput.renderH  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._renderTextT  s
    {r   N)r	   r
   r   r   r  r  r  rC   rF   r>   r:   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*)rv   r
  r&   s    r   r  zPasswordInput._renderTextY  s    S%%%%r   N)r	   r
   r   r  r   r   r   r  r  X  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__`  s    			r   c                    | j         S r   )r$  r&   s    r   r>   zTextOutput.sizeHintd  s
    yr   c                    |                     dd           | j        d |         }|                    |d|t          |          z
  z  z              d S Nr   r   )r!   r   r)   rv   )r   r   r   r   r   s        r   r:   zTextOutput.renderg  sU    1%%%y% tdec$ii&78899999r   c                <    || _         |                                  d S r   )r   r1   r  s     r   r  zTextOutput.setTextl  s    	r   c                    t                      r   rL   r&   s    r   rQ   zTextOutput.focusReceivedp  s    llr   r   )	r	   r
   r   r   r   r>   r:   r  rQ   r   r   r   r"  r"  ]  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__w  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   rV   r   )r   
splitlinesr-  WRAPpoprZ   r[   r\   tptext
greedyWrapbytesencoderh   extendrv   r   r!   r)   )r   r   r   r   r   
inputLinesoutputLineslinewrappedLineswrappedLineLs              r   r:   zTextOutputArea.render{  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   r0  TRUNCATEr   r:   r   r   r   r+  r+  t  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   )rA  r1   r   r   s     r   rB  zViewport.xOffset  /    =E!!!DMLLNNNNN "!r   c                    | j         S r   )_yOffsetr&   s    r   yOffsetzViewport.yOffset  rC  r   c                V    | j         |k    r|| _         |                                  d S d S r   )rH  r1   rE  s     r   rI  zViewport.yOffset  rF  r         c                   t                               |            || _        | | j        _        t	          j                    | _        | j        | j        _        | j	        | j        _
        | j                                         d S r   )r,   r   r   r0   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   r3   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   rX   )r   r5   r   r   rO  r   linesrH  r!   rA  voidr)   )	r   r   r   r   r$   r9  r   rq   attrs	            r   r:   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   rA  rH  propertyrB  setterrI  r   r   r   r3   r:   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   r\  s     r   r   z_Scrollbar.__init__  s&     r   c           	         t          dt          d|                     d                              | _        |                                  d S )N      ?r[  rY   r"   r   r\  r]  r1   r&   s    r   smallerz_Scrollbar.smaller  :    3Cr):): ; ;<<r   c           	         t          dt          d|                     d                              | _        |                                  d S )Nr_  r[  rX   r`  r&   s    r   biggerz_Scrollbar.bigger  rb  r   N)r	   r
   r   r   ra  rd  r   r   r   rY  rY    sA          
      r   rY  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   ra  rM   s     r   r  z#HorizontalScrollbar.func_LEFT_ARROW      r   c                .    |                                   d S r   rd  rM   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   rV   )	r!   r   r]  _left_bar_slider_rightr)   r5  )r   r   r   r   r   beforeaftermes           r   r:   zHorizontalScrollbar.render  s    1%%%AIQ%&&F
Jy6!#l y5 " k	 	 	ryy))*****r   N)r	   r
   r   r>   r  r  rr  ru  rs  rt  r:   r   r   r   rf  rf    sf               /E0FDG+ + + + +r   rf  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)rX   Nr   r&   s    r   r>   zVerticalScrollbar.sizeHint  rh  r   c                .    |                                   d S r   rj  rM   s     r   func_UP_ARROWzVerticalScrollbar.func_UP_ARROW  rk  r   c                .    |                                   d S r   rm  rM   s     r   func_DOWN_ARROWz!VerticalScrollbar.func_DOWN_ARROW  rn  r   u   ▲u   ▼ro  rp  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   rV   rX   )
r!   r   r]  r)   _upr5  r   rs  rt  _down)r   r   r   r   knobr   s         r   r:   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>   r}  r  r  r  rs  rt  r:   r   r   r   rz  rz    sf               +C.EDG3 3 3 3 3r   rz  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?  	_viewportrf  _horizScroll_horizrz  _vertScroll_vertr0   )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  rB  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  rI  r   r  s     r   r  zScrolledArea._vertScroll+  r  r   c                8    | j                                          d S r   )r  ra  rM   s     r   r}  zScrolledArea.func_UP_ARROW0  s    
r   c                8    | j                                          d S r   )r  rd  rM   s     r   r  zScrolledArea.func_DOWN_ARROW3  s    
r   c                8    | j                                          d S r   )r  ra  rM   s     r   r  zScrolledArea.func_LEFT_ARROW6  s    r   c                8    | j                                          d S r   )r  rd  rM   s     r   r  zScrolledArea.func_RIGHT_ARROW9  s    r   c                    | j                                          | j                                         | j                                         t                              |            d S r   )r  r3   r  r  r,   r&   s    r   r3   zScrolledArea.filthy<  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   rX   r   r   r   )	r   r  r5   rP   r)   r   r   r  r  )r   r   r   r   wrappers        r   r:   zScrolledArea.renderB  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  r}  r  r  r  r3   r:   r   r   r   r  r    s         
  - - -
- - -
          # # # # #r   r  c                    |                                   |                     t          t          j                             |                     |           |                                  |                                  d S r   )r   r   r[   r   REVERSE_VIDEOr)   r   r   )r   rq   s     r   r  r  R  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   rv   r   )r   r  r  r  s       r   r   zSelection.__init__a  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.sizeHinti  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renderOffsetr1   rM   s     r   r}  zSelection.func_UP_ARROWm  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   r1   rM   s     r   	func_PGUPzSelection.func_PGUPt  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  rv   r  r  r   r1   rM   s     r   r  zSelection.func_DOWN_ARROW|  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  rv   r  r"   r1   )r   rI   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  rG   s      r   rF   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  rv   r  r   r   r!   r   rP   r[   r   r  BOLDr   r)   r   )
r   r   r   r   startelementsr   elemodesr   s
             r   r:   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>   r}  r  r  r  rF   r:   r   r   r   r  r  Z  s        L L7 7 7 70 0 0        < < <) ) ) ) )r   r  )&r   
__future__r   r   twisted.conch.insultsr   r   twisted.pythonr   r2  	Exceptionr   r   r,   rd   r|   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  r+  r?  rY  rf  rz  r  r  r  r   r   r   <module>r     s    # " " " " "  1 1 1 1 1 1 1 1 ) ) ) ) ) )       ) ) ) ) ) ) ) )2M M M M M M M M`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   