o
    >Vb-                     @   sV   d dl mZ ddlmZ ddlmZ dd ZeddZe\Z	Z
ZZG d	d
 d
eZdS )    )	DeviceTpm   )uiutil)vmmGObjectUIc                 C   s.   t jtdt jtdt jtdi}|| | S )NTISCRBSPAPR)r   	MODEL_TIS_	MODEL_CRBMODEL_SPAPRget)vallabels r   8/usr/share/virt-manager/virtManager/device/tpmdetails.py_tpm_pretty_model
   s
   


r         c                       st   e Zd Zdejdg fiZ f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  ZS )vmmTPMDetailschangedNc                    sr   t  jdd ||d | _|j _g  _ fdd} j|t|t|t	|t
d     d _d S )Nztpmdetails.ui)buildertopwinc                    s    fdd}|S )Nc                     s      d S N)
_change_cb)args)edittypeselfr   r   	signal_cb*   s   z5vmmTPMDetails.__init__.<locals>._e.<locals>.signal_cbr   )r   r   r   )r   r   _e)   s   z"vmmTPMDetails.__init__.<locals>._e)on_tpm_type_changedon_tpm_device_path_changedon_tpm_model_changedon_tpm_version_changedztop-box)super__init__vmconn_active_editsr   connect_signals_EDIT_TPM_TYPE_EDIT_TPM_DEVICE_PATH_EDIT_TPM_MODEL_EDIT_TPM_VERSION_init_uiwidgettop_box)r   r'   r   r   r    	__class__r   r   r&   !   s   
zvmmTPMDetails.__init__c                 C   s   d | _ d | _d S r   )r'   r(   r   r   r   r   _cleanup8   s   
zvmmTPMDetails._cleanupc                 C   s   | j  }tjtdgtjtdgg}tj| d|dd d tdgg}|j	j
jr4|j	j
d }ntjtjg}|D ]}||t|g q<tj| d|dd d tdgtjtjgtjtjgg}tj| d	|dd d S )
NEmulatedPassthroughtpm-typeF)sortzHypervisor defaultmodel	tpm-modeltpm-version)r'   get_domain_capabilitiesr   TYPE_EMULATORr
   TYPE_PASSTHROUGHr   build_simple_combor0   devicestpmpresentget_enum
get_valuesr   r	   appendr   VERSION_2_0VERSION_1_2)r   domcapsrowsvaluesvr   r   r   r/   A   s"   




zvmmTPMDetails._init_uic                 C   sD   t | d}t | d|tjk t | d|tjk d S )Nr7   tpm-device-pathr;   )r   get_list_selectionr0   set_grid_row_visibler   r>   r=   )r   devtyper   r   r   _sync_ui^   s   zvmmTPMDetails._sync_uic                 C   sZ   |  dd t|  dtj t| jj}t|  d| t|  dd  d S )NrL   z	/dev/tpm0r7   r:   r;   )	r0   set_textr   set_list_selectionr   r=   default_modelr'   xmlobj)r   rS   r   r   r   reset_statek   s   

zvmmTPMDetails.reset_statec                 C   sd   |    t| d|j t| d|j t| d|j | d|jp+d g | _	d S )Nr7   r:   r;   rL    )
rU   r   rR   r0   typer9   versionrQ   device_pathr)   )r   devr   r   r   set_devw   s   
zvmmTPMDetails.set_devc                 C   s   t | d}t | d}| d }t | d}| d s(d }| d s1d }t| jv r9||_t| jv rA||_	t
| jv rI||_t| jv rQ||_|S )Nr7   r:   rL   r;   )r   rM   r0   get_textget_visibler+   r)   rW   r-   r9   r,   rY   r.   rX   )r   rZ   typr9   rY   rX   r   r   r   _set_values   s"   



zvmmTPMDetails._set_valuesc                 C   s6   t d d  | _| j }t|}| | |  |S r   )_EDIT_TPM_ENUMr)   r(   get_backendr   r_   validate)r   r(   rZ   r   r   r   build_device   s   

zvmmTPMDetails.build_devicec                 C   s    t |j| d}| | |S )N)parsexml)r   r(   get_xmlr_   )r   rZ   newdevr   r   r   update_device   s   
zvmmTPMDetails.update_devicec                 C   s,   |    || jvr| j| | d d S )Nr   )rP   r)   rE   emit)r   r   r   r   r   r      s   
zvmmTPMDetails._change_cb)__name__
__module____qualname__r   	RUN_FIRST__gsignals__r&   r4   r/   rP   rU   r[   r_   rc   rg   r   __classcell__r   r   r2   r   r      s    	

r   N)virtinstr   libr   	baseclassr   r   ranger`   r+   r,   r-   r.   r   r   r   r   r   <module>   s   
	