o
    ÇÜb;.  ã                   @   sX   d dl mZ d dlZddlmZ ddlmZ eddƒZe\Z	Z
ZZZG dd	„ d	eƒZdS )
é    )ÚGtkNé   )Úuiutil)ÚvmmGObjectUIé   é   c                   @   s€   e Zd Zdejdg fiZdd„ Zdd„ Zedd„ ƒZ	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚvmmGraphicsDetailsÚchangedNc                    s’   t jˆ dd ||d |ˆ _|jˆ _g ˆ _‡ fdd„}ˆ j ˆ jˆ j|t	ƒ|t
ƒ|tƒ|tƒ|tƒ|tƒ|tƒ|t	ƒdœ
¡ ˆ  ¡  ˆ  d¡ˆ _d S )Nzgfxdetails.ui)ÚbuilderÚtopwinc                    s   ‡ ‡fdd„}|S )Nc                     s   ˆ  ˆ ¡ d S ©N)Ú
_change_cb)Úargs)ÚedittypeÚself© ú8/usr/share/virt-manager/virtManager/device/gfxdetails.pyÚ	signal_cb'   s   z:vmmGraphicsDetails.__init__.<locals>._e.<locals>.signal_cbr   )r   r   ©r   )r   r   Ú_e&   s   z'vmmGraphicsDetails.__init__.<locals>._e)
Úon_graphics_show_passwordÚon_graphics_port_auto_toggledÚon_graphics_opengl_toggledÚon_graphics_type_changedÚon_graphics_use_passwordÚon_graphics_listen_type_changedÚon_graphics_password_changedÚon_graphics_address_changedÚon_graphics_port_changedÚon_graphics_rendernode_changedzgraphics-box)r   Ú__init__ÚvmÚconnÚ_active_editsr
   Úconnect_signalsÚ_show_password_cbÚ_change_port_autoÚ_EDIT_GFX_OPENGLÚ_EDIT_GFX_TYPEÚ_EDIT_GFX_PASSWDÚ_EDIT_GFX_LISTENÚ_EDIT_GFX_PORTÚ_init_uiÚwidgetÚtop_box)r   r!   r
   r   r   r   r   r   r       s*   ÿözvmmGraphicsDetails.__init__c                 C   s   d | _ d | _d S r   )r!   r"   r   r   r   r   Ú_cleanup;   s   
zvmmGraphicsDetails._cleanupc                 C   s2   | t jjt jjt jjfv rt| ƒ ¡ S t| ƒ ¡ S r   )ÚvirtinstÚDeviceGraphicsÚTYPE_VNCÚTYPE_SDLÚTYPE_RDPÚstrÚupperÚ
capitalize)Úgtyper   r   r   Úgraphics_pretty_type_simpleD   s   þz.vmmGraphicsDetails.graphics_pretty_type_simplec                 C   s¨  |   d¡}t tt¡}| |¡ t |d¡ | ¡  | dt	dƒg¡ | dt	dƒg¡ |   d¡}t tt¡}| |¡ t |d¡ | ¡  | dt	d	ƒg¡ | d
t	dƒg¡ |   d¡ t tt¡¡ t |   d¡d¡ |   d¡ 
¡ }| ¡  | d t	dƒg¡ | dt	dƒg¡ | dt	dƒg¡ |   d¡}t tt¡}| |¡ t |d¡ | d t	dƒg¡ | j d¡}|D ]}|j}	|	 ¡ rÑ|	 ¡ j}
| |
| ¡ g¡ qºd S )Núgraphics-typer   ÚspicezSpice serverÚvncz
VNC serverúgraphics-listen-typeÚaddressÚAddressÚnoneÚNoneúgraphics-addresszHypervisor defaultz	127.0.0.1zLocalhost onlyz0.0.0.0zAll interfacesúgraphics-rendernodeÚAutoÚdrm)r-   r   Ú	ListStorer5   Ú	set_modelr   Úinit_combo_text_columnÚclearÚappendÚ_Ú	get_modelr"   Úfilter_nodedevsÚxmlobjÚis_drm_renderÚget_devnodeÚpathÚpretty_name)r   Úgraphics_listÚgraphics_modelÚgraphics_listen_listÚgraphics_listen_modelÚmodelÚcomboÚdevsÚirE   Ú
rendernoder   r   r   r,   Q   sD   






€üzvmmGraphicsDetails._init_uic                 C   sŽ  t  |  d¡¡}|dk}|dk}t  |  d¡¡}|dv }tdd„ | jjjjD ƒƒ}t  |  d¡| ¡ t  |  d	¡| ¡ |  d
¡ 	¡ }|  d¡ 
|¡ |sV|  d¡ d¡ |  d¡ 	¡ }|  d¡ |¡ |  d¡ 	¡ }	t  |  d¡|	ou|¡ g d¢}
|  d¡ 	¡ pˆ|  d¡ ¡ }|  d¡ | ¡ ddg}|dkr¡| ddg¡ |r¯| d¡ |	r¯| d¡ |sµ|sµg }|
D ]}t  |  |¡||v ¡ q·d S )Nr:   r<   r;   r=   )r@   Úsocketc                 S   s    g | ]}|j d kr|jr|‘qS )Úvirtio)rW   Úaccel3d)Ú.0Úvr   r   r   Ú
<listcomp>…   s
    ÿz/vmmGraphicsDetails._sync_ui.<locals>.<listcomp>zgraphics-warn-virtiozgraphics-warn-listenúgraphics-password-chkúgraphics-passwordÚ zgraphics-visiblity-chkúgraphics-openglúgraphics-opengl-subopts-box)r=   rB   úgraphics-password-boxúgraphics-port-boxre   rf   úgraphics-port-autoúgraphics-portrg   r>   rh   rB   )r   Úget_list_selectionr-   Úboolr!   rN   ÚdevicesÚvideoÚset_grid_row_visibleÚ
