
    JeR0                     &   d Z ddlZddlm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+ dZ, G d dee       Z- G d de+      Z.y)zY
Namespace browser widget.

This is the main widget used in the Variable Explorer plugin
    N)PYQT5)getopenfilenamesgetsavefilename)QtSignalSlot)QCursor)QApplicationQHBoxLayoutQInputDialogQMessageBoxQVBoxLayoutQWidget)iofunctions)fix_reference_name)REMOTE_SETTINGS)_)SpyderWidgetMixin) RemoteCollectionsEditorTableView)ImportWizard)encoding)getcwd_or_homeremove_backslashes)FinderLineEditu.   [^\w+*=¡!¿?'\"#$%&()/<>\-\[\]{}^`´;,|¬]*\wc                        e Zd ZdZdZ e       Z e       Z e       Z e       Z	 fdZ
d Zd Zd Zd Zd Zd	 Zd
 Zd Zd Z ee      dd       Zd Zd Z xZS )NamespaceBrowserz?
    Namespace browser (global variables explorer widget).
    variable_explorerc                     t         rt        | 	  ||       n-t        j                  | |       t	        j                  | |       d | _        d | _        d| _        d| _        d | _	        d | _
        y )N)parentclass_parent)r     F)r   super__init__r   r   filenametext_finder	last_findfinder_is_visibleeditorshellwidget)selfr   	__class__s     Z/usr/lib/python3/dist-packages/spyder/plugins/variableexplorer/widgets/namespacebrowser.pyr#   zNamespaceBrowser.__init__7   si    GF@T6*&&t&A !&     c                    | j                   J | j                  +| j                   j                          | j                          yt	        | d| j                   d      | _        | j                  j
                  j                  | j                         | j                  j                  j                  | j                         | j                  j                  j                  | j                         | j                  j                  j                  | j                         t               }|j                  dddd       |j                  | j                         | j!                  |       y)zD
        Setup the namespace browser with provided options.
        NF)datar)   create_menur   )r)   r(   set_namespace_view_settingsrefresh_tabler   sig_files_droppedconnectimport_datasig_free_memory_requestedsig_editor_creation_startedsig_start_spinner_requestedsig_editor_shownsig_stop_spinner_requestedr   setContentsMargins	addWidget	setLayout)r*   layouts     r,   setupzNamespaceBrowser.setupH   s    +++;;"88:  ; ,,!	DK KK))11$2B2BCKK1199..0KK33;;002KK((00//1 !]F%%aAq1T[[)NN6"r-   c                 H    i }t         D ]  }| j                  |      ||<    |S )z Return dict editor view settings)r   get_conf)r*   settingsnames      r,   get_view_settingsz"NamespaceBrowser.get_view_settingsi   s/    # 	1D!]]40HTN	1 r-   c                 4    || _         |j                  |        y)z.Bind shellwidget instance to namespace browserN)r)   set_namespacebrowser)r*   r)   s     r,   set_shellwidgetz NamespaceBrowser.set_shellwidgetq   s    &((.r-   c                     || _         | j                  r%| j                   j                  | j                         || j                  _        | j                  S )z2Bind NamespaceBrowsersFinder to namespace browser.)r%   r'   setTextr&   r(   finder)r*   r%   s     r,   set_text_finderz NamespaceBrowser.set_text_finderv   sC    &!!$$T^^4(%%%r-   c                 (    |r	|r|| _         || _        y)z9Save last finder/search text input and finder visibility.N)r&   r'   )r*   r&   finder_visibilitys      r,   save_finder_statez"NamespaceBrowser.save_finder_state   s    *&DN!2r-   c                     | j                   j                          	 | j                  j                          y# t        $ r Y yw xY w)zRefresh variable table.N)r)   refresh_namespacebrowserr(   resizeRowToContents	TypeErrorr*   s    r,   r2   zNamespaceBrowser.refresh_table   s;    113	KK++- 		s   7 	AAc                 N    d| j                   _        || j                  |       yy)zProcess remote viewFN)r%   load_allset_data)r*   remote_views     r,   process_remote_viewz$NamespaceBrowser.process_remote_view   s)     %*!"MM+& #r-   c                 ,    ||| j                   _        yy)zSet properties of variablesN)r(   var_properties)r*   
