o
    :Î®cá  ã                   @   s˜   d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ G d	d
„ d
eƒZG dd„ de
ƒZG dd„ deƒZdS )aV  
Skivi is written/maintained/developed by:

S. Chris Colbert - sccolbert@gmail.com

Skivi is free software and is part of the scikit-image project.

Skivi is governed by the licenses of the scikit-image project.

Please report any bugs to the author.

The skivi module is not meant to be used directly.

Use skimage.io.imshow(img, fancy=True)é    )Údedent)ÚQtCoreÚ	QtWidgets)ÚQMainWindowÚQLabelÚQWidgetÚQFrameÚQGridLayout)ÚQImageÚQPixmapé   )Ú
MixerPanel)ÚQuadHistogramc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
ImageLabelc                 C   s€   t  | ¡ || _|| _t|j|jd |jd |jd tjƒ| _	t
 | j	¡| _|  | j¡ |  tjj¡ |  dd¡ |  d¡ d S )Nr   r   éd   T)r   Ú__init__ÚparentÚarrr
   ÚdataÚshapeÚstridesÚFormat_RGB888Úimgr   Ú	fromImageÚpmÚ	setPixmapÚsetAlignmentr   ÚQtÚAlignTopÚsetMinimumSizeÚsetMouseTracking)Úselfr   r   © r"   ú@/tmp/pip-target-vg8gfxp4/lib/python/skimage/io/_plugins/skivi.pyr      s   
ÿzImageLabel.__init__c                 C   s   | j  |¡ d S ©N)r   Úlabel_mouseMoveEvent)r!   Úevtr"   r"   r#   ÚmouseMoveEvent2   s   zImageLabel.mouseMoveEventc                 C   s0   |   ¡ }t | j¡}| |¡| _|  | j¡ d S r$   )Úwidthr   r   r   ÚscaledToWidthr   r   )r!   r&   r(   r   r"   r"   r#   ÚresizeEvent5   s   zImageLabel.resizeEventc                 C   s,   |   ¡ }t | j¡}| |¡}|  |¡ d S r$   )r(   r   r   r   r)   r   )r!   r(   r   r"   r"   r#   Úupdate_image;   s   
zImageLabel.update_imageN)Ú__name__Ú
__module__Ú__qualname__r   r'   r*   r+   r"   r"   r"   r#   r      s
    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRGBHSVDisplayc                 C   sÚ  t  | ¡ |  t jt jB ¡ tdƒ| _tƒ | _tdƒ| _tƒ | _	tdƒ| _
tƒ | _tdƒ| _tƒ | _tdƒ| _tƒ | _tdƒ| _tƒ | _tdƒ| _tƒ | _tdƒ| _tƒ | _t| ƒ| _| j | jd	d	¡ | j | jd	d
¡ | j | jd
d	¡ | j | j	d
d
¡ | j | j
d	d¡ | j | jd	d¡ | j | jd
d¡ | j | jd
d¡ | j | jdd¡ | j | jdd¡ | j | jd	d¡ | j | jd	d¡ | j | jd
d¡ | j | jd
d¡ | j | jdd¡ | j | jdd¡ d S )NzX-pos:zY-pos:zR:zG:zB:zH:zS:zV:r   r   é   é   é   é   )r   r   ÚsetFrameStyleÚBoxÚSunkenr   Ú
posx_labelÚ
posx_valueÚ
posy_labelÚ
posy_valueÚr_labelÚr_valueÚg_labelÚg_valueÚb_labelÚb_valueÚh_labelÚh_valueÚs_labelÚs_valueÚv_labelÚv_valuer	   ÚlayoutÚ	addWidget©r!   r"   r"   r#   r   C   sF   









zRGBHSVDisplay.__init__c           
      C   sØ   |\}}}}}}}}	| j  t|ƒd d… ¡ | j t|ƒd d… ¡ | j t|ƒd d… ¡ | j t|ƒd d… ¡ | j t|ƒd d… ¡ | j t|ƒd d… ¡ | j t|ƒd d… ¡ | j	 t|	ƒd d… ¡ d S )Nr3   )
