o
    AVb€  ã                   @   sò   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 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 dZedƒ\ZZZZZZZZZZZ edƒ\Z!Z"Z#Z$Z%Z&dd„ Z'dd„ Z(dd„ Z)G dd„ deƒZ*dS )é    )ÚGObject)ÚGtk)ÚGdk)Ú	GdkPixbuf)Úlog)Úxmlutilé   )Úvmmenu)Úuiutil)ÚvmmGObjectUI)ÚvmmConnectionManager)Ú	vmmEngine)ÚCellRendererSparklineé(   é   é   c                 C   s(   t  ¡ }| t j¡ |  ||¡ | ¡ S ©N)r   ÚValueÚinitÚTYPE_INTÚstyle_get_propertyÚget_int)ÚwidgetÚpropnameÚvalue© r   ú./usr/share/virt-manager/virtManager/manager.pyÚ_style_get_prop/   s   r   c                 C   s   | |k| |k  S r   r   )ÚaÚbr   r   r   Ú_cmp6   ó   r    c                 C   sl   | j j}|d u r
d S zt ¡ }| ||¡ | |¡ | ¡  | ¡ W S  ty5   t	 
d¡ d | j _Y d S w )Nz"Error loading inspection icon data)Ú
inspectionÚiconr   ÚPixbufLoaderÚset_sizeÚwriteÚcloseÚ
get_pixbufÚ	Exceptionr   Ú	exception)ÚvmÚwÚhÚpng_dataÚpbr   r   r   Ú_get_inspection_icon_pixbuf:   s   


ýr0   c                   @   sŽ  e Zd Zedd„ ƒZdd„ Zdd„ Zdždd	„Zd
d„ Zdd„ Z	dd„ Z
dd„ 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"d#„Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ ZdŸd2d3„Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#dŸd@dA„Z$dBdC„ Z%dDdE„ Z&dFdG„ Z'dHdI„ Z(dJdK„ Z)dLdM„ Z*dNdO„ Z+dPdQ„ Z,dRdS„ Z-dTdU„ Z.dVdW„ Z/dXdY„ Z0dZd[„ Z1d\d]„ Z2d^d_„ Z3d`da„ Z4dbdc„ Z5ddde„ Z6dŸdfdg„Z7dhdi„ Z8djdk„ Z9dldm„ Z:dndo„ Z;dpdq„ Z<drds„ Z=dtdu„ Z>dvdw„ Z?dxdy„ Z@dzd{„ ZAd|d}„ ZBd~d„ ZCd€d„ ZDd‚dƒ„ ZEd„d…„ ZFd†d‡„ ZGdˆd‰„ ZHdŠd‹„ ZIdŒd„ ZJdŽd„ ZKdd‘„ ZLd’d“„ ZMd”d•„ ZNd–d—„ ZOd˜d™„ ZPdšd›„ ZQdœd„ ZRdS ) Ú
vmmManagerc              
   C   s\   z| j stƒ | _ | j W S  ty- } z|s‚ |j tdƒt|ƒ ¡ W Y d }~d S d }~ww )NzError launching manager: %s)Ú	_instancer1   r)   ÚerrÚshow_errÚ_Ústr)ÚclsÚ	parentobjÚer   r   r   Úget_instanceM   s   ÿ€ýzvmmManager.get_instancec                 C   s  t  | dd¡ |  ¡  | j ¡ \}}| j |pd|pd¡ d | _d | _t	 
