o
    \cr                     @   s   d dl m Z d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ e	rNd dlmZ G dd deZG dd	 d	eZG d
d deddZG dd dZG dd deZG dd deZdS )    )gettext)ListUnionIterableDictOptionalCallableTYPE_CHECKINGTupleIteratorMappingSequence)GLib)AppletPlugin)	TypedDictc                   @   sJ   e Zd ZU eed< eed< eed< eed< ee ed< eg df ed< dS )SubmenuItemDicttextmarkup	icon_name	sensitivetooltipNcallback)__name__
__module____qualname__str__annotations__boolr   r    r   r   =/usr/lib/python3/dist-packages/blueman/plugins/applet/Menu.pyr      s   
 r   c                   @   s   e Zd ZU eed< dS )MenuItemDictBaseidN)r   r   r   intr   r   r   r   r   r       s   
 r    c                   @   s   e Zd ZU ed ed< dS )MenuItemDictr   submenuN)r   r   r   r   r   r   r   r   r   r#      s   
 r#   F)totalc                   @   s  e Zd Zdddedeeef dee dedee dee d	ee	g d
f  dee	g e
d f  dedefddZedefddZedeeef fddZedee	g d
f  fddZedefddZdeeeeeef f  fddZdeeeeeeeeeeeeef f  f f  fddZeded fdd Zd,dededd
fd"d#Zdedd
fd$d%Zdedd
fd&d'Zdedd
fd(d)Zdedd
fd*d+Zd
S )-MenuItemmenu_pluginMenuownerpriorityr   r   r   r   r   Nsubmenu_functionr   visibler   c                 C   st   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|r)|r)|s6|	s8t|||||	gr4J d S d S d S N)_menu_plugin_owner	_priority_text_markup
_icon_name_tooltip	_callback_submenu_function_visible
_sensitiveany)selfr'   r)   r*   r   r   r   r   r   r+   r,   r   r   r   r   __init__   s   zMenuItem.__init__returnc                 C      | j S r-   )r/   r:   r   r   r   r)   .      zMenuItem.ownerc                 C   r=   r-   )r0   r>   r   r   r   r*   2   r?   zMenuItem.priorityc                 C   r=   r-   )r5   r>   r   r   r   r   6   r?   zMenuItem.callbackc                 C   r=   r-   )r7   r>   r   r   r   r,   :   r?   zMenuItem.visiblec                 c   s0    dD ]}t | d| }|d ur||fV  qd S )N)r   r   r   r   r   _)getattr)r:   keyvaluer   r   r   
_iter_base>   s   
zMenuItem._iter_basec                 c   sT    d| j d d> | j d  fV  |  E d H  | j}|r(ddd |D fV  d S d S )Nr!   r         r$   c                 S   s   g | ]}t |qS r   )dict.0itemr   r   r   
<listcomp>I   s    z%MenuItem.__iter__.<locals>.<listcomp>)r0   rD   submenu_items)r:   r$   r   r   r   __iter__D   s   zMenuItem.__iter__SubmenuItemc                    s,    j sg S    }|sg S  fdd|D S )Nc                    sT   g | ]&}t  j jd |d|dd|d|d|ddd|d	dqS )
)r   r   r   r   Fr   r   r   NTr   )rN   r.   r/   getrH   r>   r   r   rK   R   s    
z*MenuItem.submenu_items.<locals>.<listcomp>)r6   )r:   rL   r   r>   r   rL   K   s   
zMenuItem.submenu_itemsFc                 C   s   || _ || _| j  d S r-   )r1   r2   r.   on_menu_changed)r:   r   r   r   r   r   set_textW   s   zMenuItem.set_textc                 C      || _ | j  d S r-   )r3   r.   rP   )r:   r   r   r   r   set_icon_name\      zMenuItem.set_icon_namec                 C   rR   r-   )r4   r.   rP   )r:   r   r   r   r   set_tooltip`   rT   zMenuItem.set_tooltipc                 C   rR   r-   )r7   r.   rP   )r:   r,   r   r   r   set_visibled   rT   zMenuItem.set_visiblec                 C   rR   r-   )r8   r.   rP   )r:   r   r   r   r   set_sensitiveh   rT   zMenuItem.set_sensitive)F)r   r   r   r   r
   r"   r   r   r   r   r   r;   propertyr)   r*   r   r,   r   r   rD   r   r   rM   rL   rQ   rS   rU   rV   rW   r   r   r   r   r&      sB    
":r&   c                   @   s.   e Zd Zdeeeeeef f  fddZdS )rN   r<   c                 c   s    |   E d H  d S r-   )rD   r>   r   r   r   rM   n   s   zSubmenuItem.__iter__N)	r   r   r   r   r
   r   r   r   rM   r   r   r   r   rN   m   s    &rN   c                   @   sr  e Zd ZedZdZdZdZd&ddZ						d'd
e	de
eeeef f dee dedee dee deeg df  deeg ed f  dededefddZd
e	ddfddZd&ddZdeeeejf  fddZdeeee
eeeeeee
eef f  f f  deeeejf  fddZd e
eeeeeee
eef f  f dejfd!d"Zd#ee ddfd$d%ZdS )(r(   zLProvides a menu for the applet and an API for other plugins to manipulate itzopen-menu-symbolicWalmisFr<   Nc                 C   s:   i | _ | dd | ddd| j | ddd| j d S )NMenuChangedaa{sv}GetMenur   ActivateMenuItem)ai )_Menu__menuitems_add_dbus_signal_add_dbus_method	_get_menu_activate_menu_itemr>   r   r   r   on_loadx   s   zMenu.on_loadTr)   r*   r   r   r   r   r   r+   r   r,   r   c                 C   sF   t |tr	|df}t| |||||||||	|
}|| j|j< |   |S )Nr   )
isinstancer"   r&   r`   r*   rP   )r:   r)   r*   r   r   r   r   r   r+   r,   r   rJ   r   r   r   add   s   
zMenu.addc                 C   s4   t | j D ]}|j|kr| j|j= q|   d S r-   )listr`   valuesr)   r*   rP   )r:   r)   rJ   r   r   r   
unregister   s
   

zMenu.unregisterc                 C   s   |  d|   d S )NrZ   )_emit_dbus_signalrc   r>   r   r   r   rP      s   zMenu.on_menu_changedc                    s"      fddt j D S )Nc                 3   s*    | ]} j | jrt j | V  qd S r-   )r`   r,   rG   )rI   rB   r>   r   r   	<genexpr>   s
    
