
    Je3                        d Z ddlZddlmZmZmZ ddlmZ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	Zd
Z G d d      Z G d de      ZdeiZ G d de	      Z G d de
      Z G d de      Zd Zedk(  r e        yy)zArray Builder Widget.    N)QEventQPointQt)QDialogQHBoxLayout	QLineEditQTableWidgetQTableWidgetItemQToolButtonQToolTip)_)ima)QStylePalette)HelperToolButtonzCtrl+Mz
Ctrl+Alt+Mc                   .    e Zd ZdZdZdZdZdZdZdZ	d Z
y)ArrayBuilderTypeNc                      y N selfs    =/usr/lib/python3/dist-packages/spyder/widgets/arraybuilder.pycheck_valueszArrayBuilderType.check_values,   s        )__name__
__module____qualname__LANGUAGEELEMENT_SEPARATORROW_SEPARATORBRACESEXTRA_VALUESARRAY_PREFIXMATRIX_PREFIXr   r   r   r   r   r   #   s+    HMFLLMr   r   c                   2    e Zd ZdZdZdZg dddgdZdZd	Zy
)ArrayBuilderPythonz, ;z], [)nanNANNaNNaNAnainfINF)znp.nanznp.infznp.array([[znp.matrix([[N)	r   r   r   r   r    r!   r"   r#   r$   r   r   r   r&   r&   0   s/    MF9%.L !L"Mr   r&   pythonc                   4     e Zd Zd fd	Z fdZ fdZ xZS )ArrayInlinec                 H    t         t        |   |       || _        || _        y r   )superr2   __init___parent_optionsr   parentoptions	__class__s      r   r5   zArrayInline.__init__B   s     k4)&1r   c                 .   |j                         t        j                  t        j                  fv rQ| j                  j                          | j                  j                         r| j                  j                  |       yyt        t        |   |       y)Override Qt method.N)
keyr   	Key_Enter
Key_Returnr6   process_textis_validkeyPressEventr4   r2   r   eventr;   s     r   rC   zArrayInline.keyPressEventG   sf    99;2<<77LL%%'||$$&**51 ' +t259r   c                 ,   |j                         t        j                  k(  r|j                         t        j
                  k(  s!|j                         t        j                  k(  r| j                         }| j                         }|dk7  r4||dz
     dk(  r)|d|dz
   | j                  j                  z   dz   ||d z   }n|d| dz   ||d z   }| j                  |       | j                  |       | j                  |dz          yt        t        | ?  |      S )zn
        Override Qt method.

        This is needed to be able to intercept the Tab key press event.
        r       NF)typer   KeyPressr>   r   Key_Tab	Key_SpacetextcursorPositionr7   r    setCursorPositionsetTextr4   r2   rE   )r   rE   rM   cursorr;   s       r   rE   zArrayInline.eventQ   s     ::<6??*		rzz)UYY[BLL-Hyy{,,. Q;4q>S#8 &(Odmm.I.II!"$(M2D  =3.fg>D&&v.T"&&vz2[$-e44r   r   )r   r   r   r5   rC   rE   __classcell__r;   s   @r   r2   r2   A   s     
:5 5r   r2   c                   <     e Zd Zd fd	Z fdZd Zd Zd Z xZS )
ArrayTablec                     t         t        |   |       || _        || _        | j                  d       | j                  d       | j                          | j                  j                  | j                         y )N   )r4   rU   r5   r6   r7   setRowCountsetColumnCountreset_headerscellChangedconnectcell_changedr8   s      r   r5   zArrayTable.__init__l   sd    j$(0A 	  !2!23r   c                    t         t        |   |       |j                         t        j
                  t        j                  fv r>| j                  d       | j                  d       | j                  j                  |       yy)r=   TFN)	r4   rU   rC   r>   r   r?   r@   setDisabledr6   rD   s     r   rC   zArrayTable.keyPressEventw   s`    j$-e499;2<<77T"U#LL&&u-	 8r   c                 $   | j                  ||      }d }|r0| j                         }| j                         }|j                         }|r8|dz
  k(  r| j	                  |dz          |dz
  k(  r| j                  |dz          | j                          y )NrG   )itemrowCountcolumnCountrM   rX   rY   rZ   )r   rowcolra   valuerowscolss          r   r]   zArrayTable.cell_changed   s    yyc"==?D##%DIIKEdQh  *dQh##D1H-r   c           	      8   | j                         }| j                         }t        |      D ]&  }| j                  |t	        t        |                   ( t        |      D ]8  }| j                  |t	        t        |                   | j                  |d       : y)z3Update the column and row numbering in the headers.(   N)rb   rc   rangesetVerticalHeaderItemr
   strsetHorizontalHeaderItemsetColumnWidth)r   rg   rh   rcs        r   rZ   zArrayTable.reset_headers   s    }}!t 	DA&&q*:3q6*BC	Dt 	'A((,<SV,DE2&	'r   c                    g }| j                         }| j                         }|dk(  r|dk(  r| j                  dd      }|yt        |dz
        D ]  }t        |dz
        D ]]  }| j                  ||      }||j	                         }nd}|j                         sd}|j                  d       |j                  |       _ |j                  | j                  j                          dj                  |dd       S )	z-Return the entered array in a parseable form.rW   r   N rG   0rH   )
rb   rc   ra   rk   rM   stripappendr7   r    join)r   rM   rg   rh   ra   rp   rq   rf   s           r   rM   zArrayTable.text   s    }}! 1999Q?D|tax 	5A4!8_ #yyA# IIKEE{{}EC E"# KK334	5 wwtCRy!!r   r   )	r   r   r   r5   rC   r]   rZ   rM   rR   rS   s   @r   rU   rU   k   s    	4. 	'"r   rU   c                   b     e Zd Z	 	 d	 fd	Z fdZ fdZd
dZd Zd Zd Z	e
d        Z xZS )ArrayBuilderDialogc                 t   t         t        |   |       || _        t        j                  dd       | _        || _        d | _        d | _	        || _
        || _        t        d      | _        t        d      | _        t               | _        t#               | _        | j$                  j'                  t)        j*                  d             dj-                  t.        j0                  t.        j2                        }| j$                  j5                  |       |rS| j$                  j7                  | j                         t9        | | j                        | _        | j                  | _        nR| j$                  j7                  | j                         t=        | | j                        | _        | j>                  | _        d	}| j5                  |       d
}| j                   j5                  |       | jA                  tB        jD                  tB        jF                  z  tB        jH                  z         | jK                  d       | jM                  d       | j:                  jO                  d       tQ               | _)        | jR                  jU                  | j:                         | jR                  jU                  | j                   dtB        jV                         | jR                  jU                  | j$                  dtB        jV                         | jY                  | jR                         | j:                  j[                          y )N)r9   r0   aw  
           <b>Numpy Array/Matrix Helper</b><br>
           Type an array in Matlab    : <code>[1 2;3 4]</code><br>
           or Spyder simplified syntax : <code>1 2;3 4</code>
           <br><br>
           Hit 'Enter' for array or 'Ctrl+Enter' for matrix.
           <br><br>
           <b>Hint:</b><br>
           Use two spaces or two tabs to generate a ';'.
           aY  
           <b>Numpy Array/Matrix Helper</b><br>
           Enter an array in the table. <br>
           Use Tab to move between cells.
           <br><br>
           Hit 'Enter' for array or 'Ctrl+Enter' for matrix.
           <br><br>
           <b>Hint:</b><br>
           Use two tabs at the end of a row to move to the next row.
           MessageBoxInformationa  
            QToolButton {{
              border: 1px solid grey;
              padding:0px;
              border-radius: 2px;
              background-color: qlineargradient(x1: 1, y1: 1, x2: 1, y2: 1,
                  stop: 0 {stop_0}, stop: 1 {stop_1});
            }}
            )stop_0stop_1)r:   z
            QDialog {
              margin:0px;
              border: 1px solid grey;
              padding:0px;
              border-radius: 2px;
            }z
            QToolButton {
              margin:1px;
              border: 0px solid grey;
              padding:0px;
              border-radius: 0px;
            }Tg?   rG   ).r4   rz   r5   	_language_REGISTERED_ARRAY_BUILDERSgetr7   r6   _text_valid_offset_force_floatr   _help_inline_help_tabler   _button_warningr   _button_helpsetIconr   iconformatr   COLOR_BACKGROUND_4COLOR_BACKGROUND_2setStyleSheet
setToolTipr2   _widgetrU   _tablesetWindowFlagsr   WindowDialogFramelessWindowHintsetModalsetWindowOpacitysetMinimumWidthr   _layout	addWidgetAlignTop	setLayoutsetFocus)r   r9   inlineoffsetforce_floatlanguagestyler;   s          r   r5   zArrayBuilderDialog.__init__   so    $00?!266xF
 ( 	 	  	 	  +},.!!#((+B"CD }??,??  A 	 	''.(():):;$T4==ADJ::DL(()9)9:$T4==ADK;;DL 	5! 	**51 	BII		1B4J4JJKdd#$$S) #}t||,t33QDt00!R[[At||$r   c                 f   t        j                          |j                         t        j                  z  }|j                         t        j                  t        j                  fv r8|r| j                  d       n| j                  d       | j                          yt        t        | 3  |       y)r=   F)arrayTN)r   hideText	modifiersr   ControlModifierr>   r?   r@   rA   acceptr4   rz   rC   )r   rE   ctrlr;   s      r   rC   z ArrayBuilderDialog.keyPressEvent  s     2#5#5599;2<<77!!!.!!!-KKM$d9%@r   c                     |j                         t        j                  k(  r"|j                         t        j
                  k(  ryt        t        | #  |      S )zM
        Override Qt method.

        Useful when in line edit mode.
        F)	rI   r   rJ   r>   r   rK   r4   rz   rE   rD   s     r   rE   zArrayBuilderDialog.event'  s>     ::<6??*uyy{bjj/H'4U;;r   c           	         |r| j                   j                  }n| j                   j                  }d}| j                  j	                         j                         }|dk7  rd| j                   j                  z   dz   }t        j                  || j                   j                  |      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  | j                   j                  dz   d|      }|j                  d| j                   j                        }g }|j                  | j                   j                        }t        |      }g }	|D ]  }
g }|
j                  | j                   j                        }|	j                  t        |             |D ]i  }|}| j                   j                  j                         D ]  \  }}||v s|} | j                   r	 t#        t%        |            }|j                  |       k |j                  | j                   j                  j'                  |              | j                   j                  j'                  |      }|}t        t)        |	            d	k(  rd
| _        nd| _        |d	k(  r|dd }|j                  dd      }| j,                  }| j                   j.                  j                  ddd|t        |      z   d	z
  z  z         }|j                  | j                   j                  |      }dj1                  |||      }|| _        nd| _        | j5                          y#  Y WxY w)zP
        Construct the text based on the entered content in the widget.
        z]])rs   z(\s*)z\s+rH   z]$z^\[z*$rG   TFNru   z])
z	{0}{1}{2})r7   r#   r$   r   rM   rv   r    resubreplacer   splitlenrw   r"   itemsr   rm   floatrx   setr   r   r!   r   r   update_warning)r   r   prefixsuffixvaluesexp
new_valuesrg   nrowsncolsrd   new_rowelementsenumr>   r   bracesrM   s                      r   rA   zArrayBuilderDialog.process_text2  s    ]]//F]]00F""$**,R<T]]8888CCVVC!<!<fEFVVFC0FVVE2v.FVVFB/FVVDMM77%?VLF ^^C$--*I*IJF J<< ; ;<DIEE C99T]]%D%DES]+! (AC (,}}'A'A'G'G'I &V&="%C&
 ((!"%eAh-C NN3'( !!MM3388AC'C* 4499*EJF 3u:!#"# zt4 \\F]]))11sFS[014557F ^^DMM$?$?&IF%%fff=DDJDJ?! s   M''M,c                 f   | j                   }| j                         szt        d      }|j                  t	        j
                  d             |j                  |       t        j                  | j                  j                  t        dd            |       y| j                   j                  d       y)zV
        Updates the icon and tip based on the validity of the array content.
        zArray dimensions not validMessageBoxWarningr      rs   N)r   rB   r   r   r   r   r   r   showTextr   mapToGlobalr   )r   widgettips      r   r   z!ArrayBuilderDialog.update_warning  s     %%}}01CNN388$789c"dll66va|DcJ  ++B/r   c                     | j                   S )z+Return if the current array state is valid.)r   r   s    r   rB   zArrayBuilderDialog.is_valid  s    {{r   c                     | j                   S )z$Return the parsed array/matrix text.)r   r   s    r   rM   zArrayBuilderDialog.text  s    zzr   c                     | j                   S )z Return the array builder widget.)r   r   s    r   array_widgetzArrayBuilderDialog.array_widget  s     ||r   )NTr   Fr0   )T)r   r   r   r5   rC   rE   rA   r   rB   rM   propertyr   rR   rS   s   @r   rz   rz      sE    GL"] ~A	<L\0  r   rz   c                      ddl m}   |        }t        d d      }t        d d      }|j                          |j                          |j	                          y )Nr   )qapplicationF)r   T)spyder.utils.qthelpersr   rz   showexec_)r   app	dlg_table
dlg_inlines       r   testr     sA    3
.C"46I#D6JNNOOIIKr   __main__) __doc__r   qtpy.QtCorer   r   r   qtpy.QtWidgetsr   r   r   r	   r
   r   r   spyder.config.baser   spyder.utils.icon_managerr   spyder.utils.paletter   spyder.widgets.helperwidgetsr   SHORTCUT_TABLESHORTCUT_INLINEr   r&   r   r2   rU   rz   r   r   r   r   r   <module>r      s     
 + *E E E ! ) . 9 
 
	#) 	#   
'5) '5TK" K"\_ _D zF r   