| | j¡| _	t	 | | j¡| _t ¡ | _| j ¡  d¡ i | _| j i d| j“d| j“d| j“d| j“d	| j“d
| j“d| j“d| j“d| j“d| j“d| j“d| j“d| j “d| j!“d| j“d| j"“d| j#“| j | j$| j%| j&| j'| j(| j)| j*dœ¥¡ d | _+d | _,d | _-d | _.d | _/d | _0|  1¡  |  2¡  |  3¡  |  4¡  |  5¡  |  6d¡ 7¡  8d| j5¡ d| _9d| _:|  ;t<¡ |  ;t=¡ |  ;t>¡ |  ;t?¡ t@ A¡ }| 8d| jB¡ | 8d| jC¡ |jD E¡ D ]	}|  B||¡ qd S )Nz
manager.uizvmm-manageri&  z	conn-menuÚ%on_menu_view_guest_cpu_usage_activateÚ$on_menu_view_host_cpu_usage_activateÚ"on_menu_view_memory_usage_activateÚon_menu_view_disk_io_activateÚ%on_menu_view_network_traffic_activateÚon_vm_manager_delete_eventÚon_vmm_manager_configure_eventÚ$on_menu_file_add_connection_activateÚon_menu_new_vm_activateÚon_menu_file_quit_activateÚon_menu_file_close_activateÚon_vmm_close_clickedÚon_vm_open_clickedÚon_vm_run_clickedÚon_vm_new_clickedÚon_vm_shutdown_clickedÚon_vm_pause_clicked)Úon_menu_edit_details_activateÚon_menu_edit_delete_activateÚon_menu_host_details_activateÚon_vm_list_row_activatedÚon_vm_list_button_press_eventÚon_vm_list_key_press_eventÚ!on_menu_edit_preferences_activateÚon_menu_help_about_activateúvm-listÚchangedg      $@z
conn-addedzconn-removed)Fr   Ú__init__Ú_cleanup_on_app_closeÚconfigÚget_manager_window_sizeÚtopwinÚset_default_sizeÚprev_positionÚ_window_sizer	   ÚVMActionMenuÚ
current_vmÚVMShutdownMenuÚshutdownmenur   ÚMenuÚconnmenuÚget_accessibleÚset_nameÚconnmenu_itemsÚbuilderÚconnect_signalsÚtoggle_stats_visible_guest_cpuÚtoggle_stats_visible_host_cpuÚ!toggle_stats_visible_memory_usageÚtoggle_stats_visible_diskÚtoggle_stats_visible_networkr'   Úwindow_resizedÚopen_newconnÚnew_vmÚexit_appÚshow_vmÚstart_vmÚpoweroff_vmÚpause_vm_buttonÚ	do_deleteÚ	show_hostÚrow_activatedÚpopup_vm_menu_buttonÚpopup_vm_menu_keyÚshow_preferencesÚ
show_aboutÚdiskcolÚnetcolÚmemcolÚguestcpucolÚ
hostcpucolÚ
spacer_txtÚinit_vmlistÚ
init_statsÚinit_toolbarÚinit_context_menusÚupdate_current_selectionr   Úget_selectionÚconnectÚmax_disk_rateÚmax_net_rateÚ_config_polling_change_cbÚCOL_GUEST_CPUÚCOL_DISKÚCOL_NETWORKÚCOL_MEMr   r:   Ú_conn_addedÚ_conn_removedÚconnsÚvalues)Úselfr,   r-   ÚconnmanagerÚconnr   r   r   rV   Y   s¬   
þüúø	öôóòñðïîíìëêé
ß&ÿ



ÿzvmmManager.__init__c                 C   sN   |   ¡ }| j ¡  |rd S t d¡ | jr| jj| jŽ  d | _t ¡  	¡  d S )NzShowing manager)
Ú
is_visiblerZ   Úpresentr   Údebugr\   Úmover   r:   Úincrement_window_counter)r•   Úvisr   r   r   Úshow³   s   

zvmmManager.showNc                 C   s<   |   ¡ sd S t d¡ | j ¡ | _| j ¡  t ¡  	¡  dS )NzClosing managerr   )
r˜   r   rš   rZ   Úget_positionr\   Úhider   r:   Údecrement_window_counter©r•   Ú
src_ignoreÚsrc2_ignorer   r   r   r'   À   s   

zvmmManager.closec                 C   sp   d | _ d | _d | _d | _d | _| j ¡  d | _| j ¡  d | _| j ¡  d | _d | _	| j
r6| jj| j
Ž  d S d S r   )r}   r€   r   r   r~   ra   Údestroyr	   rc   rf   r]   rX   Úset_manager_window_size©r•   r   r   r   Ú_cleanupÌ   s   