z!Menu._get_menu.<locals>.<genexpr>)_prepare_menusortedr`   keysr>   r   r>   r   rc      s   zMenu._get_menudatac                    s    fdd|D S )Nc                    s"   g | ]} fd d|  D qS )c                    s   i | ]
\}}|  |qS r   )_build_variant)rI   kvr>   r   r   
<dictcomp>   s    z1Menu._prepare_menu.<locals>.<listcomp>.<dictcomp>)itemsrH   r>   r   r   rK      s   " z&Menu._prepare_menu.<locals>.<listcomp>r   )r:   rp   r   r>   r   rm      s   zMenu._prepare_menurC   c                 C   sT   t |trtd|S t |trtd|S t |tr!td|S td| |S )Nbisr[   )rf   r   r   Variantr"   r   rm   )r:   rC   r   r   r   rq      s   


zMenu._build_variantindexesc                 C   sT   | j |d d? |d d f }t|dd  D ]}|j| }q|jr(|  d S d S )Nr   rE      rF   )r`   rh   rL   r   )r:   rz   nodeindexr   r   r   rd      s   zMenu._activate_menu_item)r<   N)NFNNNNTT) r   r   r   r@   __description____icon__
__author____unloadable__re   r   r   r"   r
   r   r   r   r   r   r&   rg   rj   rP   r   r   r   ry   rc   r   rm   rq   r   rd   r   r   r   r   r(   r   sL    
$


4	r(   N)r   r@   typingr   r   r   r   r   r   r	   r
   r   r   r   gi.repositoryr   blueman.plugins.AppletPluginr   typing_extensionsr   r   r    r#   r&   rN   r(   r   r   r   r   <module>   s    4R