o
    `K                     @   s<   d dl mZ ddlmZ ddlmZmZ G dd deZdS )    )Gtk   )uiutil)
vmmGObjectvmmGObjectUIc                   @   s   e Zd ZejdegfejdegfdZdZdZdZ	e
e	\ZZZ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 Zdd Zdd Zd*dd Zd+d"d#Zd$d% Zd&d' Zd(d) ZdS ),vmmMediaComboN)changedactivatefloppycdrom   c                 C   sd   t j| d d ||d || _d | _d | _d| _|   g | _g | _g | _	d| _
| | j| j d S )N)buildertopwinF)r   __init__conntop_box_combo
_populated_init_ui	_iso_rows_cdrom_rows_floppy_rows_rows_initedadd_gsettings_handleconfigon_iso_paths_changed_iso_paths_changed_cb)selfr   r   r    r   8/usr/share/virt-manager/virtManager/device/mediacombo.pyr      s   zvmmMediaCombo.__init__c                 C   s   d | _ | j  d | _d S N)r   r   destroyr   r   r   r   _cleanup-   s   

zvmmMediaCombo._cleanupc                    s  t   _ jd  jt jj t jdd _ j	 j
  j d  fdd} j|  j  _ jtd  jd  j d  jd	 j  jd
 j  jd j t   _ j j  j  t tttt} j| d S )N   T)	has_entryzmedia-comboc                    s   | |  j  d u S r    )MEDIA_FIELD_PATH)_model_iterr"   r   r   separator_cb>      z,vmmMediaCombo._init_ui.<locals>.separator_cbzNo media selectedzmedia-entryr   r	   z
icon-press)r   Boxr   set_spacingset_orientationOrientation
HORIZONTALComboBoxr   set_entry_text_columnMEDIA_FIELD_LABELget_accessibleset_nameset_row_separator_func	get_child_entryset_placeholder_text_set_hexpandconnect_on_entry_changed_cb_on_entry_activated_cb_on_entry_icon_press_cbButton_browseaddshow_all	ListStorestrbool	set_model)r   r)   storer   r"   r   r   7   s(   


zvmmMediaCombo._init_uic                 C   s8   d g| j  }||| j< ||| j< ||| j< ||| j< |S r    )MEDIA_FIELDS_NUMr&   r2   MEDIA_FIELD_HAS_MEDIAMEDIA_FIELD_KEY)r   pathlabel	has_mediakeyrowr   r   r   	_make_rowS   s   



zvmmMediaCombo._make_rowc                 C   s   g }| j dD ]A}|jjdkr|jjdv sq|jj|krq|jjp%td}|jjs.td}d||jjf }| 	|jj||jj|jj
}|| q|S )Nstorage)r   r
   zMedia UnknownzNo media detectedz%s (%s))r   filter_nodedevsxmlobjdevice_type
drive_typemedia_labelr9   media_availableblockrP   nameappend)r   
media_typerowsnodedevrV   rL   rO   r   r   r   _make_nodedev_rows[   s"   z vmmMediaCombo._make_nodedev_rowsc                 C   s2   g }| j  D ]}| ||d|}|| q|S )NT)r   get_iso_pathsrP   rZ   )r   r\   rK   rO   r   r   r   _make_iso_rowso   s
   zvmmMediaCombo._make_iso_rowsc                 C   s,   |  d| _|  d| _|  | _d| _d S )Nr   r
   T)r^   r   r   r`   r   r   r"   r   r   r   
_init_rowsv   s   

zvmmMediaCombo._init_rowsc                 C      |  d| j d S )Nr   emitr7   r   srcr   r   r   r<      r*   z"vmmMediaCombo._on_entry_changed_cbc                 C   rb   )Nr	   rc   re   r   r   r   r=      r*   z$vmmMediaCombo._on_entry_activated_cbc                 C   s   | j d d S )N )r7   set_text)r   rf   icon_poseventr   r   r   r>         z%vmmMediaCombo._on_entry_icon_press_cbc                 C   s   |   | _d S r    )r`   r   r"   r   r   r   r      s   z#vmmMediaCombo._iso_paths_changed_cbc                 C   s    || j krd S || _ |   d S r    )r   ra   )r   r   r   r   r   set_conn   s   
zvmmMediaCombo.set_connFc                 C   s   | j s|   | jd | j }|  | jD ]}|| q| j	}|r)| j
}t|r:|r:|| d d dd  |D ]}|| q<| jd d S )Nrg   F)r   ra   r7   rh   r   	get_modelclearr   rZ   r   r   lenrP   
set_active)r   	is_floppymodelrO   nodedev_rowsr   r   r   reset_state   s   

zvmmMediaCombo.reset_stateTc                 C   s0   t j| j| jd}|r|ds| j| |S )Ncolumnz/dev)r   get_list_selectionr   r&   
startswithr   add_iso_path)r   store_mediaretr   r   r   get_path   s   zvmmMediaCombo.get_pathc                 C   s$   t j| j|| jd | jd d S )Nrv   rm   )r   set_list_selectionr   r&   r7   set_position)r   rK   r   r   r   set_path   s   
zvmmMediaCombo.set_pathc                 C   s   | | j d S r    )set_mnemonic_widgetr7   )r   rL   r   r   r   set_mnemonic_label   rk   z vmmMediaCombo.set_mnemonic_labelc                 C   s(   t jj}| j|d | j|d d S )Nzedit-clear-symbolicT)r   EntryIconPosition	SECONDARYr7   set_icon_from_icon_nameset_icon_activatable)r   posr   r   r   show_clear_icon   s   zvmmMediaCombo.show_clear_icon)F)T) __name__
__module____qualname__r   	RUN_FIRSTobject__gsignals__MEDIA_TYPE_FLOPPYMEDIA_TYPE_CDROMrH   ranger&   r2   rI   rJ   r   r#   r   rP   r^   r`   ra   r<   r=   r>   r   rl   ru   r}   r   r   r   r   r   r   r   r      s:    


r   N)gi.repositoryr   libr   	baseclassr   r   r   r   r   r   r   <module>   s   