ÿzvmmManager._cleanupc                 C   s$   |   d¡ d¡ |   d¡ |¡ d S )Núvm-notebookr   zstartup-error-label)r   Úset_current_pageÚset_text)r•   Úmsgr   r   r   Úset_startup_errorÞ   s   zvmmManager.set_startup_errorc                 C   sè   |   | j | j¡¡ |   | j | j¡¡ |   | j | j¡¡ |   | j | j	¡¡ |   | j 
| j¡¡ |   | j | jt¡¡ |   | j | jt¡¡ |   | j | jt¡¡ |   | j | jt¡¡ |  ¡  |  ¡  |  ¡  |  	¡  |  ¡  d S r   )Úadd_gsettings_handlerX   Ú)on_vmlist_guest_cpu_usage_visible_changedÚ%toggle_guest_cpu_usage_visible_widgetÚ(on_vmlist_host_cpu_usage_visible_changedÚ$toggle_host_cpu_usage_visible_widgetÚ&on_vmlist_memory_usage_visible_changedÚ"toggle_memory_usage_visible_widgetÚ!on_vmlist_disk_io_visible_changedÚtoggle_disk_io_visible_widgetÚ)on_vmlist_network_traffic_visible_changedÚ%toggle_network_traffic_visible_widgetÚ on_stats_enable_cpu_poll_changedrŒ   r   Ú!on_stats_enable_disk_poll_changedrŽ   Ú on_stats_enable_net_poll_changedr   Ú#on_stats_enable_memory_poll_changedr   r§   r   r   r   r„   ç   sd   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzvmmManager.init_statsc                 C   sx   |   d¡ d¡ |   d¡ d¡ |   d¡ d¡ |   d¡ | j¡ |   d¡}| dtjj¡ | ¡ D ]}| 	d	¡ q2d S )
Nzvm-newÚvm_newúvm-openÚicon_consoleúvm-shutdownzsystem-shutdownz
vm-toolbarz	icon-sizeF)
r   Úset_icon_nameÚset_menura   Úset_propertyr   ÚIconSizeÚLARGE_TOOLBARÚget_childrenÚset_homogeneous)r•   ÚtoolÚcr   r   r   r…     s   
ÿzvmmManager.init_toolbarc                    s”   ‡ fdd„}|dt dƒˆ jƒ |dt dƒˆ jƒ |dt dƒˆ jƒ ˆ j t ¡ ¡ |d	t d
ƒˆ jƒ ˆ j t ¡ ¡ |dt dƒˆ j	ƒ ˆ j 
¡  d S )Nc                    sH   t j |¡}|r| d|¡ | ¡  d|  ¡ ˆ j |¡ |ˆ j| < d S )NÚactivatezconn-%s)	r   ÚMenuItemÚnew_with_mnemonicr‰   rd   re   rc   Úaddrf   )ÚidxÚtextÚcbÚitemr§   r   r   Úadd_to_menu  s   z2vmmManager.init_context_menus.<locals>.add_to_menuÚcreateÚ_Newr‰   Ú_ConnectÚ
disconnectÚDis_connectÚdeleteÚDe_leteÚdetailsÚ_Details)r5   rp   Ú	open_connÚ
close_connrc   rÍ   r   ÚSeparatorMenuItemrv   rw   Úshow_all)r•   rÒ   r   r§   r   r†     s   	zvmmManager.init_context_menusc                    s¾  |   d¡‰ |   d¡ d¡ g }| tt¡ | tt¡ | tt¡ | tt¡ | t	t¡ | t
t¡ | tt¡ | tt¡ | tt¡ | tt¡ | ttj¡ tj|Ž }ˆ  |¡ ˆ  t	¡ ˆ  d¡ ˆ  tˆ dƒd  ¡ t tdƒ¡}| d¡ | tjj¡ |  d¡ | !t"¡ ˆ  #|¡ t $¡ }| %d	tj&j'¡ | (|d¡ | )|d
t¡ | )|dt¡ t $¡ }| (|d¡ | )|dt¡ | )|dt¡ t *¡ }| (|d¡ | )|dt¡ | )|dt¡ t *¡ | _+| j+ %dd¡ | j+ %dd¡ | ,| j+d¡ ‡ fdd„}|tdƒt-ƒ| _.|tdƒt/ƒ| _0|tdƒt1ƒ| _2|tdƒt3ƒ| _4|tdƒt5ƒ| _6| 7t"| j8¡ | 7t-| j9¡ | 7t/| j:¡ | 7t1| j;¡ | 7t3| j<¡ | 7t5| j=¡ | !t"tj>j?¡ d S )NrT   r©   FTzexpander-sizeé   ÚNamer   z
stock-sizez	icon-nameÚvisibleÚpixbufÚmarkupÚ
foregroundÚypadé   c                    sž   t  | ¡}| d¡ t  ¡ }| dd¡ | |d¡ | |dt¡ tƒ }| dd¡ | dd¡ | d	d¡ | |d¡ | |dt	¡ | 
|¡ ˆ  |¡ |S )
NéŒ   ræ   rç   Trâ   Úxpadr   é   Úreversed)r   ÚTreeViewColumnÚset_min_widthÚCellRendererTextrÃ   Ú
pack_startÚadd_attributeÚROW_IS_CONNr   Ú	ROW_IS_VMÚset_sort_column_idÚappend_column)ÚtitleÚcolnumÚcolÚtxtÚimg©Úvmlistr   r   Úmake_stats_columnc  s   



z1vmmManager.init_vmlist.<locals>.make_stats_columnz	CPU usagezHost CPU usagezMemory usagezDisk I/OzNetwork I/O)@r   Úset_show_tabsÚinsertÚ
ROW_HANDLEÚobjectÚROW_SORT_KEYr6   Ú
ROW_MARKUPÚROW_STATUS_ICONÚROW_HINTrñ   ÚboolÚROW_IS_CONN_CONNECTEDrò   ÚROW_IS_VM_RUNNINGÚ	ROW_COLORÚROW_INSPECTION_OS_ICONr   ÚPixbufr   Ú	TreeStoreÚ	set_modelÚset_tooltip_columnÚset_headers_visibleÚset_level_indentationr   rì   r5   Ú
set_expandÚ
set_sizingÚTreeViewColumnSizingÚAUTOSIZEÚset_spacingró   ÚCOL_NAMErô   ÚCellRendererPixbufrÃ   rÄ   ÚDNDrï   rð   rî   r‚   Úpack_endr   r€   ÚCOL_HOST_CPUr   r   r   rŽ   r}   r   r~   Úset_sort_funcÚvmlist_name_sorterÚvmlist_guest_cpu_usage_sorterÚvmlist_host_cpu_usage_sorterÚvmlist_memory_usage_sorterÚvmlist_disk_io_sorterÚvmlist_network_usage_sorterÚSortTypeÚ	ASCENDING)r•   ÚrowtypesÚmodelÚnameColÚstatus_iconÚinspection_os_iconÚname_txtrü   r   rú   r   rƒ   -  sv   




