
    eE                         d dl ZddlmZmZmZ ej                  j                  ZdgZd Z	 G d dej                        Z G d dej                        Zy)	    N   )QtCoreQtGui	QtWidgetsTableWidgetc                       fd}|S )Nc                 (   d}| j                   (| j                         | _         d}| j                  d       	  | g|i ||r#| j                  | j                          d | _         S S # |r#| j                  | j                          d | _         w w xY w)NFT)_sortingisSortingEnabledsetSortingEnabled)selfargskwds
setSortingfns       ?/usr/lib/python3/dist-packages/pyqtgraph/widgets/TableWidget.py	defersortz_defersort.<locals>.defersort   s    
==  113DMJ""5)	%d*T*T*&&t}}5 $ z&&t}}5 $ s   A* *'B )r   r   s   ` r   
_defersortr   
   s    %     c                        e Zd ZdZd Zd Zd Zed        ZddZ	ddZ
d Zd	 Zd
 Zd Zd Zed        Zed        Zd Zd ZddZd Zd Zd Zd Zd Zd Z fdZd Z xZS )r   a  Extends QTableWidget with some useful functions for automatic data handling
    and copy / export context menu. Can automatically format and display a variety
    of data types (see :func:`setData() <pyqtgraph.TableWidget.setData>` for more
    information.
    c                    t        j                  j                  | g|  t        | _        | j                  | j                  j                         | j                  t         j                  j                  j                         | j                  t         j                  j                  j                  t         j                  j                  j                         | j!                          |j#                  dd       |j#                  dd       | j%                  |j'                  d             | j)                  |j'                  d             t+        |      dkD  r%t-        dt/        |j1                               z        d| _        ddi| _        i | _        | j8                  j;                  | j<                         t        j>                         | _         | j@                  jC                  tE        dd	            jF                  j;                  | jH                         | j@                  jC                  tE        dd
            jF                  j;                  | jJ                         | j@                  jC                  tE        dd            jF                  j;                  | jL                         | j@                  jC                  tE        dd            jF                  j;                  | jN                         y)a
  
        All positional arguments are passed to QTableWidget.__init__().
        
        ===================== =================================================
        **Keyword Arguments**
        editable              (bool) If True, cells in the table can be edited
                              by the user. Default is False.
        sortable              (bool) If True, the table may be soted by
                              clicking on column headers. Note that this also
                              causes rows to appear initially shuffled until
                              a sort column is selected. Default is True.
                              *(added in version 0.9.9)*
        ===================== =================================================
        sortableTeditableFr   zInvalid keyword arguments '%s'Nr   zCopy SelectionzCopy AllzSave SelectionzSave All)(r   QTableWidget__init__TableWidgetItem	itemClasssetVerticalScrollMode
ScrollModeScrollPerPixelsetSelectionModeQAbstractItemViewSelectionModeContiguousSelectionsetSizePolicyQSizePolicyPolicy	Preferredclear
setdefaultsetEditablepopr   len	TypeErrorlistkeysr
   _formats	sortModesitemChangedconnecthandleItemChangedQMenucontextMenu	addAction	translate	triggeredcopySelcopyAllsaveSelsaveAll)r   r   r   s      r   r   zTableWidget.__init__#   s     	''4t4(""4??#A#ABi99GG[[\90077AA9CXCXC_C_CiCij


D)
E**-.txx
34t9q=<tDIIK?PPQQt  !7!78$??,""9]<L#MNXX``aeamamn""9]J#GHRRZZ[_[g[gh""9]<L#MNXX``aeamamn""9]J#GHRRZZ[_[g[ghr   c                     t         j                  j                  |        d| _        d| _        g | _        | j                  d       | j                  d       i | _        y)z"Clear all contents from the table.Fr   N)	r   r   r*   verticalHeadersSethorizontalHeadersSetitemssetRowCountsetColumnCountr3   r   s    r   r*   zTableWidget.clearQ   sP    $$T*"'$)!
Ar   c                 f    | j                          | j                  |       | j                          y)aN  Set the data displayed in the table.
        Allowed formats are:
        
          * numpy arrays
          * numpy record arrays
          * metaarrays
          * list-of-lists  [[1,2,3], [4,5,6]]
          * dict-of-lists  {'x': [1,2,3], 'y': [4,5,6]}
          * list-of-dicts  [{'x': 1, 'y': 4}, {'x': 2, 'y': 5}, ...]
        N)r*   
