o
    >VbÊ&  ã                   @   sx   d dl mZ d dlmZ d dlmZ ddlmZ ddlmZ ddl	m
Z
 edd	ƒZe\ZZZZZZZG d
d„ deƒZdS )é    )ÚGtk)ÚDeviceFilesystem)Úxmlutilé   )Úuiutil)ÚvmmGObjectUI)ÚvmmStorageBrowseré   é   c                   @   s~   e Zd Zdejdg fi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dd„Zdd„ Zdd„ ZdS )ÚvmmFSDetailsÚchangedNc                    sŽ   t jˆ dd ||d |ˆ _|jˆ _d ˆ _g ˆ _‡ fdd„}ˆ j ˆ j|t	ƒ|t
ƒ|tƒ|tƒ|tƒ|tƒ|tƒdœ¡ ˆ  ¡  ˆ  d¡ˆ _d S )Nzfsdetails.ui)ÚbuilderÚtopwinc                    s   ‡ ‡fdd„}|S )Nc                     s   ˆ  ˆ ¡ d S ©N)Ú
_change_cb)Úargs)ÚedittypeÚself© ú7/usr/share/virt-manager/virtManager/device/fsdetails.pyÚ	signal_cb.   s   z4vmmFSDetails.__init__.<locals>._e.<locals>.signal_cbr   )r   r   ©r   )r   r   Ú_e-   s   z!vmmFSDetails.__init__.<locals>._e)Úon_fs_source_browse_clickedÚon_fs_type_combo_changedÚon_fs_driver_combo_changedÚon_fs_readonly_toggledÚon_fs_format_combo_changedÚon_fs_source_changedÚon_fs_ram_source_changedÚon_fs_target_changedzvmm-fs-details)r   Ú__init__ÚvmÚconnÚ_storage_browserÚ_active_editsr   Úconnect_signalsÚ_browse_fs_source_cbÚ_EDIT_FS_TYPEÚ_EDIT_FS_DRIVERÚ_EDIT_FS_READONLYÚ_EDIT_FS_FORMATÚ_EDIT_FS_SOURCEÚ_EDIT_FS_RAM_SOURCEÚ_EDIT_FS_TARGETÚ_init_uiÚwidgetÚtop_box)r   r"   r   r   r   r   r   r   r!   #   s(   ÿøzvmmFSDetails.__init__c                 C   s*   d | _ d | _| jr| j ¡  d | _d S d S r   )r"   r#   r$   Úcleanupr   r   r   r   Ú_cleanup@   s   

þzvmmFSDetails._cleanupc                    sä   ‡ fdd„}ˆ j  ¡ r|dtjtjtjtjgƒ n|dtjgƒ ˆ j  ¡ r0|dtjtjd gƒ n$ˆ j	 
¡ }g }| ¡ rB| ddg¡ | d dg¡ tjˆ  d¡|dd |d	d
dgƒ ˆ  d¡ ˆ j  ¡ pnˆ j  ¡ pnˆ j  ¡ ¡ d S )Nc                    s\   ˆ   | ¡}t tt¡}| |¡ t |d¡ |D ]}|}|d u r$tdƒ}| ||g¡ qd S )Nr	   zHypervisor default)	r0   r   Ú	ListStoreÚstrÚ	set_modelr   Úinit_combo_text_columnÚ_Úappend)Ú	combonameÚvaluesÚcomboÚmodelÚxmlvalÚlabelr   r   r   Úsimple_store_setN   s   

üz/vmmFSDetails._init_ui.<locals>.simple_store_setúfs-type-comboúfs-driver-comboÚvirtiofsz	virtio-9pF)Úsortúfs-format-comboÚrawÚqcow2úfs-readonly)r#   Úis_container_onlyr   Ú
TYPE_MOUNTÚ	TYPE_FILEÚ
TYPE_BLOCKÚTYPE_RAMÚDRIVER_LOOPÚ
DRIVER_NBDr"   Úget_domain_capabilitiesÚsupports_filesystem_virtiofsr9   r   Úbuild_simple_combor0   Úset_visibleÚis_qemuÚis_testÚis_lxc)r   r@   ÚdomcapsÚrowsr   r   r   r/   M   s@   
ýÿ
þÿ
ÿ

ÿýzvmmFSDetails._init_uic                 C   sT  t  |  d¡¡}t  |  d¡¡}| j ¡ p| j ¡ }|tjk}t  |  d¡|¡ t  |  d¡| ¡ t	|tj
kƒ}t  |  d¡|¡ |pH|tjk}|tjkrStdƒ}ntdƒ}|  d¡ |¡ |  d¡ d	¡ t  |  d¡| ¡ t  |  d¡|¡ |d
k}| j ¡ \}	}
|o‰|	 }t  |  d¡|¡ |r¨tdƒ}|  d¡ dt |¡ ¡ d S d S )NrA   rB   zfs-ram-source-boxzfs-source-boxrE   z
Te_mplate:z_Source path:zfs-source-titleTrC   zfs-driver-warn-boxz>You may need to 'Enable shared memory' on the 'Memory' screen.zfs-driver-warnz<small>%s</small>)r   Úget_list_selectionr0   r#   rT   rU   r   rM   Úset_grid_row_visibleÚboolrO   rK   ÚTYPE_TEMPLATEr8   Úset_textÚset_use_underliner"   Úhas_shared_memÚ
set_markupr   Ú
xml_escape)r   ÚfstypeÚfsdriverrT   Úshow_ram_sourceÚshow_formatÚshow_driver_comboÚsource_textÚneed_shared_memÚhave_shared_memÚ_shared_mem_errÚshow_shared_mem_warnr?   r   r   r   Ú_sync_ui~   sT   