ÿ



ÿ
zvmmManager.init_vmlistc                 C   s   |   d¡ ¡ S ©NrT   )r   Ú	get_modelr§   r   r   r   r$  Š  s   zvmmManager.modelc                 C   s   t  |  d¡¡S r)  )r
   Úget_list_selected_rowr   r§   r   r   r   Úcurrent_rowŽ  r!   zvmmManager.current_rowc                 C   s    |   ¡ }|r
|t rd S |t S r   )r,  rñ   rÿ   )r•   Úrowr   r   r   r_   ‘  s   zvmmManager.current_vmc                 C   s*   |   ¡ }|sd S |t }|t r|S |jS r   )r,  rÿ   rñ   r—   )r•   r-  Úhandler   r   r   Úcurrent_conn˜  s   zvmmManager.current_connc                    s.   ‡ fdd„‰ t | jƒsd S ˆ | j| j ¡ |ƒS )Nc                    sX   |r*| | }|t  |kr|S |  |¡r!ˆ | |  |d¡|ƒ}|r!|S |  |¡}|sd S d S )Nr   )rÿ   Úiter_has_childÚiter_nth_childÚ	iter_next)r$  ÚrowiterÚobjr-  Úret©Ú_walkr   r   r7  ¢  s   

øz!vmmManager.get_row.<locals>._walk)Úlenr$  Úget_iter_first)r•   Ú
conn_or_vmr   r6  r   Úget_row¡  s   
zvmmManager.get_rowc                 C   s   |   ¡ sd S | j ¡ | _d S r   )r˜   rZ   Úget_sizer]   )r•   ÚignoreÚignore2r   r   r   rn   ¶  s   zvmmManager.window_resizedc                 C   s   t  ¡  ¡  d S r   )r   r:   rq   r¢   r   r   r   rq   »  r!   zvmmManager.exit_appc                 C   s"   ddl m} | | ¡ | j¡ d S )Nr   )ÚvmmCreateConn)Ú
createconnr?  r:   rž   rZ   )r•   Ú_srcr?  r   r   r   ro   ¾  s   zvmmManager.open_newconnc                 C   s0   ddl m} |  ¡ }| | |r| ¡ pd ¡ d S )Nr   )ÚvmmCreateVM)ÚcreatevmrB  r/  Úshow_instanceÚget_uri)r•   rA  rB  r—   r   r   r   rp   Â  s   zvmmManager.new_vmc                 C   ó   ddl m} | | ¡ d S )Nr   )ÚvmmAbout)ÚaboutrG  rD  )r•   rA  rG  r   r   r   r|   Ç  ó   zvmmManager.show_aboutc                 C   rF  )Nr   )ÚvmmPreferences)ÚpreferencesrJ  rD  )r•   r£   rJ  r   r   r   r{   Ë  rI  zvmmManager.show_preferencesc                 C   s$   ddl m} |  ¡ }| | |¡ d S )Nr   )ÚvmmHost)ÚhostrL  r/  rD  )r•   rA  rL  r—   r   r   r   rw   Ï  s   zvmmManager.show_hostc                 C   ó   t j | |  ¡ ¡ d S r   )r	   Ú
VMActionUIrž   r_   ©r•   rA  r   r   r   rr   Ô  ó   zvmmManager.show_vmc                 G   sT   |}|   ¡ }|  ¡ }|d u rd S |r|  |¡ d S | ¡ r#|  ¡  d S |  |¡ d S r   )r/  r_   rr   Úis_disconnectedrÜ   rw   )r•   rA  Úargsr=  r—   r+   r   r   r   rx   ×  s   zvmmManager.row_activatedc                 C   s8   |   ¡ }|  ¡ }|d u r|  |¡ d S tj | |¡ d S r   )r/  r_   Ú_do_delete_connr	   rO  rØ   )r•   r=  r—   r+   r   r   r   rv   å  s
   zvmmManager.do_deletec                 C   s6   | j  tdƒ| ¡  ¡}|sd S t ¡  | ¡ ¡ d S )Nz3This will remove the connection:

%s

Are you sure?)r3   Úyes_nor5   rE  r   r:   Úremove_conn)r•   r—   Úresultr   r   r   rT  í  s   ÿzvmmManager._do_delete_connc              	   C   sB   |   d¡}z| | j¡ | |¡ W | | j¡ d S | | j¡ w )Núvm-pause)r   Úhandler_block_by_funcru   Ú
set_activeÚhandler_unblock_by_func)r•   ÚstateÚsrcr   r   r   Úset_pause_stateõ  s
   
