a
    a-                     @   s  d Z ddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZ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&m'Z' ddl(m)Z) edZ*dZ+G dd deeZ,G dd de)Z-dS )zY
Namespace browser widget.

This is the main widget used in the Variable Explorer plugin
    N)getopenfilenamesgetsavefilename)QtSignalSlot)QCursor)QApplicationQHBoxLayoutQInputDialogQMessageBoxQVBoxLayoutQWidget)iofunctions)fix_reference_name)REMOTE_SETTINGS)get_translation)SpyderWidgetMixin) RemoteCollectionsEditorTableView)ImportWizard)encoding)getcwd_or_homeremove_backslashes)FinderLineEditZspyderu.   [^\w+*=¡!¿?'\"#$%&()/<>\-\[\]{}^`´;,|¬]*\wc                       s   e Zd ZdZdZe Ze Ze Ze 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eedddZdd ZdddZ  ZS ) NamespaceBrowserz?
    Namespace browser (global variables explorer widget).
    Zvariable_explorerc                    s8   t  j||d d | _d | _d| _d| _d | _d | _d S )N)parentZclass_parent F)super__init__filenametext_finder	last_findfinder_is_visibleeditorshellwidget)selfr   	__class__ Wlib/python3.9/site-packages/spyder/plugins/variableexplorer/widgets/namespacebrowser.pyr   9   s    zNamespaceBrowser.__init__c                 C   s   | j dusJ | jdur,| j   |   nt| d| j dd| _| jj| j | jj| j | jj	| j
 | jj| j t }|dddd || j | | dS )zD
        Setup the namespace browser with provided options.
        NF)datar#   Zcreate_menur   )r#   r"   Zset_namespace_view_settingsrefresh_tabler   Zsig_files_droppedconnectimport_datasig_free_memory_requestedZsig_editor_creation_startedsig_start_spinner_requestedZsig_editor_shownsig_stop_spinner_requestedr   ZsetContentsMarginsZ	addWidgetZ	setLayout)r$   Zlayoutr'   r'   r(   setupF   s0    


zNamespaceBrowser.setupc                 C   s    i }t D ]}| |||< q|S )z Return dict editor view settings)r   get_conf)r$   Zsettingsnamer'   r'   r(   get_view_settingsg   s    z"NamespaceBrowser.get_view_settingsc                 C   s   || _ ||  dS )z.Bind shellwidget instance to namespace browserN)r#   Zset_namespacebrowser)r$   r#   r'   r'   r(   set_shellwidgeto   s    z NamespaceBrowser.set_shellwidgetc                 C   s(   || _ | jr| j | j || j_| jS )z2Bind NamespaceBrowsersFinder to namespace browser.)r   r!   ZsetTextr    r"   finder)r$   r   r'   r'   r(   set_text_findert   s
    z NamespaceBrowser.set_text_finderc                 C   s   |r|r|| _ || _dS )z9Save last finder/search text input and finder visibility.N)r    r!   )r$   r    Zfinder_visibilityr'   r'   r(   save_finder_state}   s    z"NamespaceBrowser.save_finder_statec                 C   s0   | j   z| j  W n ty*   Y n0 dS )zRefresh variable table.N)r#   Zrefresh_namespacebrowserr"   ZresizeRowToContents	TypeErrorr$   r'   r'   r(   r*      s
    
zNamespaceBrowser.refresh_tablec                 C   s   d| j _|dur| | dS )zProcess remote viewFN)r   load_allset_data)r$   Zremote_viewr'   r'   r(   process_remote_view   s    z$NamespaceBrowser.process_remote_viewc                 C   s   |dur|| j _dS )zSet properties of variablesN)r"   Zvar_properties)r$   Z
propertiesr'   r'   r(   set_var_properties   s    z#NamespaceBrowser.set_var_propertiesc                 C   s*   || j j kr&| j | | j   dS )z	Set data.N)r"   source_modelget_datar;   Zadjust_columns)r$   r)   r'   r'   r(   r;      s    zNamespaceBrowser.set_dataNc                 C   s0  t d}|du rL| jdu r"t }nt| j}t| ||tj\}}|s\dS nt|t	r\|g}|D ]}t	|| _t
jdkrt| j| _t| jd  }|tjvr tjtjB }t| |t d| |}|tjkr dS ttj }	t| |t d|	dd\}
}|rtjt	|
 }n dS tj| }t|t	rd}zXt| j\}}t| j}t| ||t|d	}| r| \}}| j !|| W n. t"y } zt	|}W Y d}~n