ÿÿÿ
ÿ

ÿ
ÿ

ÿÿ
ÿýzvmmFSDetails._sync_uic                 C   sr   |   d¡ d¡ |   d¡ d¡ |   d¡ d¡ |   d¡ d¡ |   d¡ d¡ |   d¡ d	¡ |  ¡  g | _d S )
NrA   r   rB   rE   ú	fs-sourceÚ ú	fs-targetrH   F)r0   Ú
set_activer]   rl   r%   r   r   r   r   Úreset_state¬   s   
zvmmFSDetails.reset_statec                 C   s°   |   ¡  t |  d¡|j¡ t |  d¡|j¡ t |  d¡|j¡ |jtjkr2|  d¡ 	|j
¡ n|  d¡ t|j
ƒd ¡ |  d¡ 	|jpHd¡ |  d	¡ |j¡ g | _d S )
NrA   rB   rE   rm   úfs-ram-source-spini   ro   rn   rH   )rq   r   Úset_list_selectionr0   ÚtypeÚdriver_typeÚdriver_formatr   rM   r]   ÚsourceÚ	set_valueÚintÚtargetrp   Úreadonlyr%   )r   Údevr   r   r   Úset_dev¶   s    ÿÿÿ
zvmmFSDetails.set_devc           
      C   s8  t  |  d¡¡}t  |  d¡¡}|  d¡ ¡ }|  d¡ ¡ }|  d¡ ¡ }t  |  d¡¡}|  d¡ ¡ s6d }t  |  d¡¡}|  d¡ ¡ sGd }t| jv rO||_	t
| jv sYt| jv rh|tjkre||_d|_n||_t| jv rp||_t| jv rx||_t| jv r|j}	||_|	d	ks‹|d	kr| ¡ |_t| jv rš||_d S d S )
NrA   rr   rm   ro   rH   rE   rB   ÚMiBrC   )r   rY   r0   Úspin_get_helperÚget_textÚ
get_activeÚget_visibler(   r%   rt   r-   r,   r   rM   rw   Úsource_unitsr.   rz   r*   r{   r)   ru   Údefault_accessmodeÚ
accessmoder+   rv   )
r   r|   rb   Úusagerw   rz   r{   ÚfsformatÚdriverÚ
origdriverr   r   r   Ú_set_valuesÎ   s>   









ÿzvmmFSDetails._set_valuesc                 C   sB   t d d … | _| j ¡ }t|ƒ}|  |¡ | |j¡ | ¡  |S r   )	Ú_EDIT_FS_ENUMr%   r#   Úget_backendr   rŠ   Úvalidate_targetrz   Úvalidate)r   r#   r|   r   r   r   Úbuild_deviceô   s   

zvmmFSDetails.build_devicec                 C   s    t |j| ¡ d}|  |¡ |S )N)Úparsexml)r   r#   Úget_xmlrŠ   )r   r|   Únewdevr   r   r   Úupdate_deviceÿ   s   
zvmmFSDetails.update_deviceFc                    sh   ‡ fdd„}|r| j jp| j j}| jd u rt| jƒ| _| j |¡ | j |¡ | j | j	 
tj¡¡ d S )Nc                    s   |r	ˆ   |¡ d S d S r   )r]   )ÚsrcÚpath©Útextentr   r   Úset_storage_cb
  s   ÿz1vmmFSDetails._browse_file.<locals>.set_storage_cb)ÚconfigÚCONFIG_DIR_FSÚCONFIG_DIR_IMAGEr$   r   r#   Úset_finish_cbÚset_browse_reasonÚshowr   Úget_ancestorr   ÚWindow)r   r—   Úisdirr˜   Úreasonr   r–   r   Ú_browse_file	  s   ÿþ
zvmmFSDetails._browse_filec                 C   s,   |   ¡  || jvr| j |¡ |  d¡ d S )Nr   )rl   r%   r9   Úemit)r   r   r   r   r   r     s   
zvmmFSDetails._change_cbc                 C   s   | j |  d¡dd d S )Nrm   T)r¡   )r£   r0   )r   r”   r   r   r   r'   $  s   z!vmmFSDetails._browse_fs_source_cb)F)Ú__name__Ú
__module__Ú__qualname__r   Ú	RUN_FIRSTÚ__gsignals__r!   r3   r/   rl   rq   r}   rŠ   r   r“   r£   r   r'   r   r   r   r   r      s    ÿ1.
&

r   N)Úgi.repositoryr   Úvirtinstr   r   Úlibr   Ú	baseclassr   Ústoragebrowser   Úranger‹   r(   r)   r,   r-   r*   r.   r+   r   r   r   r   r   Ú<module>   s"   
	ø