appendDataresizeColumnsToContentsr   datas     r   setDatazTableWidget.setData[   s%     	

$$&r   c                 h   | j                         }| j                  |      \  }}|| j                          y ||      }	 t        |      }| j                  |      \  }}|| j                          y ||      D 	cg c]  }	|	 }
}	| j                  t        |
             | j                  s}|{t        | j                               D cg c]!  }| j                  |      j                         # }}| j                  |t        |      z          | j                  ||z          d| _        | j                  s|| j                  |       d| _        |}| j                  ||
       |D ]-  }|dz  }| j                  | ||      D 	cg c]  }	|	 c}	       / | j                   rr| j                  re| j#                         j%                         | j'                         k\  r5| j)                  dt*        j,                  j.                  j0                         yyyy# t        $ r Y yw xY wc c}	w c c}w c c}	w )z
        Add new rows to the table.
        
        See :func:`setData() <pyqtgraph.TableWidget.setData>` for accepted
        data types.
        NT   r   )rowCount
iteratorFnr*   nextStopIterationrE   r.   rA   rangeverticalHeaderItemtextrD   setVerticalHeaderLabelsrB   setHorizontalHeaderLabelssetRowr
   horizontalHeadersortIndicatorSectioncolumnCountsortByColumnr   Qt	SortOrderAscendingOrder)r   rK   startRowfn0header0it0firstfn1header1x	firstValsilabelsrows                 r   rH   zTableWidget.appendDataj   s    ==?t,W;JJL$i	IE u-W;JJL #E
+1Q+	+C	N+&&7+>AFt}}AWXAd--a0557XFXXG45((')9:&*D#((W-@**73(,D%Ay! 	2CFAKKs3x0!A01	2 MMd77!!#88:d>N>N>PPa!4!4!C!CD Q 8M3  		 , Y 1s$   H =	H%&H*	H/	H"!H"c                 V    || _         | j                  D ]  }|j                  |        y N)r   rC   r,   )r   r   items      r   r,   zTableWidget.setEditable   s*     JJ 	'DX&	'r   c                 &   |)t        |t              st        |      st        d|z        || j                  |<   |t        | j                               D ]c  }| j                  j                  |d       t        | j                               D ](  }| j                  ||      }||j                  |       * e y|| j                  d   }t        | j                               D ](  }| j                  ||      }||j                  |       * y)a  
        Specify the default text formatting for the entire table, or for a
        single column if *column* is specified.
        
        If a string is specified, it is used as a format string for converting
        float values (and all other types are converted using str). If a 
        function is specified, it will be called with the item as its only
        argument and must return a string. Setting format = None causes the 
        default formatter to be used instead.
        
        Added in version 0.9.9.
        
        N8Format argument must string, callable, or None. (got %s))
isinstancestrcallable
ValueErrorr2   rS   r[   getrO   rn   	setFormat)r   formatcolumncrrn   s         r   rv   zTableWidget.setFormat   s    j&=hvFVWZ``aa &f > 4++-. /==$$Q-5"4==?3 /#yyA<$v.	// ~t,4==?+ 'yyF+<v&	'r   c           	         t        |t              st        |t              rd d fS t        |t              r*d t        t	        t
        |j                                     fS t        |d      r|j                  d      r|j                  d      r?t        |j                  d         D cg c]  }t        |j                  d|             }}n<|j                  d      r)t        t	        t
        |j                  d                  }nd }| j                  |fS t        |t         j"                        r| j                  d fS t        |t         j$                        r9| j&                  t        t	        t
        |j(                  j*                              fS |yt!        j,                  |      r| j.                  d fS dj1                  t3        |            }t5        |      c c}w )Nc                 "    | j                         S rm   )__iter__ds    r   <lambda>z(TableWidget.iteratorFn.<locals>.<lambda>   s    QZZ\ r   c                 4    t        | j                               S rm   )itervaluesr~   s    r   r   z(TableWidget.iteratorFn.<locals>.<lambda>   s    T!((*- r   