zvmmManager.set_pause_statec                 C   sD   |  ¡ }|  | ¡ |rtj | |  ¡ ¡ d S tj | |  ¡ ¡ d S r   )Ú
get_activer^  r	   rO  Úsuspendr_   Úresume)r•   r]  Údo_pauser   r   r   ru   ý  s
   zvmmManager.pause_vm_buttonc                 C   rN  r   )r	   rO  Úrunr_   )r•   r=  r   r   r   rs   	  rQ  zvmmManager.start_vmc                 C   rN  r   )r	   rO  Úshutdownr_   rP  r   r   r   rt     rQ  zvmmManager.poweroff_vmc                 C   s    |   ¡ }| ¡ s| ¡  d S d S r   )r/  rR  r'   ©r•   r=  r—   r   r   r   rÝ     s   ÿzvmmManager.close_connc                 C   s.   |   ¡ }| ¡ r| d| j¡ | ¡  dS d S )Nzopen-completedT)r/  rR  Úconnect_onceÚ_conn_open_completed_cbÚopenre  r   r   r   rÜ     s   ýzvmmManager.open_connc                 C   s&   |r|\}}}| j  |||¡ d S d S r   )r3   r4   )r•   Ú_connÚConnectErrorr¬   rÚ   rõ   r   r   r   rg    s   
þz"vmmManager._conn_open_completed_cbc                 C   sh   |   d |¡}|  |¡}| j |j|¡ | d| j¡ | d| j¡ | d| j¡ |  	d¡ 
|jd¡ d S )Nústate-changedúresources-sampledzinspection-changedrT   F)Ú
_build_rowr;  r$  ÚappendÚiterr‰   Ú
vm_changedÚvm_row_updatedÚvm_inspection_changedr   Ú
expand_rowÚpath)r•   r—   r+   Úvm_rowÚconn_rowr   r   r   Úvm_added$  s   
zvmmManager.vm_addedc                 C   sX   |   |¡j}t| j |¡ƒD ]}| j ||¡}| j| t |kr)| j |¡  d S qd S r   )r;  ro  Úranger$  Úiter_n_childrenr1  rÿ   Úremove)r•   r—   r+   ÚparentÚrowidxr3  r   r   r   Ú
vm_removed0  s   þþzvmmManager.vm_removedc                 C   s(   |  ¡ }| ¡ rtdƒd|  ¡ i }|S )Nz!%(uri)s (Double click to connect)Úuri)rE  rR  r5   )r•   r—   Úhintr   r   r   Ú_build_conn_hint8  s   zvmmManager._build_conn_hintc                 C   sL   t  |¡}|}| ¡ rtdƒd|i }n| ¡ r tdƒd|i }d| }|S )Nz%(connection)s - Not ConnectedÚ
connectionz%(connection)s - Connecting...ú<span size='smaller'>%s</span>)r   Ú
xml_escaperR  r5   Úis_connecting)r•   r—   ÚnamerÏ   rä   r   r   r   Ú_build_conn_markup>  s   
zvmmManager._build_conn_markupc                 C   s   d }|  ¡ r
| jj}|S r   )rR  rX   Úcolor_insensitive)r•   r—   Úcolorr   r   r   Ú_build_conn_colorI  s   zvmmManager._build_conn_colorc                 C   s"   dt  |¡ }d| }|d | S )Nz,<span size='smaller' weight='bold'>%s</span>r‚  Ú
)r   rƒ  )r•   r…  ÚstatusÚdomtextÚ	statetextr   r   r   Ú_build_vm_markupO  s
   ÿzvmmManager._build_vm_markupc                 C   s6  |r!|  ¡ }|  ||¡}d| ¡  }d }|  |¡}|  |¡}d }	n| ¡ }| ¡ }|  ||¡}| ¡ }| 	¡ }d }t
|ddƒ}	g }
|
 t|pG|¡ |
 t|¡ |
 t|¡ |
 t|¡ |
 tt |¡¡ |
 tt|ƒ¡ |
 tt|ƒow| ¡  ¡ |
 tt|ƒ¡ |
 tt|ƒo‹| ¡ ¡ |
 t|¡ |
 t|	¡ |
S )Nr‚  é   )Úget_pretty_descr†  Úget_state_textr€  r‰  Úget_name_or_titleÚ
run_statusrŽ  Úrun_status_icon_nameÚget_descriptionr0   rþ   rÿ   r  r  r  r  r   rƒ  rñ   r  r  rR  rò   r  Ú	is_activer  r	  )r•   r—   r+   r…  rä   r‹  r&  r  rˆ  Úos_iconr-  r   r   r   rm  U  s@   ÿ