propertiess     r,   set_var_propertiesz#NamespaceBrowser.set_var_properties   s    !)3DKK& "r-   c                     || j                   j                  j                         k7  r6| j                   j                  |       | j                   j	                          yy)z	Set data.N)r(   source_modelget_datarV   adjust_columns)r*   r/   s     r,   rV   zNamespaceBrowser.set_data   sD    4;;++4466KK  &KK&&( 7r-   c           	         t        d      }|X| j                  t               }nt        j                  | j                        }t        | ||t        j                        \  }}|syt        |t              r|g}|D ]7  }t        |      | _        t        j                  dk(  rt        | j                        | _        t        j                  | j                        d   j                         }|dk(  rZt        j                   t        j"                  z  }t        j$                  | |t        d      |z  |      }|t        j"                  k(  r y|t        j&                  vrt        j                   t        j"                  z  }t        j(                  | |t        d      |z  |      }|t        j"                  k(  r yt+        t        j,                  j/                               }	t1        j2                  | |t        d      |	d	d
      \  }
}|rt        j,                  t        |
         }n yt        j&                  |   }t        |t              rd}	 t5        j6                  | j                        \  }}t        j8                  | j                        }t;        | ||t=        |            }|j?                         r/|jA                         \  }}| jB                  jE                  ||       ntI        jJ                  tM        tN        jP                               tI        jR                          | jT                  jW                  | j                  |      }tI        jX                          tI        jR                          |/t        jZ                  | |t        d      | j                  |fz         | j]                          : y# tF        $ r}t        |      }Y d}~^d}~ww xY w)zImport data from text file.zImport dataNnt   .spydataz<b>Warning: %s files can contain malicious code!</b><br><br>Do not continue unless this file is from a trusted source. Would you like to import it anyway?zr<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)titlevarnamez><b>Unable to load '%s'</b><br><br>The error message was:<br>%s)/r   r$   r   ospdirnamer   r   load_filters
isinstancestrosrC   r   splitextlowerr   YesCancelwarning
load_funcsquestionlistload_extensionskeysr   getItemr   readbasenamer   r   exec_r_   r(   	new_value	Exceptionr
   setOverrideCursorr	   r   
WaitCursorprocessEventsr)   	load_datarestoreOverrideCursorcriticalr2   )r*   	filenamesre   basedir
_selfilterr$   	extensionbuttonsanswerformatsitemok	load_funcerror_messagetext	_encoding	base_namer(   var_name	clip_dataerrors                        r,   r5   zNamespaceBrowser.import_data   sC    - }}$(*++dmm4$4T5'5@5M5M%O!Iz	3'"I! I	!HMDMww$ 24== AT]]3A6<<>IJ&%//K,>,>>$,,   ! $-	-
 	 [/// 6 66%//K,>,>>$-- + , /88  [///{::??AB'//e01/0B07ECb  + ; ;CI FI#..y9I )S) $	/&.mmDMM&BOD) #T]] ;I)$I*<Y*GIF||~.4oo.?+)--h	B ..wr}}/EF**, $ 0 0 : :4==;D!F224**,($$T5%& (F &) -1MM=+I&JK
  SI	!r ! /$'JM/s   BN77	O OOc                     | j                  dd      }| j                  j                  |d       d| j                  _        y )Nipython_consoleshow_reset_namespace_warning)sectionoptionT)rq   message)rA   r)   reset_namespacer(   automatic_column_width)r*   rq   s     r,   r   z NamespaceBrowser.reset_namespace   sB    --%1   
 	(($(G-1*r-   c                    | j                   }|
t               }t        j                  |      d   j	                         }|s|dz   }t        | t        d       |t        j                        \  }}|r|| _         nyt        j                  t        t        j                               t        j                          | j                  j!                  | j                         }t        j"                          t        j                          |dd|v r1t        d      dj%                  |j'                  d      d   	      z   }nt        d
      |z   }t)        j*                  | t        d       |       yy)z	Save dataNrc   rd   Fz Some objects could not be saved:z'<b>Some objects could not be saved:</b>z<br><br><code>{obj_list}</code>z: )obj_listzI<b>Unable to save current workspace</b><br><br>The error message was:<br>)r$   r   rg   rm   rn   r   r   r   save_filtersr
   r}   r	   r   r~   r   r)   save_namespacer   formatsplitr   r   )r*   r$   r   r   r   save_data_messages         r,   	save_datazNamespaceBrowser.save_data  sO   ==%'HLL*1-335	  *,H.tQ{^/7/:/G/G I* $DM&&wr}}'=>""$((77F**,""$$1]B?@7>>!.!4!4T!:1!= ? ?? "
 %&1%2 5B%B!
   q~7HI %r-   N)__name__