implements	MetaArrayr   )NNz.Don't know how to iterate over data type: {!s})rq   r0   tupledictmaprr   r1   hasattrr   axisHasColumnsrS   shape
columnNameaxisHasValuesxvalsiterFirstAxisnpndarrayvoiditeratedtypenamesisscalariterateScalarrw   typer/   )r   rK   ri   headermsgs        r   rP   zTableWidget.iteratorFn   sr   dD!Ze%<)4//d#-tCTYY[4I/JJJdL)dook.J""1%>CDJJqM>RS#dooa34SS##A&c#tzz!}56%%v--bjj)%%t++bgg&<<c#tzz/?/?&@!AAA\[[%%t++BII$t*UCC. ! Ts   ("Gc              #   T   K   t        |j                  d         D ]	  }||     y w)Nr   )rS   r   )r   rK   ri   s      r   r   zTableWidget.iterFirstAxis   s+     tzz!}% 	Aq'M	s   &(c              #   "   K   |D ]  }|  y wrm   r   )r   rK   rg   s      r   r   zTableWidget.iterate   s       	AG	s   c              #      K   | y wrm   r   rJ   s     r   r   zTableWidget.iterateScalar   s     
s   c                 (    | j                  |g       y rm   )rH   rJ   s     r   	appendRowzTableWidget.appendRow   s    r   c                 p    | j                         }| j                  |dz          | j                  ||       y NrN   )rO   rD   rX   )r   valsrk   s      r   addRowzTableWidget.addRow   s-    mmoq!Cr   c                 >   || j                         dz
  kD  r| j                  |dz          t        t        |            D ]  }||   }| j	                  ||      }|j                  | j                         | j                  j                  |d       }||j                  |       | j                  j                  || j                  d          }|j                  |       | j                  j                  |       | j                  |||       |j                  |        y r   )rO   rD   rS   r.   r   r,   r   r3   ru   setSortModer2   rv   rC   appendsetItemsetValue)r   rk   r   colvalrn   sortModerw   s           r   rX   zTableWidget.setRow   s    1$$S1W%T# 	Cs)C>>#s+DT]]+~~))#t4H#  *]]&&sDMM$,?@FNN6"JJd#LLc4(MM#	r   c                     t        | j                               D ]2  }| j                  ||      }t        |d      s"|j	                  |       4 || j
                  |<   y)a  
        Set the mode used to sort *column*.
        
        ============== ========================================================
        **Sort Modes**
        value          Compares item.value if available; falls back to text
                       comparison.
        text           Compares item.text()
        index          Compares by the order in which items were inserted.
        ============== ========================================================
        
        Added in version 0.9.9
        r   N)rS   rO   rn   r   r   r3   )r   rx   moderz   rn   s        r   r   zTableWidget.setSortMode	  sV     t}}' 	'A99Q'Dt]+  &	' "&vr   c                     t         fdt         j                               D              }| j                         j	                         j                         z  }| j                         j	                         j                         z  }| j                         dz  z  }t         fdt         j                               D              }| j                         j	                         j                         z  }| j                         j	                         j                         z  }t        j                  ||      S )Nc              3   @   K   | ]  }j                  |        y wrm   )columnWidth.0ri   r   s     r   	<genexpr>z'TableWidget.sizeHint.<locals>.<genexpr>  s     KAD$$Q'K   r   c              3   @   K   | ]  }j                  |        y wrm   )	rowHeightr   s     r   r   z'TableWidget.sizeHint.<locals>.<genexpr>#  s     G1T^^A&Gr   )sumrS   r[   verticalHeadersizeHintwidthverticalScrollBar