ÿzvmmManager._build_rowc                 C   sŽ   |   d¡ d¡ |  |¡rd S |  |d ¡}| j d |¡ | d| j¡ | d| j¡ | d| j	¡ | d| j
¡ | ¡ D ]}|  ||¡ q<d S )Nr©   r   zvm-addedz
vm-removedrl  rk  )r   rª   r;  rm  r$  rn  r‰   rw  r}  Úconn_row_updatedÚconn_state_changedÚlist_vms)r•   rA  r—   rv  r+   r   r   r   r‘   x  s   
ÿzvmmManager._conn_addedc                 C   s@   | j  |j¡}|d ur| j  |¡ | j  |j¡}|d usd S d S r   )r$  Úiter_childrenro  rz  )r•   r-  Úchildr   r   r   Ú_remove_child_rows‰  s
   üzvmmManager._remove_child_rowsc                 C   sX   d }| j D ]}|t r|t  ¡ |kr|} nq|d u rd S |  |¡ | j  |j¡ d S r   )r$  rñ   rÿ   rE  r  rz  ro  )r•   rA  r~  rv  r-  r   r   r   r’   ‘  s   
€
zvmmManager._conn_removedc                 C   s,   |   |¡}|d u rd S | j |j|j¡ d S r   )r;  r$  Úrow_changedrt  ro  )r•   r+   r-  r   r   r   rq  ¢  s   
zvmmManager.vm_row_updatedc              
   C   sÊ   |   |¡}|d u rd S z7||  ¡ kr|  ¡  | ¡ }| ¡ }||t< | ¡ |t< | ¡ |t	< |  
||¡|t< | ¡ }t |¡|t< W n ty] } z|jj |¡rXW Y d }~d S ‚ d }~ww |  |¡ d S r   )r;  r_   r‡   r’  r“  r  r”  r  r–  r  rŽ  r  r•  r   rƒ  r  r)   r—   ÚsupportÚis_libvirt_error_no_domainrq  )r•   r+   r-  r…  r‹  Údescr9   r   r   r   rp  ¨  s*   
€ýzvmmManager.vm_changedc                 C   s8   |   |¡}|d u rd S t|ddƒ}||t< |  |¡ d S )Nr  )r;  r0   r	  rq  )r•   r+   r-  Únew_iconr   r   r   rr  Â  s   
z vmmManager.vm_inspection_changedc                 C   sN   |   d¡ ¡ }| jD ]}|t sq
|t }| ¡ |kr$| |j¡  dS q
dS )zg
        Select the passed URI in the UI. Called from engine.py via
        cli --connect $URI
        rT   N)r   rˆ   r$  rñ   rÿ   rE  Úselect_iterro  )r•   r~  Úselr-  r—   r   r   r   Úset_initial_selectionÌ  s   
þûz vmmManager.set_initial_selectionc                 C   s|   |   |¡}| ¡ |t< |  ||t ¡|t< | ¡  |t< |  |¡|t< |  	|¡|t
< | ¡ s3|  |¡ |  |¡ |  ¡  d S r   )r;  r  r  r†  r  rR  r  r‰  r  r€  r  r–  r  r˜  r‡   ©r•   r—   r-  r   r   r   r™  Û  s   


zvmmManager.conn_state_changedc                 C   sD   |   |¡}t| j| ¡ ƒ| _t| j| ¡ ƒ| _| j |j|j	¡ d S r   )
r;  ÚmaxrŠ   Údisk_io_max_rater‹   Únetwork_traffic_max_rater$  rž  rt  ro  r¦  r   r   r   r˜  é  s   
ÿzvmmManager.conn_row_updatedc                 C   sB   |rt dƒ}nt dƒ}| dd¡}| j |¡ |  d¡ |¡ d S )NÚ_RestoreÚ_Runr5   Ú úvm-run)r5   Úreplacer	   Úchange_run_textr   Ú	set_label)r•   Úcan_restorerÏ   Ú
strip_textr   r   r   r¯  ò  s   
zvmmManager.change_run_textc                 C   s^  |   ¡ }|  ¡ }t|ƒ}t|ƒ}t|p|ƒ}t|p|ƒ}t|o"| ¡ ƒ}t|o*| ¡ ƒ}	|	r7t|o4| ¡ ƒ}
nt|o=| ¡ ƒ}
t|oE| ¡ ƒ}|rS|jrS|  	| 
¡ ¡ |  d¡ |¡ |  d¡ |¡ |  d¡ |¡ |  d¡ ¡  |¡ |  |	¡ |  d¡ |
¡ |	r‰tdƒ}ntdƒ}|  d¡ |¡ |  d¡ |¡ |  d¡ |¡ |  d	¡ |¡ d S )
Nr¾   r­  rÀ   rX  zResume the virtual machinezPause the virtual machineÚmenu_edit_deleteÚmenu_edit_detailsÚmenu_host_details)r_   r/  r  Ú
is_runableÚ	is_pausedÚis_unpauseableÚis_pauseableÚis_stoppableÚmanagedsave_supportedr¯  Úhas_managed_saver   Úset_sensitiveÚget_menuÚupdate_widget_statesr^  r5   Úset_tooltip_text)r•   r=  r+   r—   Ú	show_openÚshow_detailsÚhost_detailsÚ
can_deleteÚshow_runr·  Ú
show_pauseÚshow_shutdownÚpauseTooltipr   r   r   r‡   ü  s6   