get_activeÚset_sensitiveÚset_textÚset_visibilityÚget_inconsistentÚset_visibleÚextendrJ   )r   r8   Úis_vncÚis_spiceÚlistenÚhas_listen_noneÚhas_virtio_3dÚpasswd_enabledÚpasswd_visibleÚglvalÚall_rowsÚis_autoÚrowsÚrowr   r   r   Ú_sync_ui}   sX   
ÿþþþ	ÿ

ÿzvmmGraphicsDetails._sync_uic                 C   s¾   t  |  d¡| j ¡ ¡ |  d¡ d¡ |  d¡ d¡ |  d¡ ¡ }|  d¡ |d j¡ |  d¡ d¡ |  d	¡ 	d
¡ |  d	¡ 
d¡ |  d¡ d¡ |  d¡ d¡ |  ¡  g | _d S )Nr:   r=   r   rB   rC   éÿÿÿÿri   Trc   rd   Frb   re   )r   Úset_list_selectionr-   ÚconfigÚget_graphics_typeÚ
set_activerL   Úset_active_iterÚiterrr   rq   rƒ   r#   )r   Úrendermodelr   r   r   Úreset_state½   s   þ
zvmmGraphicsDetails.reset_statec           
      C   s^  |   ¡  |j}tdƒ}|dks|jr#d}|r"|dkr"tdƒd|i }n	|d u r*d }nd}|  d¡ |p4d¡ |  d	¡ |¡ |  d	¡ t|ƒ¡ |  d	¡ 	|d u ¡ |j
}t |  d
¡|¡ |jd u}|  d¡ |¡ |  d¡ |jptd¡ | ¡ }t |  d¡|¡ t |  d¡|j¡ t|jƒ}|jp–d }	|  d¡ |¡ |rªt |  d¡|	¡ g | _d S )NÚA_utor„   TzA_uto (Port %(port)d)ÚportFrj   r   ri   r:   rb   rc   rd   r=   rB   re   rC   )rŒ   rŽ   rK   Úautoportr-   Ú	set_valueÚ	set_labelrˆ   rl   Úset_inconsistentÚtyper   r…   Úpasswdrr   Úget_first_listen_typery   Úglr[   r#   )
r   ÚgfxÚportvalÚportautolabelÚportautor8   Ú
use_passwdÚ
listentyper~   Ú	rendervalr   r   r   Úset_devÐ   sF   €

ÿÿ


ÿ
zvmmGraphicsDetails.set_devc           
      C   sh  i }|   d¡ ¡ }|   d¡ ¡ sd }t |   d¡¡}|   d¡ ¡ s#d }|   d¡ ¡ }|   d¡ ¡ s3d }|   d¡ ¡ }t |   d¡¡}|   d¡ ¡ rX|   d¡ ¡ rX| j 	t
¡ d}|r\d}t |   d	¡¡}t |   d
¡¡}|ru|dkrud }n|ry|}t |   d¡¡}	t| jv rŠ|	|d< t
| jv r“||d< t| jv rœ||d< t| jv r¥||d< t| jv r²||d< ||d< |S )Nre   rC   rc   rb   ri   rj   Tr„   r=   rB   r@   r:   r8   rŽ   ry   r”   r–   r[   )r-   rp   Ú
is_visibler   rk   Úget_textÚspin_get_helperrt   r#   rJ   r+   r(   r*   r)   r'   )
r   Úretr~   r[   r”   rš   rŽ   ry   Úaddrr8   r   r   r   Ú
get_values   sL   ÿ




zvmmGraphicsDetails.get_valuesc                 C   sf   t d d … | _|  ¡ }t | j ¡ ¡}|d |_|d |_|d |_	|d |_
|d |_|d |_|S )Nr8   r”   r–   r[   ry   rŽ   )Ú_EDIT_GFX_ENUMr#   r¤   r0   r1   r"   Úget_backendr“   r”   r–   r[   ry   rŽ   )r   ÚvaluesÚdevr   r   r   Úbuild_device3  s   





zvmmGraphicsDetails.build_devicec                 C   s,   |   ¡  || jvr| j |¡ |  d¡ d S )Nr	   )rƒ   r#   rJ   Úemit)r   r   r   r   r   r   F  s   
zvmmGraphicsDetails._change_cbc                 C   s   |   d¡ d¡ |  t¡ d S )Nri   F)r-   r’   r   r+   )r   Úignorer   r   r   r&   L  s   z$vmmGraphicsDetails._change_port_autoc                 C   s   |   ¡  d S r   )rƒ   )r   Úsrcr   r   r   r%   P  s   z$vmmGraphicsDetails._show_password_cb)Ú__name__Ú
__module__Ú__qualname__r   Ú	RUN_FIRSTÚ__gsignals__r    r/   Ústaticmethodr9   r,   rƒ   rŒ   rž   r¤   r©   r   r&   r%   r   r   r   r   r      s     ÿ	
,@03r   )Úgi.repositoryr   r0   Úlibr   Ú	baseclassr   Úranger¥   r(   r*   r+   r'   r)   r   r   r   r   r   Ú<module>   s   
ú