frameWidthrO   heighthorizontalScrollBarr   QSize)r   r   r   s   `  r   r   zTableWidget.sizeHint  s    Kt7G7G7I1JKK$$&//17799'')224::<<"Q&&Gdmmo0FGG$%%'00299;;$**,557>>@@||E6**r   c                    |r|| j                         d   }t        t        |j                         |j	                         dz               }t        t        |j                         |j                         dz               }nDt        t        | j                                     }t        t        | j                                     }g }| j                  reg }| j                  r|j                  d       |D ]0  }|j                  | j                  |      j                                2 |j                  |       |D ]  }g }| j                  r.|j                  | j                  |      j                                |D ]L  }| j                  ||      }	|	%|j                  t!        |	j"                               <|j                  d       N |j                  |        d}
|D ]  }|
dj%                  |      dz   z  }
 |
S )zKConvert entire table (or just selected area) into tab-separated text valuesr   rN    	
)selectedRangesr0   rS   topRow	bottomRow
leftColumnrightColumnrO   r[   rB   rA   r   horizontalHeaderItemrU   rT   rn   rr   valuejoin)r   useSelection	selectionrowscolumnsrK   rk   ry   rz   rn   ss              r   	serializezTableWidget.serialize(  s   ++-a0Ii..0'113a79 :D5!5!5!7!*!6!6!81!<> ?G dmmo./D5!1!1!345G$$C&&

2 @

444Q7<<>?@KK 
	AC&&

42215::<= #yyA#JJs4::/JJrN# KK
	  	)C$))C.4'(A	)r   c                 ~    t         j                  j                         j                  | j	                  d             y)z Copy selected data to clipboard.Tr   Nr   QApplication	clipboardsetTextr   rF   s    r   r<   zTableWidget.copySelO  s*    ((*224>>t>3TUr   c                 ~    t         j                  j                         j                  | j	                  d             y)zCopy all data to clipboard.Fr   Nr   rF   s    r   r=   zTableWidget.copyAllS  s*    ((*224>>u>3UVr   c                 F    | j                  | j                  d             y)zSave selected data to file.Tr   Nsaver   rF   s    r   r>   zTableWidget.saveSelW  s    		$..d.34r   c                 F    | j                  | j                  d             y)zSave all data to file.Fr   Nr   rF   s    r   r?   zTableWidget.saveAll[  s    		$..e.45r   c           	          t         j                  j                  | t        dd       ddt        dd       d      \  }}|sy t	        |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nr   zSave Asz...r   zTab-separated valuesz (*.tsv)w)r   QFileDialoggetSaveFileNamer:   openwrite)r   rK   fileName_fds        r   r   zTableWidget.save_  s{    ++;;	2337(>?@I	
! (C  	BHHTN	 	 	s   A**A3c                 V    | j                   j                  |j                                y rm   )r8   popup	globalPos)r   evs     r   contextMenuEventzTableWidget.contextMenuEventk  s    r||~.r   c                     |j                  t        j                  j                  j                        r!|j                          | j                          y t        | !  |       y rm   )	matchesr   QKeySequenceStandardKeyCopyacceptr<   superkeyPressEvent)r   r   	__class__s     r   r   zTableWidget.keyPressEventn  s@    ::e((4499:IIKLLNG!"%r   c                 $    |j                          y rm   )r4   )r   rn   s     r   r6   zTableWidget.handleItemChangedu  s    r   )Trm   )F)__name__
__module____qualname____doc__r   r*   rL   r   rH   r,   rv   rP   r   r   r   r   r   rX   r   r   r   r<   r=   r>   r?   r   r   r   r6   __classcell__)r   s   @r   r   r      s    ,i\' +E +EZ'
''T!4   
  "&(	+%NVW56
/&r   c                   J    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zy)r   Nc                    t         j                  j                  | d       d| _        d | _        d| _        d| _        || _        t        j                  j                  j                  t        j                  j                  j                  z  }| j                  |       | j                  |       | j                  |       y )Nr   Fz%0.3gr   )r   QTableWidgetItemr   _blockValueChange_format_defaultFormatr   indexr   r]   ItemFlagItemIsSelectableItemIsEnabledsetFlagsr   rv   )r   r   r   rw   flagss        r   r   zTableWidgetItem.__init__z  s    ""++D"5!&%
		""33fii6H6H6V6VVecvr   c                    |rE| j                  | j                         t        j                  j                  j
                  z         y| j                  | j                         t        j                  j                  j
                   z         y)z9
        Set whether this item is user-editable.
        N)r  r  r   r]   r  ItemIsEditable)r   r   s     r   r,   zTableWidgetItem.setEditable  sX     MM$**,););)J)JJKMM$**,&))*<*<*K*K)KKLr   c                 L    d}||vrt        dt        |      z        || _        y)a  
        Set the mode used to sort this item against others in its column.
        
        ============== ========================================================
        **Sort Modes**
        value          Compares item.value if available; falls back to text
                       comparison.
        text           Compares item.text()
        index          Compares by the order in which items were inserted.
        ============== ========================================================
        )r   rU   r   NzSort mode must be one of %sN)rt   rr   r   )r   r   modess      r   r   zTableWidgetItem.setSortMode  s-     1u:SZGHHr   c                     |)t        |t              st        |      st        d|z        || _        | j                          y)a  Define the conversion from item value to displayed text. 
        
        If a string is specified, it is used as a format string for converting
        float values (and all other types are converted using str). If a 
        function is specified, it will be called with the item as its only
        argument and must return a string.
        
        Added in version 0.9.9.
        Nrp   )rq   rr   rs   rt   r   _updateText)r   fmts     r   rv   zTableWidgetItem.setFormat  s=     ?:c3#7WZ]]^^r   c                     d| _         	 | j                         | _        | j                  | j                         d| _         y # d| _         w xY w)NTF)r   rw   _textr   rF   s    r   r  zTableWidgetItem._updateText  s=    !%	+DJLL$%*D"UD"s   0A 	A
c                 2    || _         | j                          y rm   )r   r  )r   r   s     r   r   zTableWidgetItem.setValue  s    
r   c                 `    | j                         | j                  k7  r| j                          yy)z.Called when the data of this item has changed.N)rU   r  textChangedrF   s    r   r4   zTableWidgetItem.itemChanged  s%    99;$**$ %r   c                     | j                         | _        | j                  ry	  t        | j                        | j                               | _        y# t
        $ r! t        | j                               | _        Y yw xY w)z8Called when this item's text has changed for any reason.N)rU   r  r   r   r   rt   rr   rF   s    r   r  zTableWidgetItem.textChanged  s`    YY[
!! 	*)djj)$))+6DJ 	*TYY[)DJ	*s   .A 'A=<A=c                 H   t        | j                        r| j                  |       S t        | j                  t        t
        j                  f      r>| j                  | j                  | j                  z  S | j                  | j                  z  S t        | j                        S rm   )	rs   r   rq   r   floatr   floatingr   rr   rF   s    r   rw   zTableWidgetItem.format  st    DLL!<<%%djj5"++"67||#**TZZ77||djj00tzz?"r   c                    | j                   dk(  r%t        |d      r| j                  |j                  k  S | j                   dk(  r%t        |d      r| j                  |j                  k  S | j	                         |j	                         k  S )Nr   r   )r   r   r   r   rU   )r   others     r   __lt__zTableWidgetItem.__lt__  si    ==G#w(?::++==G#w(?::++99;--r   rm   )r   r   r   r   r,   r   rv   r  r   r4   r  rw   r  r   r   r   r   r   y  s5    
M"+
*	#.r   r   )numpyr   r]   r   r   r   QCoreApplicationr:   __all__r   r   r   r   r   r   r   r   <module>r     sT     ) )##--	/$Z)(( Zz
g.i00 g.r   