z#vmmManager.update_current_selectionc                 C   s<   t  |j¡dkr
dS |  d¡ ¡  ¡ \}}|  |||¡ dS )Nrb   FrT   T)r   Úkeyval_nameÚkeyvalr   rˆ   Úget_selectedÚpopup_vm_menu)r•   Úwidget_ignoreÚeventr$  Útreeiterr   r   r   rz   "  s
   zvmmManager.popup_vm_menu_keyc                 C   sV   |j dkrdS | t|jƒt|jƒ¡}|d u rdS |d }|  | j| j |¡|¡ dS )Nrà   Fr   )ÚbuttonÚget_path_at_posÚintÚxÚyrÌ  r$  Úget_iter)r•   rû   rÎ  Útuprt  r   r   r   ry   *  s   
zvmmManager.popup_vm_menu_buttonc                 C   sª   |  |¡d ur|| t }| j |¡ | j |¡ d S || t }| ¡ }| ¡ }| jd  | ¡ | jd  |p:| ¡ | jd  |¡ | jd  |¡ | j	 |¡ d S )NrÓ   rÖ   r‰   rØ   )
Úiter_parentrÿ   r	   r¿  Úpopup_at_pointerrR  r„  rf   r½  rc   )r•   r$  Ú_iterrÎ  r+   r—   ÚdisconnÚconningr   r   r   rÌ  6  s   ÿzvmmManager.popup_vm_menuc                 C   s2   t || t ƒ ¡ }t || t ƒ ¡ }t||ƒS r   )r6   r  Úlowerr    )r•   r$  Úiter1Úiter2r=  Úkey1Úkey2r   r   r   r  O  s   
zvmmManager.vmlist_name_sorterc                 C   ó*   || t  }|| t  }t| ¡ | ¡ ƒS r   )rÿ   r    Úguest_cpu_time_percentage©r•   r$  rÝ  rÞ  r=  Úobj1Úobj2r   r   r   r  T  ó
   ÿz(vmmManager.vmlist_guest_cpu_usage_sorterc                 C   rá  r   )rÿ   r    Úhost_cpu_time_percentagerã  r   r   r   r  [  ræ  z'vmmManager.vmlist_host_cpu_usage_sorterc                 C   rá  r   )rÿ   r    Ústats_memoryrã  r   r   r   r  b  ræ  z%vmmManager.vmlist_memory_usage_sorterc                 C   rá  r   )rÿ   r    Údisk_io_raterã  r   r   r   r  i  ó   z vmmManager.vmlist_disk_io_sorterc                 C   rá  r   )rÿ   r    Únetwork_traffic_raterã  r   r   r   r   o  rê  z&vmmManager.vmlist_network_usage_sorterc                 C   s¸   |t krddg}| j ¡ }|tkrd}| j ¡ }n|tkr%d}| j ¡ }n|tkr0d}| j ¡ }t	 
|¡D ]$}|  |¡}d}|rF| d¡ n| d¡ | d¡ td	ƒ}| |¡ q5d S )
NÚmenu_view_stats_guest_cpuÚmenu_view_stats_host_cpuÚmenu_view_stats_diskÚmenu_view_stats_networkÚmenu_view_stats_memoryr¬  TFzDisabled in preferences dialog.)r   rX   Úget_stats_enable_cpu_pollrŽ   Úget_stats_enable_disk_pollr   Úget_stats_enable_net_pollr   Úget_stats_enable_memory_pollr   Úlistifyr   r½  rZ  r5   rÀ  )r•   ÚcolumnÚwidgnÚ	do_enabler,   r   Ú	tool_textr   r   r   rŒ   u  s,   




öz$vmmManager._config_polling_change_cbc                 C   sŽ   d}|  ¡ D ]	}t|tƒr|}q|r|pd }| ||d ¡ | |¡ |  |¡ |¡ tdd„ | j| j	| j
| j| jfD ƒƒ}| j d| ¡ d S )Néÿÿÿÿc                 S   s   g | ]}|  ¡ ‘qS r   )Úget_visible)Ú.0rÉ   r   r   r   Ú
<listcomp>›  s    z3vmmManager._toggle_graph_helper.<locals>.<listcomp>râ   )Ú	get_cellsÚ
isinstancer   Úset_cell_data_funcÚset_visibler   rZ  Úanyr~   r}   r   r€   r   r‚   rÃ   )r•   Údo_showr÷   ÚdatafuncÚmenurù   rœ  Úany_visibler   r   r   Ú_toggle_graph_helper  s   
€
ÿÿzvmmManager._toggle_graph_helperc                 C   ó   |   | j ¡ | j| jd¡ d S )Nrï  )r  rX   Ú!is_vmlist_network_traffic_visibler~   Únetwork_traffic_imgr§   r   r   r   r¸      ó   þz0vmmManager.toggle_network_traffic_visible_widgetc                 C   r  )Nrî  )r  rX   Úis_vmlist_disk_io_visibler}   Údisk_io_imgr§   r   r   r   r¶   ¤  r  z(vmmManager.toggle_disk_io_visible_widgetc                 C   r  )Nrð  )r  rX   Úis_vmlist_memory_usage_visibler   Úmemory_usage_imgr§   r   r   r   r´   ¨  r  z-vmmManager.toggle_memory_usage_visible_widgetc                 C   r  )Nrì  )r  rX   Ú!is_vmlist_guest_cpu_usage_visibler€   Úguest_cpu_usage_imgr§   r   r   r   r°   ¬  r  z0vmmManager.toggle_guest_cpu_usage_visible_widgetc                 C   r  )Nrí  )r  rX   Ú is_vmlist_host_cpu_usage_visibler   Úhost_cpu_usage_imgr§   r   r   r   r²   °  r  z/vmmManager.toggle_host_cpu_usage_visible_widgetc              
   C   sD   |  ¡ }t| jjt| jjt| jjt| jj	t