r8   ÚsetTextÚstrr:   r<   r>   r@   rB   rD   rF   )
r!   r   ÚxposÚyposÚrÚgÚbÚhÚsÚvr"   r"   r#   Úupdate_valsj   s   zRGBHSVDisplay.update_valsN)r,   r-   r.   r   rT   r"   r"   r"   r#   r/   B   s    'r/   c                   @   sL   e Z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S )ÚSkiviImageWindowc                 C   sä  t  | ¡ || _|| _tƒ | _t| jƒ| _|  | j¡ t	| |ƒ| _
tƒ | _| j tjtjB ¡ | j d¡ t| jƒ| j_| jj dddd¡ | jj | j
dd¡ | j | jdd¡ | j | ¡ | j ¡  |  d¡ t| jƒ| _| j | jdd¡ | j ¡  | j | j¡ t| jƒ| _| j | jdd¡ | j ¡  tƒ | _| j | jdd¡ | j ¡  | j dd¡ | j dd¡ t  !d¡| _"| j"j# $| j%¡ t  !d¡| _&| j&j# $| j'¡ | j" ¡  | j& ¡  | j | j&dd¡ | j | j"dd¡ d S )Nr   r   zSkivi - The skimage viewer.r0   zSave to FilezSave to Stack)(r   r   r   Úmgrr   Úmain_widgetr	   rG   ÚsetCentralWidgetr   Úlabelr   Úlabel_containerÚsetFrameShapeÚStyledPanelr6   ÚsetLineWidthÚsetContentsMarginsrH   Ú
add_windowÚshowÚsetWindowTitler   Úmixer_panelÚset_callbackÚrefresh_imager   Ú	rgbv_histr/   Úrgb_hsv_dispÚsetColumnStretchÚsetRowStretchr   ÚQPushButtonÚ	save_fileÚclickedÚconnectÚsave_to_fileÚ
save_stackÚsave_to_stack)r!   r   rV   r"   r"   r#   r   w   sJ   







zSkiviImageWindow.__init__c                 C   s   | j  | ¡ d S r$   )rV   Úremove_window)r!   Úeventr"   r"   r#   Ú
closeEventª   s   zSkiviImageWindow.closeEventc                 C   s   | j  | j¡ d S r$   )re   Úupdate_histsr   rI   r"   r"   r#   Úupdate_histograms¯   s   z"SkiviImageWindow.update_histogramsc                 C   s   | j  ¡  |  ¡  d S r$   )rY   r+   rt   rI   r"   r"   r#   rd   ²   s   
zSkiviImageWindow.refresh_imagec           	      C   sh   | j j ¡ }| j j ¡ }d| | }d| | }| jjd }| jjd }t|| ƒ}t|| ƒ}||fS )Ng      ð?r   r   )rY   r   r(   Úheightr   r   Úint)	r!   ÚxÚyr(   ru   Úx_fracÚy_fracÚnew_xÚnew_yr"   r"   r#   Úscale_mouse_pos¶   s   z SkiviImageWindow.scale_mouse_posc              
   C   sÚ   |  ¡ }| ¡ }|  ||¡\}}| jjd }| jjd }||ks,||ks,|dk s,|dk r9d } } } }	 }
}n$| j||df }| j||df }| j||df }| jj |||¡\}	}
}| j 	||||||	|
|f¡ d S )Nr   r   Ú r0   )
rw   rx   r}   r   r   rb   ÚmixerÚrgb_2_hsv_pixelrf   rT   )r!   r&   rw   rx   ÚmaxwÚmaxhrN   rO   rP   rQ   rR   rS   r"   r"   r#   r%   Á   s     z%SkiviImageWindow.label_mouseMoveEventc                 C   s–   ddl m} | j ¡ }| |¡ tdƒ}t|ƒ}t ¡ }t 	d|¡}|j
 |j¡ | d¡ t|ƒ|_|j |dddd¡ |j |dd¡ | ¡  d S )Nr1   ©Úiozˆ
            The image has been pushed to the io stack.
            Use io.pop() to retrieve the most recently
            pushed image.ÚOKTr   r   )r~   r„   r   ÚcopyÚpushr   r   r   ÚQDialogri   rk   rl   ÚacceptÚ
setDefaultr	   rG   rH   Úexec_)r!   r„   r   ÚmsgÚmsglabelÚdialogÚokr"   r"   r#   ro   Ó   s   



zSkiviImageWindow.save_to_stackc                 C   s<   ddl m} ttj ¡ ƒ}t|ƒdkrd S | || j¡ d S )Nr1   rƒ   r   )	r~   r„   rK   r   ÚQFileDialogÚgetSaveFileNameÚlenÚimsaver   )r!   r„   Úfilenamer"   r"   r#   rm   å   s
   zSkiviImageWindow.save_to_fileN)r,   r-   r.   r   rr   rt   rd   r}   r%   ro   rm   r"   r"   r"   r#   rU   v   s    3rU   N)Ú__doc__Útextwrapr   Úqtpyr   r   Úqtpy.QtWidgetsr   r   r   r   r	   Ú
qtpy.QtGuir
   r   Úq_color_mixerr   Úq_histogramr   r   r/   rU   r"   r"   r"   r#   Ú<module>   s    (4