o
    ïì¿`  ã                   @   s˜   d dl Z d dlmZ ze  dd¡ e d¡ W n ey+   e  dd¡ e d¡ Y nw d dlmZ d	d
lm	Z	 d	dl
mZ d Zd	ZG dd„ deƒZdS )é    N)ÚlogÚ	GtkSourceÚ4zUsing GtkSource 4z3.0zUsing GtkSource 3.0)r   é   )Úuiutil)ÚvmmGObjectUIc                       sÈ   e Zd Zejdg fejdg fejdg fdœ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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 )'ÚvmmXMLEditorN)Úchangedúxml-requestedú	xml-resetc                    s|   t ƒ jdd ||d | |¡ | |  d¡¡ |  d¡ |¡ t| _d| _d | _d | _	|  
¡  d| _|  | j | j¡¡ d S )Nzxmleditor.ui)ÚbuilderÚtopwinúxml-notebookzxml-details-boxÚ F)ÚsuperÚ__init__ÚremoveÚaddÚwidgetÚ_PAGE_DETAILSÚ_curpageÚ_srcxmlÚ_srcviewÚ_srcbuffÚ_init_uiÚdetails_changedÚadd_gsettings_handleÚconfigÚon_xmleditor_enabled_changedÚ_xmleditor_enabled_changed_cb)Úselfr   r   Úparent_containerÚdetails_widget©Ú	__class__© ú0/usr/share/virt-manager/virtManager/xmleditor.pyr       s"   
ÿ
ÿÿzvmmXMLEditor.__init__c                 C   s   | j  ¡  d | _d S ©N)r   Údestroyr   ©r    r%   r%   r&   Ú_cleanup5   s   

zvmmXMLEditor._cleanupc                 C   s.   | j  ¡ }| j |¡ t |  d¡| ¡ d S )Nzxml-warning-box)r   Úget_xmleditor_enabledr   Úset_editabler   Úset_grid_row_visibler   )r    Úenabledr%   r%   r&   Ú"_set_xmleditor_enabled_from_config>   s
   
ÿz/vmmXMLEditor._set_xmleditor_enabled_from_configc                 C   sÆ   t  ¡ | _| j ¡ | _t j ¡  d¡}| j |¡ | j 	d¡ | j 
d¡ | j ¡  d¡ | j d¡ | j d| j¡ |  d¡ d| j¡ |  d¡ d| j¡ | j ¡  |  d¡ | j¡ |  ¡  d S )	NÚxmlTz
XML editorr	   r   zswitch-pageznotify::pagez
xml-scroll)r   ÚViewr   Ú
get_bufferr   ÚLanguageManagerÚget_defaultÚget_languageÚset_languageÚset_monospaceÚset_auto_indentÚget_accessibleÚset_nameÚset_highlight_syntaxÚconnectÚ_buffer_changed_cbr   Ú_before_page_changed_cbÚ_after_page_changed_cbÚshow_allr   r/   )r    Úlangr%   r%   r&   r   D   s$   
ÿÿ
zvmmXMLEditor._init_uic                 C   s   || _ |  d¡ |¡ d S )Nr   )r   r   Úset_current_page)r    Úpagenumr%   r%   r&   Ú_reselect_page`   s   zvmmXMLEditor._reselect_pagec                 C   s   |   d¡ |  d¡ d S )Nr   r   )Úset_xmlÚemitr)   r%   r%   r&   Ú
_reset_xmle   s   
zvmmXMLEditor._reset_xmlc                 C   s"   | j  ¡ }| ¡  | j  |¡ d S r'   )r   Úget_start_iterÚforward_lineÚplace_cursor)r    Ú	startiterr%   r%   r&   Ú_reset_cursori   s   
zvmmXMLEditor._reset_cursorc                 C   s0   | j sdS | j tdƒtdƒ¡}|rd| _ | S )NFúThere are unapplied changes.zGYour changes will be lost if you leave this tab. Really leave this tab?)r   ÚerrÚyes_noÚ_©r    Úretr%   r%   r&   Ú_detials_unapplied_changesq   s   þz'vmmXMLEditor._detials_unapplied_changesc                 C   s.   | j |  ¡ kr	dS | j tdƒtdƒ¡}| S )NFrM   zKYour XML changes will be lost if you leave this tab. Really leave this tab?)r   Úget_xmlrN   rO   rP   rQ   r%   r%   r&   Ú_xml_unapplied_changes~   s   þz#vmmXMLEditor._xml_unapplied_changesc                 C   s   |   ¡  |  d¡ t¡S )zk
        Clear XML and select the details page. Used when callers do
        their own reset_state
        r   )rG   r   rB   r   r)   r%   r%   r&   Úreset_state   s   zvmmXMLEditor.reset_statec                 C   s   | j  d¡S )z3
        Return the XML from the editor UI
        Útext)r   Úget_propertyr)   r%   r%   r&   rT   ˜   s   zvmmXMLEditor.get_xmlc              
   C   sX   z"| j  | j¡ |pd| _| j  | j¡ |  ¡  W | j  d| j¡ dS | j  d| j¡ w )z<
        Set the editor UI XML to the passed string
        r   r	   N)r   Údisconnect_by_funcr=   r   Úset_textrL   r<   )r    r0   r%   r%   r&   rE   ž   s   

&zvmmXMLEditor.set_xmlc                 C   s*   |   ¡ sdS d}|r| ¡ }|  |¡ dS )zÓ
        Set the editor UI XML to the inactive XML from the passed
        vmmLibvirtObject. If the XML UI isn't visible, we don't set
        anything, which lets callers use this on every page refresh
        Nr   )Úis_xml_selectedÚget_xml_to_definerE   )r    Úlibvirtobjectr0   r%   r%   r&   Úset_xml_from_libvirtobjectª   s   z'vmmXMLEditor.set_xml_from_libvirtobjectc                 C   s
   | j tkS )z9
        Return True if the XML page is selected
        )r   Ú	_PAGE_XMLr)   r%   r%   r&   r[   ·   s   
zvmmXMLEditor.is_xml_selectedc                 C   s   |   d¡ d S )Nr	   )rF   )r    Úbufr%   r%   r&   r=   Â   ó   zvmmXMLEditor._buffer_changed_cbc                 C   s`   | j |krd S | j }|| _ |tkr|  ¡ s|  d¡ d S n
|  ¡ s'|  ¡  d S |  | j|¡ d S )Nr
   )r   r_   rS   rF   rU   rG   Úidle_addrD   )r    Únotebookr   rC   Úprevpager%   r%   r&   r>   Å   s   

úz$vmmXMLEditor._before_page_changed_cbc                 C   s   |  ¡ | _d S r'   )Úget_current_pager   )r    rc   Úgparamr%   r%   r&   r?   Ý   ra   z#vmmXMLEditor._after_page_changed_cbc                 C   s   |   ¡  d S r'   )r/   r)   r%   r%   r&   r   à   s   z*vmmXMLEditor._xmleditor_enabled_changed_cb)Ú__name__Ú
__module__Ú__qualname__r   Ú	RUN_FIRSTÚ__gsignals__r   r*   r/   r   rD   rG   rL   rS   rU   rV   rT   rE   r^   r[   r=   r>   r?   r   Ú__classcell__r%   r%   r#   r&   r      s.    


ý	r   )ÚgiÚvirtinstr   Úrequire_versionÚdebugÚ
ValueErrorÚgi.repositoryr   Úlibr   Ú	baseclassr   r   r_   r   r%   r%   r%   r&   Ú<module>   s   þ