
    jj                        d dl mZ d dlZd dlZd dlZddlmZmZ ej                  rd dl	m
Z
mZ ddlmZ  G d dej                        Z G d	 d
      Z G d d      Zy)    )annotationsN   )Sizing
WHSettings)IterableIterator)Widgetc                  L    e Zd ZdZdZdZdZdZdZdZ	e
dd       Ze
dd	       Zy
)_ContainerElementSizingFlagr   r                   c                p   t               }| t        j                  z  r|j                  t        j                         | t        j
                  z  r|j                  t        j
                         | t        j                  z  r|j                  t        j                         | t        j                  z  rt        |      t        j                  fS | t        j                  z  rt        |      t        j                  fS | t        j                  z  rt        |      t        j                  fS t        |      dfS )zGet flag in public API format.N)setr   BOXaddr   FLOWFIXED	WH_WEIGHT	frozensetr   WEIGHTWH_PACKPACKWH_GIVENGIVEN)bitfieldsizings     _/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/urwid/widget/container.pyreverse_flagz(_ContainerElementSizingFlag.reverse_flag   s     "e1555JJvzz"1666JJv{{#1777JJv||$1;;;V$j&7&7771999V$joo551:::V$j&6&666 $&&    c                    t         j                  |       \  }}|rd|j                          nd}dj                  t	        d |D                    |z   S )z%Get desctiprion in public API format.  |c              3  <   K   | ]  }|j                           y wN)upper).0modes     r    	<genexpr>z9_ContainerElementSizingFlag.log_string.<locals>.<genexpr>7   s     ?tzz|?s   )r   r!   r)   joinsorted)r   r   renderrender_strings       r    
log_stringz&_ContainerElementSizingFlag.log_string2   sN     5AA(K06!FLLN+,Bxx???@=PPr"   N)r   intreturnz+tuple[frozenset[Sizing], WHSettings | None])r   r2   r3   str)__name__
__module____qualname__NONEr   r   r   r   r   r   staticmethodr!   r1    r"   r    r   r      sO    DCDEIGH ' '& Q Qr"   r   c                  `    e Zd ZdZddZd	dZd
dZddZee	j                  dd              Zy)WidgetContainerMixinzQ
    Mixin class for widget containers implementing common container methods
    c                :    | j                   |   d   j                  S )aG  
        Container short-cut for self.contents[position][0].base_widget
        which means "give me the child widget at position without any
        widget decorations".

        This allows for concise traversal of nested container widgets
        such as:

            my_widget[position0][position1][position2] ...
        r   )contentsbase_widgetselfpositions     r    __getitem__z WidgetContainerMixin.__getitem__?   s     }}X&q)555r"   c                    g }| }	 	 |j                   }|j                  |       |j                  j                  }5# t        $ r |cY S w xY w)z
        Return the .focus_position values starting from this container
        and proceeding along each child widget until reaching a leaf
        (non-container) widget.
        )focus_position
IndexErrorappendfocusr?   )rA   outwps       r    get_focus_pathz#WidgetContainerMixin.get_focus_pathL   sX     $$ JJqM##A   
s   ; A	A	c                n    | }|D ].  }||j                   k7  r||_         |j                  j                  }0 y)a  
        Set the .focus_position property starting from this container
        widget and proceeding along newly focused child widgets.  Any
        failed assignment due do incompatible position types or invalid
        positions will raise an IndexError.

        This method may be used to restore a particular widget to the
        focus by passing in the value returned from an earlier call to
        get_focus_path().

        positions -- sequence of positions
        N)rE   rH   r?   )rA   	positionsrJ   rK   s       r    set_focus_pathz#WidgetContainerMixin.set_focus_path\   s=      	$AA$$$#$ ##A	$r"   c                    g }| }|j                   j                  x}*|j                  |       |j                   j                  x}*|S )aW  
        Return the .focus values starting from this container
        and proceeding along each child widget until reaching a leaf
        (non-container) widget.

        Note that the list does not contain the topmost container widget
        (i.e., on which this method is called), but does include the
        lowest leaf widget.
        )r?   rH   rG   )rA   rI   rJ   s      r    get_focus_widgetsz&WidgetContainerMixin.get_focus_widgetso   sL     MM'''q4JJqM MM'''q4 
r"   c                     y)z
        Read-only property returning the child widget in focus for
        container widgets.  This default implementation
        always returns ``None``, indicating that this widget has no children.
        Nr:   rA   s    r    rH   zWidgetContainerMixin.focus       r"   N)r3   r	   )r3   zlist[int | str])rN   zIterable[int | str]r3   None)r3   zlist[Widget])r5   r6   r7   __doc__rC   rL   rO   rQ   propertyabcabstractmethodrH   r:   r"   r    r<   r<   :   s=    6$ $&"   r"   r<   c                      e Zd ZdZd
dZd
dZddZeej                  dd              Z
e
j                  dd       Z
eej                  dd              Zej                  dd       Zy	) WidgetContainerListContentsMixinzs
    Mixin class for widget containers whose positions are indexes into
    a list available as self.contents.
    c                P    t        t        t        | j                                    S )z`
        Return an iterable of positions for this container from first
        to last.
        iterrangelenr>   rS   s    r    __iter__z)WidgetContainerListContentsMixin.__iter__   s    
 E#dmm,-..r"   c                Z    t        t        t        | j                        dz
  dd            S )z`
        Return an iterable of positions for this container from last
        to first.
        r   r]   rS   s    r    __reversed__z-WidgetContainerListContentsMixin.__reversed__   s&    
 E#dmm,q0"b9::r"   c                ,    t        | j                        S r(   )r`   r>   rS   s    r    __len__z(WidgetContainerListContentsMixin.__len__   s    4==!!r"   c                     yz8The contents of container as a list of (widget, options)Nr:   rS   s    r    r>   z)WidgetContainerListContentsMixin.contents   rT   r"   c                     yrh   r:   )rA   new_contentss     r    r>   z)WidgetContainerListContentsMixin.contents   rT   r"   c                     yz1
        index of child widget in focus.
        Nr:   rS   s    r    rE   z/WidgetContainerListContentsMixin.focus_position   rT   r"   c                     yrl   r:   r@   s     r    rE   z/WidgetContainerListContentsMixin.focus_position   rT   r"   N)r3   zIterator[int])r3   r2   )r3   list[tuple[Widget, typing.Any]])rj   rn   r3   rU   )r3   z
int | None)rB   r2   r3   rU   )r5   r6   r7   rV   ra   rd   rf   rW   rX   rY   r>   setterrE   r:   r"   r    r[   r[      s    
/;" G  G __G G   
  r"   r[   )
__future__r   rX   enumtyping	constantsr   r   TYPE_CHECKINGcollections.abcr   r   widgetr	   IntEnumr   r<   r[   r:   r"   r    <module>rx      sM    " 
   )	2$Q$,, $QNM M`+ +r"   