__module____qualname____doc__CONF_SECTIONr   r6   r8   r:   sig_hide_finder_requestedr#   r?   rD   rG   rK   rN   r2   rX   r\   rV   r   rt   r5   r   r   __classcell__r+   s   @r,   r   r   *   s     'L !'"((!' & "#B/
&3'4
) 
$ZX! X!t2%Jr-   r   c                   4     e Zd ZdZdZddZd Z fdZ xZS )NamespacesBrowserFinderz4Textbox for filtering listed variables in the table.Fc                     || _         || _        	 | j                  j                          |r| j                  j                  |       y y # t        $ r Y *w xY wr   )_parentmaintextChanged
disconnectrR   r4   )r*   r   callbackr   s       r,   update_parentz%NamespacesBrowserFinder.update_parent1  sY    		'') $$X.   		s   A	 		AAc                     | j                   s<| j                  j                         j                  j                  j                          d| _         y)z,Load all variables to correctly filter them.TN)rU   r   r   r(   r^   rS   s    r,   load_all_variablesz*NamespacesBrowserFinder.load_all_variables;  s5    }}LL!((55>>@r-   c                    |j                         }|t        j                  fv r+| j                          | j                  j                          y|t        j                  fv r+| j                          | j                  j                          y|t        j                  fv r%| j                  j                  j                          y|t        j                  t        j                  fv ry| j                          t        t        | C  |       y)zQt and FilterLineEdit Override.N)keyr   Key_Upr   r   previous_rowKey_Downnext_row
Key_Escaper   r   emit	Key_Enter
Key_Returnr"   r   keyPressEvent)r*   eventr   r+   s      r,   r   z%NamespacesBrowserFinder.keyPressEventA  s    iik299+##%LL%%'R[[M!##%LL!!#R]]O#II//446R\\2==11##%)4>uEr-   )NN)	r   r   r   r   rU   r   r   r   r   r   s   @r,   r   r   ,  s!    >H/F Fr-   r   )/r   rl   os.pathpathrg   qtpyr   qtpy.compatr   r   qtpy.QtCorer   r   r   
qtpy.QtGuir	   qtpy.QtWidgetsr
   r   r   r   r   r   spyder_kernels.utils.iofuncsr   spyder_kernels.utils.miscr   spyder_kernels.utils.nsviewr   spyder.api.translationsr   spyder.api.widgets.mixinsr    spyder.widgets.collectionseditorr   4spyder.plugins.variableexplorer.widgets.importwizardr   spyder.utilsr   spyder.utils.miscr   r   spyder.widgets.helperwidgetsr   VALID_VARIABLE_CHARSr   r    r-   r,   <module>r      sx    
   9 ( ( ? ? 4 8 7 & 7 M M ! @ 7 I Jw 1 JD%Fn %Fr-   