| jji}|| |ƒ d S r   )r_  r   rX   Ú"set_vmlist_guest_cpu_usage_visibler  Ú!set_vmlist_host_cpu_usage_visibler   Úset_vmlist_memory_usage_visiblerŽ   Úset_vmlist_disk_io_visibler   Ú"set_vmlist_network_traffic_visible)r•   r]  Ústats_idrâ   Ú	set_statsr   r   r   Útoggle_stats_visibleµ  s   ûzvmmManager.toggle_stats_visiblec                 C   ó   |   |t¡ d S r   )r  r   ©r•   r]  r   r   r   ri   À  r!   z)vmmManager.toggle_stats_visible_guest_cpuc                 C   r  r   )r  r  r  r   r   r   rj   Â  r!   z(vmmManager.toggle_stats_visible_host_cpuc                 C   r  r   )r  r   r  r   r   r   rk   Ä  r!   z,vmmManager.toggle_stats_visible_memory_usagec                 C   r  r   )r  rŽ   r  r   r   r   rl   Æ  r!   z$vmmManager.toggle_stats_visible_diskc                 C   r  r   )r  r   r  r   r   r   rm   È  r!   z'vmmManager.toggle_stats_visible_networkc                 C   ó<   || t  }|d u st|dƒsd S | t¡}| d|¡ d S ©Nr—   Ú
data_array)rÿ   ÚhasattrÚguest_cpu_time_vectorÚ	GRAPH_LENrÃ   ©r•   Úcolumn_ignoreÚcellr$  rÙ  Údatar4  r   r   r   r  Ë  ó
   
zvmmManager.guest_cpu_usage_imgc                 C   r  r  )rÿ   r!  Úhost_cpu_time_vectorr#  rÃ   r$  r   r   r   r  Ó  r(  zvmmManager.host_cpu_usage_imgc                 C   r  r  )rÿ   r!  Ústats_memory_vectorr#  rÃ   r$  r   r   r   r  Û  r(  zvmmManager.memory_usage_imgc           	      C   óX   || t  }|d u st|dƒsd S | t| j¡\}}dd„ t||ƒD ƒ}| d|¡ d S )Nr—   c                 S   ó   g | ]
\}}|| d  ‘qS ©é   r   ©rü  rÓ  rÔ  r   r   r   rý  é  ó    z*vmmManager.disk_io_img.<locals>.<listcomp>r   )rÿ   r!  Údisk_io_vectorsr#  rŠ   ÚziprÃ   ©	r•   r%  r&  r$  rÙ  r'  r4  Úd1Úd2r   r   r   r  ã  ó   zvmmManager.disk_io_imgc           	      C   r+  )Nr—   c                 S   r,  r-  r   r/  r   r   r   rý  ò  r0  z2vmmManager.network_traffic_img.<locals>.<listcomp>r   )rÿ   r!  Únetwork_traffic_vectorsr#  r‹   r2  rÃ   r3  r   r   r   r
  ì  r6  zvmmManager.network_traffic_img)NNr   )SÚ__name__Ú
__module__Ú__qualname__Úclassmethodr:   rV   rž   r'   r¨   r­   r„   r…   r†   rƒ   Úpropertyr$  r,  r_   r/  r;  rn   rq   ro   rp   r|   r{   rw   rr   rx   rv   rT  r^  ru   rs   rt   rÝ   rÜ   rg  rw  r}  r€  r†  r‰  rŽ  rm  r‘   r  r’   rq  rp  rr  r¥  r™  r˜  r¯  r‡   rz   ry   rÌ  r  r  r  r  r  r   rŒ   r  r¸   r¶   r´   r°   r²   r  ri   rj   rk   rl   rm   r  r  r  r  r
  r   r   r   r   r1   L   s¢    
Z
	']
	



#
	

&	r1   N)+Úgi.repositoryr   r   r   r   Úvirtinstr   r   r¬  r	   Úlibr
   Ú	baseclassr   r–   r   Úenginer   Úlib.graphwidgetsr   r#  rx  rÿ   r  r  r  r  rñ   r  rò   r  r  r	  r  r   r  r   rŽ   r   r   r    r0   r1   r   r   r   r   Ú<module>   sH   öû