d}~0 0 n8t#$t%t&j' t#(  | j)*| j|}t#+  t#(  |dur"t,| |t d
| j|f  | -  q`dS )zImport data from text file.zImport dataNnt   zt<b>Unsupported file extension '%s'</b><br><br>Would you like to import it anyway (by selecting a known file format)?zOpen file as:r   F)titleZvarnamez><b>Unable to load '%s'</b><br><br>The error message was:<br>%s)._r   r   ospdirnamer   r   Zload_filters
isinstancestrosr2   r   splitextlowerZ
load_funcsr   ZYesZCancelZquestionlistZload_extensionskeysr
   ZgetItemr   readbasenamer   r   Zexec_r?   r"   Z	new_value	Exceptionr   setOverrideCursorr   r   
WaitCursorprocessEventsr#   Z	load_datarestoreOverrideCursorcriticalr*   )r$   	filenamesrB   Zbasedir
_selfilterr   ZextZbuttonsZanswerZformatsitemokZ	load_funcerror_messagetextZ	_encodingZ	base_namer"   Zvar_nameZ	clip_dataerrorr'   r'   r(   r,      sz    







 
zNamespaceBrowser.import_datac                 C   s*   | j ddd}| jj|dd d| j_d S )NZipython_consoleZshow_reset_namespace_warning)ZsectionZoptionT)warningmessage)r1   r#   reset_namespacer"   Zautomatic_column_width)r$   r\   r'   r'   r(   r^      s    z NamespaceBrowser.reset_namespacec                 C   s   |du rD| j }|du rt }t| td |tj\}}|r@|| _ ndS ttt	j
 t  | j| j }t  t  |durd|v rtddj|dd d }ntd	| }t| td | dS )
z	Save dataNFz Some objects could not be saved:z'<b>Some objects could not be saved:</b>z<br><br><code>{obj_list}</code>z: rA   )Zobj_listzI<b>Unable to save current workspace</b><br><br>The error message was:<br>)r   r   r   rC   r   Zsave_filtersr   rP   r   r   rQ   rR   r#   Zsave_namespacerS   formatsplitr   rT   )r$   r   rV   rY   Zsave_data_messager'   r'   r(   	save_data   s<    
zNamespaceBrowser.save_data)N)N)__name__
__module____qualname____doc__ZCONF_SECTIONr   r-   r.   r/   sig_hide_finder_requestedr   r0   r3   r4   r6   r7   r*   r<   r=   r;   r   rK   r,   r^   ra   __classcell__r'   r'   r%   r(   r   ,   s(   !		Fr   c                       s6   e Zd ZdZdZd
ddZdd Z fdd	Z  ZS )NamespacesBrowserFinderz4Textbox for filtering listed variables in the table.FNc                 C   sB   || _ || _z| j  W n ty,   Y n0 |r>| j| d S )N)_parentmainZtextChangedZ
disconnectr8   r+   )r$   r   callbackrj   r'   r'   r(   update_parent  s    z%NamespacesBrowserFinder.update_parentc                 C   s"   | j s| j jj   d| _ dS )z,Load all variables to correctly filter them.TN)r:   ri   r   r"   r>   r9   r'   r'   r(   load_all_variables!  s    z*NamespacesBrowserFinder.load_all_variablesc                    s   |  }|tjfv r(|   | j  nd|tjfv rH|   | j  nD|tjfv rb| j	j
  n*|tjtjfv rtn|   tt| | dS )zQt and FilterLineEdit Override.N)keyr   ZKey_Uprm   ri   Zprevious_rowZKey_DownZnext_rowZ
Key_Escaperj   rf   emitZ	Key_EnterZ
Key_Returnr   rh   keyPressEvent)r$   Zeventrn   r%   r'   r(   rp   '  s    z%NamespacesBrowserFinder.keyPressEvent)NN)	rb   rc   rd   re   r:   rl   rm   rp   rg   r'   r'   r%   r(   rh     s
   

rh   ).re   rH   os.pathpathrD   Zqtpy.compatr   r   Zqtpy.QtCorer   r   r   Z
qtpy.QtGuir   Zqtpy.QtWidgetsr   r	   r
   r   r   r   Zspyder_kernels.utils.iofuncsr   Zspyder_kernels.utils.miscr   Zspyder_kernels.utils.nsviewr   Zspyder.api.translationsr   Zspyder.api.widgets.mixinsr   Z spyder.widgets.collectionseditorr   Z4spyder.plugins.variableexplorer.widgets.importwizardr   Zspyder.utilsr   Zspyder.utils.miscr   r   Zspyder.widgets.helperwidgetsr   rC   ZVALID_VARIABLE_CHARSr   rh   r'   r'   r'   r(   <module>   s*     g