U
    f»{júŽ  ã                   @   s`  d Z ddlmZ ddlZddlZddlZddlZddl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mZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. dd	l/m0Z0 dd
l/m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZHmIZImJZJmKZKmLZL ddlMmNZN ddlMmOZOmPZP ddlQmRZR ejdk�ràeRe S¡ d ddƒ�ràe T¡  U¡ dddgk�ràejV Wdd¡ G dd„ deFƒZXG dd„ deEƒZYG dd„ de<ƒZZG dd „ d e8eZƒZ[G d!d"„ d"eƒZ\G d#d$„ d$e9eZƒZ]G d%d&„ d&e:ƒZ^G d'd(„ d(e;eZƒZ_G d)d*„ d*e@ƒZ`G d+d,„ d,eBƒZaG d-d.„ d.e?eaƒZbG d/d0„ d0eAeaƒZcG d1d2„ d2e>ƒZdG d3d4„ d4eCƒZeG d5d6„ d6e=ƒZfG d7d8„ d8eƒZgG d9d:„ d:efƒZhG d;d<„ d<eDƒZiG d=d>„ d>e0e[e]e^e_ede`eYeXƒZjd?d@„ ZkddAœdBdC„ZledDdE„ ƒZmG dFdG„ dGe
ƒZndS )Hz'Qt implementation of _Renderer and GUI.é    )ÚcontextmanagerN)Ú
FileDialogÚ
MainWindow)ÚQtÚSignalÚQLocaleÚQObjectÚQLibraryInfo)ÚQIconÚQCursor)Ú	QComboBoxÚQDockWidgetÚQDoubleSpinBoxÚ	QGroupBoxÚQHBoxLayoutÚQLabelÚQToolButtonÚQMenuBarÚQSliderÚQSpinBoxÚQVBoxLayoutÚQWidgetÚQSizePolicyÚQScrollAreaÚQStyleÚQProgressBarÚQStyleOptionSliderÚQLayoutÚ	QCheckBoxÚQButtonGroupÚQRadioButtonÚ	QLineEditÚQGridLayoutÚQFileDialogÚQPushButtonÚQMessageBoxé   )Ú_PyVistaRenderer)Ú
_close_allÚ_close_3d_figureÚ_check_3d_figureÚ_set_3d_viewÚ_set_3d_titleÚ_take_3d_screenshot)Ú_AbstractDockÚ_AbstractToolBarÚ_AbstractMenuBarÚ_AbstractStatusBarÚ_AbstractLayoutÚ_AbstractWidgetÚ_AbstractWindowÚ_AbstractMplCanvasÚ_AbstractPlaybackÚ_AbstractBrainMplCanvasÚ_AbstractMplInterfaceÚ_AbstractWidgetListÚ_AbstractActionÚ_AbstractDialogÚ_AbstractKeyPress)Ú_qt_disable_paintÚ_qt_get_stylesheetÚ_qt_is_darkÚ_qt_detect_themeÚ_qt_raise_windowé   )Ú
safe_eventé   )Ú_check_optionÚ
get_config)Ú_compare_versionÚdarwinz>=z10.16é   é   ZQT_MAC_WANTS_LAYERÚ1c                   @   s\   e Zd ZdZeƒ Zeejejej	ej
ejejejejejd�	Zd
dd„Zdd„ Zdd	„ ZdS )Ú_QtKeyPressr   )	ÚescapeÚupZdownÚleftÚrightÚcommaZperiodZpage_upZ	page_downNc                    sL   |d krˆ j n|}tjˆ _t jd7  _tƒ tjˆ j< ‡ fdd„}||_d S )Nr&   c                    sN   |   ¡ }tjˆ j }||kr,|| }|ƒ  n|  ¡ }||krJ|| }|ƒ  d S ©N)ÚtextrL   Ú
_callbacksÚ
_widget_idÚkey)ÚeventrS   Úwidget_callbacksÚcallbackrV   ©Úself© úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/viz/backends/_qt.pyÚkeyPressEventF   s    z7_QtKeyPress._keypress_initialize.<locals>.keyPressEvent)Ú_windowrL   rU   ÚdictrT   r^   )r[   Úwidgetr^   r\   rZ   r]   Ú_keypress_initialize@   s    z _QtKeyPress._keypress_initializec                 C   s.   t j| j }t|ƒdkr"t j| }|||< d S ©Nr&   ©rL   rT   rU   ÚlenÚ_to_qt)r[   ÚshortcutrY   rX   r\   r\   r]   Ú_keypress_addT   s    
z_QtKeyPress._keypress_addc                 C   s0   t j| j }t|ƒdkr"t j| }|| ƒ  d S rc   rd   )r[   rg   rX   r\   r\   r]   Ú_keypress_triggerZ   s    
z_QtKeyPress._keypress_trigger)N)Ú__name__Ú
__module__Ú__qualname__rU   r`   rT   r   Z
Key_EscapeZKey_UpZKey_DownZKey_LeftZ	Key_RightZ	Key_CommaZ
Key_PeriodZ
Key_PageUpZKey_PageDownrf   rb   rh   ri   r\   r\   r\   r]   rL   1   s    ÷
rL   c                   @   sV   e Zd Zddddddddd	d
ddddddddgZdddddgZdg dddœdd„ZdS )Ú	_QtDialogÚOkZOpenZSaveZCancelÚCloseZDiscardZApplyÚResetZRestoreDefaultsZHelpZSaveAllZYesZYesToAllZNoZNoToAllZAbortÚRetryÚIgnoreZNoIconZQuestionZInformationÚWarningZCriticalTN)ÚiconÚbuttonsÚmodalÚwindowc                   sÜ   |d kr| j n|}t|ƒ‰ˆ |¡ ˆ |¡ tt|ƒ}	ˆ |	¡ ˆ |¡ |sVdg}tƒ }
|D ]}tt|ƒ}|
 |¡ q`|
d  }}|
dd … D ]}||O }q’ˆ 	|¡ ˆ 
|¡ t‡ ‡fdd„ƒ}ˆj |¡ tˆ|ƒS )Nrn   r   r&   c              
      s\   ˆ  | ¡}tjD ]F}|tt|ƒkrˆ ttjƒ¡ d zˆ |ƒ W 5 ˆ 	¡  £   qXX  qd S rR   )
ÚstandardButtonrm   Úsupported_button_namesÚgetattrr%   Ú	setCursorr   r   Z
WaitCursorZunsetCursor)ÚbuttonÚ	button_idZbutton_name©rY   ra   r\   r]   Úfunc†   s    

z&_QtDialog._dialog_create.<locals>.func)r_   r%   ZsetWindowTitleÚsetTextrz   ÚsetIconZsetInformativeTextÚlistÚappendZsetStandardButtonsZsetDefaultButtonrC   ÚbuttonClickedÚconnectÚ_QtDialogWidget)r[   ÚtitlerS   Z	info_textrY   rt   ru   rv   rw   Zicon_idZ
button_idsr|   r}   Zstandard_buttonsZdefault_buttonr   r\   r~   r]   Ú_dialog_createm   s,    








z_QtDialog._dialog_create)rj   rk   rl   ry   Zsupported_icon_namesrˆ   r\   r\   r\   r]   rm   a   s<                  ý    ÿ   ÿrm   c                   @   s0   e Zd Zdd„ Zddddœdd„Zdd	d
„ZdS )Ú	_QtLayoutc                 C   s   d S rR   r\   )r[   Ú	max_widthr\   r\   r]   Ú_layout_initialize—   s    z_QtLayout._layout_initializer   N)ÚrowÚcolc                C   s@   t |tƒr| |¡ n&t |tƒr0| |||¡ n| ||¡ dS )z#Add a widget to an existing layout.N)Ú
isinstancer   Z	addLayoutr"   Ú	addWidget)r[   Úlayoutra   ÚstretchrŒ   r�   r\   r\   r]   Ú_layout_add_widgetš   s
    

z_QtLayout._layout_add_widgetÚverticalc                 C   s6   |dkrt ƒ }n"|dkr tƒ }n|dks,t‚tƒ }|S )Nr“   Ú
horizontalÚgrid)r   r   ÚAssertionErrorr"   )r[   Úorientationr�   r\   r\   r]   Ú_layout_create¥   s    z_QtLayout._layout_create)r   )r“   )rj   rk   rl   r‹   r’   r˜   r\   r\   r\   r]   r‰   –   s    ÿr‰   c                   @   s  e Zd Zd4dd„Zdd„ Zdd	„ Zd
d„ Zd5dd„Zd6dd„Zddddœdd„Z	dddddœdd„Z
dddœdd„Zdddddœdd„Zdddœd d!„Zdddddd"œd#d$„Zdddd%œd&d'„Zddd(œd)d*„Zddd+œd,d-„Zddd.œd/d0„Zdddddddd1œd2d3„ZdS )7Ú_QtDockNÚControlsrO   c                 C   sl   |d kr| j n|}tt| ¡ › d�ƒ}t||||d�\| _| _|dkrX| tjtj	¡ n| tj
tj¡ d S )NZDockWidgetArea©rŠ   rO   )r_   rz   r   Ú
capitalizeÚ_create_dock_widgetÚ_dockÚ_dock_layoutZ	setCornerZBottomLeftCornerZLeftDockWidgetAreaZBottomRightCornerZRightDockWidgetArea)r[   rw   ÚnameÚarearŠ   Zqt_arear\   r\   r]   Ú_dock_initialize±   s       ÿz_QtDock._dock_initializec                 C   s(   | j  | j  ¡  ¡ d¡ |  | j¡ d S )Nr   )rž   ÚsetMinimumSizeZsizeHintÚwidthÚ_dock_add_stretchrŸ   rZ   r\   r\   r]   Ú_dock_finalize½   s    z_QtDock._dock_finalizec                 C   s   | j  ¡  d S rR   )rž   ÚshowrZ   r\   r\   r]   Ú
_dock_showÁ   s    z_QtDock._dock_showc                 C   s   | j  ¡  d S rR   )rž   ÚhiderZ   r\   r\   r]   Ú
_dock_hideÄ   s    z_QtDock._dock_hidec                 C   s   |d kr| j n|}| ¡  d S rR   )rŸ   Z
addStretch)r[   r�   r\   r\   r]   r¥   Ç   s    z_QtDock._dock_add_stretchTc                 C   s   |r
t ƒ ntƒ }|S rR   )r   r   )r[   r“   r�   r\   r\   r]   Ú_dock_add_layoutË   s    z_QtDock._dock_add_layoutF)Úalignr�   Ú
selectablec                C   s`   |d kr| j n|}tƒ }|r(| tj¡ | |¡ | d¡ |rL| tj¡ |  	||¡ t
|ƒS ©NT)rŸ   r   ÚsetAlignmentr   ÚAlignCenterr€   ZsetWordWrapZsetTextInteractionFlagsZTextSelectableByMouser’   Ú	_QtWidget)r[   Úvaluer¬   r�   r­   ra   r\   r\   r]   Ú_dock_add_labelÏ   s    

z_QtDock._dock_add_labelÚ
pushbutton)Ústylert   Útooltipr�   c                C   sŽ   t d|dd� |dkr(tƒ }| |¡ nt|ƒ}| d¡ |d k	rR| | j| ¡ t||ƒ |j 	|¡ |d krv| j
n|}|  ||¡ t|ƒS )Nrµ   )Ú
toolbuttonr´   )Z	parameterr²   Zallowed_valuesr·   z"QPushButton:pressed {color: none;})rE   r   r€   r$   ÚsetStyleSheetr�   Ú_iconsÚ_set_widget_tooltipZclickedr…   rŸ   r’   r±   )r[   r    rY   rµ   rt   r¶   r�   ra   r\   r\   r]   Ú_dock_add_buttonÝ   s&    ýÿ
z_QtDock._dock_add_button)r�   Úcompactc                C   sL   |d kr| j n|}|d k	rH|  | ¡}| j|| |d� |  ||¡ |}|S )N)r²   r¬   r�   )rŸ   r«   r³   r’   )r[   r    r�   r¼   Úhlayoutr\   r\   r]   Ú_dock_named_layoutù   s      ÿz_QtDock._dock_named_layout)r¼   Údoubler¶   r�   c                C   s    | j |||d�}|rtnt}	|r$tnt}
|	tjƒ}t||ƒ | |
|d ƒ¡ | 	|
|d ƒ¡ | 
|
|ƒ¡ |r€|j |¡ n|j |¡ |  ||¡ t|ƒS )N©r    r�   r¼   r   r&   )r¾   ÚQFloatSliderr   ÚfloatÚintr   Z
Horizontalrº   Ú
setMinimumÚ
setMaximumÚsetValueÚfloatValueChangedr…   ÚvalueChangedr’   r±   )r[   r    r²   ÚrngrY   r¼   r¿   r¶   r�   Zslider_classÚcastra   r\   r\   r]   Ú_dock_add_slider  s"      ÿ

z_QtDock._dock_add_slider)r¶   r�   c                C   sN   |d kr| j n|}t|ƒ}t||ƒ | |¡ |j |¡ |  ||¡ t|ƒS rR   )rŸ   r   rº   Ú
setCheckedZstateChangedr…   r’   r±   )r[   r    r²   rY   r¶   r�   ra   r\   r\   r]   Ú_dock_add_check_box  s    

z_QtDock._dock_add_check_box)r¼   r¿   Ústepr¶   r�   c                C   sâ   | j ||	|d�}	|r|nt|ƒ}|r*tƒ ntƒ }
t|
|ƒ |
 tj¡ |
 |d ¡ |
 	|d ¡ |
 
d¡ |d kr®|d |d  d }|sžttt|ƒƒdƒn|}|
 |¡ n
|
 |¡ |
 |¡ |
j |¡ |  |	|
¡ t|
ƒS )NrÀ   r   r&   Fg      4@)r¾   rÃ   r   r   rº   r¯   r   r°   rÄ   rÅ   ZsetKeyboardTrackingÚmaxÚroundZsetSingleSteprÆ   rÈ   r…   r’   r±   )r[   r    r²   rÉ   rY   r¼   r¿   rÎ   r¶   r�   ra   Úincr\   r\   r]   Ú_dock_add_spin_box   s*      ÿ



z_QtDock._dock_add_spin_box)r¼   r¶   r�   c          	      C   s`   | j |||d�}tƒ }t||ƒ | |¡ | |¡ |j |¡ | tj¡ |  	||¡ t
|ƒS )NrÀ   )r¾   r   rº   ZaddItemsÚsetCurrentTextZcurrentTextChangedr…   ZsetSizeAdjustPolicyZAdjustToContentsr’   r±   )	r[   r    r²   rÉ   rY   r¼   r¶   r�   ra   r\   r\   r]   Ú_dock_add_combo_box7  s      ÿ


z_QtDock._dock_add_combo_box)r“   r�   c                   sŽ   |d kr| j n|}|rtƒ ntƒ }tƒ }|D ]4}t|ƒ}	||krJ|	 d¡ | |	¡ |  ||	¡ q,‡ fdd„}
|j 	|
¡ |  ||¡ t
|ƒS )NTc                    s   ˆ |   ¡ ƒ d S rR   )rS   )r|   ©rY   r\   r]   r   P  s    z-_QtDock._dock_add_radio_buttons.<locals>.func)rŸ   r   r   r   r    rÌ   Z	addButtonr’   r„   r…   Ú_QtWidgetList)r[   r²   rÉ   rY   r“   r�   Zgroup_layoutÚgroupÚvalr|   r   r\   rÕ   r]   Ú_dock_add_radio_buttonsD  s    

z_QtDock._dock_add_radio_buttons)Úcollapser�   c                C   s:   |d kr| j n|}tƒ }t|ƒ}| |¡ |  ||¡ |S rR   )rŸ   r   r   Ú	setLayoutr’   )r[   r    rÚ   r�   r½   ra   r\   r\   r]   Ú_dock_add_group_boxV  s    
z_QtDock._dock_add_group_box)rY   r�   c                C   sL   |d kr| j n|}t|ƒ}| |¡ |  ||¡ |d k	rD|j |¡ t|ƒS rR   )rŸ   r!   ZsetPlaceholderTextr’   ZtextChangedr…   r±   )r[   r    r²   ÚplaceholderrY   r�   ra   r\   r\   r]   Ú_dock_add_text^  s    
z_QtDock._dock_add_text)ÚfilterÚinitial_directoryÚsaveÚis_directoryrt   r¶   r�   c                   s\   |
d kr| j n|
}
‡ ‡‡‡‡fdd„}|r8tddd�}ntƒ }| jf |||	|
dœ|—Ž}|S )Nc                     sf   ˆrt jˆd�} n"ˆr&t jˆˆ d�} nt jˆˆ d�} t| tƒrF| d n| } t| ƒdkrZd S ˆ| ƒ d S )N)Ú	directory)rã   rß   r   )r#   ZgetExistingDirectoryZgetSaveFileNameZgetOpenFileNamerŽ   Útuplere   )r    ©rß   r   rà   râ   rá   r\   r]   rY   n  s"    ÿþþz/_QtDock._dock_add_file_button.<locals>.callbackr·   Úfolder)rµ   rt   )r    rY   r¶   r�   )rŸ   r`   r»   )r[   r    Údescr   rß   rà   rá   râ   rt   r¶   r�   rY   ÚkwargsZbutton_widgetr\   rå   r]   Ú_dock_add_file_buttonh  s    üûz_QtDock._dock_add_file_button)Nrš   rO   N)N)T)rj   rk   rl   r¢   r¦   r¨   rª   r¥   r«   r³   r»   r¾   rË   rÍ   rÒ   rÔ   rÙ   rÜ   rÞ   ré   r\   r\   r\   r]   r™   °   sh       ÿ


  ÿ  þ  þÿ   þ ÿÿÿ     þr™   c                       s†   e Zd ZdZeeƒZd‡ fdd„	Zdd„ Z‡ fdd„Z	‡ fd	d
„Z
‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )rÁ   z!Slider that handles float values.Nc                    st   t ƒ  ||¡ tƒ | _|  | j¡ |  ¡  tj| jtj	| ¡| _
|  ¡  tj| jtj| ¡| _d| _t ƒ j | j¡ dS )zInitialize the slider.i'  N)ÚsuperÚ__init__r   Z_optÚinitStyleOptionrµ   ÚsubControlRectr   Ú	CC_SliderZSC_SliderGrooveZ_grÚSC_SliderHandleZ_srÚ
_precisionrÈ   r…   Ú_convert)r[   ZoriÚparent©Ú	__class__r\   r]   rë   –  s"       ÿ   ÿzQFloatSlider.__init__c                 C   s   | j  || j ¡ d S rR   )rÇ   Úemitrð   ©r[   r²   r\   r\   r]   rñ   ¢  s    zQFloatSlider._convertc                    s   t ƒ  ¡ | j S )zGet the minimum.)rê   Úminimumrð   rZ   ró   r\   r]   r÷   ¥  s    zQFloatSlider.minimumc                    s   t ƒ  t|| j ƒ¡ dS )zSet the minimum.N)rê   rÄ   rÃ   rð   rö   ró   r\   r]   rÄ   ©  s    zQFloatSlider.setMinimumc                    s   t ƒ  ¡ | j S )zGet the maximum.)rê   Úmaximumrð   rZ   ró   r\   r]   rø   ­  s    zQFloatSlider.maximumc                    s   t ƒ  t|| j ƒ¡ dS )zSet the maximum.N)rê   rÅ   rÃ   rð   rö   ró   r\   r]   rÅ   ±  s    zQFloatSlider.setMaximumc                    s   t ƒ  ¡ | j S )zGet the current value.)rê   r²   rð   rZ   ró   r\   r]   r²   µ  s    zQFloatSlider.valuec                    s   t ƒ  t|| j ƒ¡ dS )zSet the current value.N)rê   rÆ   rÃ   rð   rö   ró   r\   r]   rÆ   ¹  s    zQFloatSlider.setValuec                    s"  t ƒ }|  |¡ |  ¡  tj|tj| ¡}| ¡ tj	ksD| 
| ¡ ¡rTtƒ  |¡ dS |  ¡ tjkrˆd| ¡  d }|  ¡ }|| ¡  }n d| ¡  d }|  ¡ }| ¡ }|d|  }tt|| dƒ|ƒ| }|  ¡ |  ¡ |  ¡  |  }|  ¡ rü|  ¡ | n|}|  |¡ | ¡  tƒ  |¡ dS )zAdd snap-to-location handling.Ng      à?rB   r   )r   rì   rµ   rí   r   rî   rï   r|   r   Z
LeftButtonÚcontainsÚposrê   ÚmousePressEventr—   ZVerticalÚheightÚyr¤   ÚxÚminrÏ   r÷   rø   ZinvertedAppearancerÆ   Úaccept)r[   rW   ÚoptÚsrZhalfZmax_rú   rØ   ró   r\   r]   rû   ¿  s2    
   ÿ
zQFloatSlider.mousePressEvent)N)rj   rk   rl   Ú__doc__r   rÂ   rÇ   rë   rñ   r÷   rÄ   rø   rÅ   r²   rÆ   rû   Ú__classcell__r\   r\   ró   r]   rÁ   ‘  s   rÁ   c                   @   sZ   e Zd Zddd„Zdddœdd„Zdd	„ Zd
d„ Zdd„ Zddœdd„Zddœdd„Z	dS )Ú
_QtToolBarÚdefaultNc                 C   s6   t ƒ | _|d kr| jn|}| |¡| _| j ¡ | _d S rR   )r`   Úactionsr_   Z
addToolBarÚ	_tool_barr�   Z_tool_bar_layout)r[   r    rw   r\   r\   r]   Ú_tool_bar_initializeÛ  s    z_QtToolBar._tool_bar_initialize)Ú	icon_namerg   c                C   sP   |d kr|n|}| j | }t| j |||¡ƒ| j|< |d k	rL| j|  |¡ d S rR   )r¹   Ú	_QtActionr  Ú	addActionr  Úset_shortcut)r[   r    rç   r   r
  rg   rt   r\   r\   r]   Ú_tool_bar_add_buttoná  s    
  ÿz_QtToolBar._tool_bar_add_buttonc                 C   s   | j |  | j| ¡ d S rR   )r  Úset_iconr¹   )r[   r    r
  r\   r\   r]   Ú_tool_bar_update_button_iconê  s    z'_QtToolBar._tool_bar_update_button_iconc                 C   s   d S rR   r\   )r[   r    r²   rÝ   r\   r\   r]   Ú_tool_bar_add_textí  s    z_QtToolBar._tool_bar_add_textc                 C   s&   t ƒ }| tjtj¡ | j |¡ d S rR   )r   ÚsetSizePolicyr   Ú	ExpandingZ	Preferredr  r�   )r[   Zspacerr\   r\   r]   Ú_tool_bar_add_spacerð  s    z_QtToolBar._tool_bar_add_spacer)rg   c                   s0   t  | ¡}|f‡ fdd„	}| j||||d� d S )Nc                    s    | ƒ } | d krd S t | jˆ d�S )NrÕ   )r   r_   )Úweakself©r   r\   r]   rY   ø  s    þz6_QtToolBar._tool_bar_add_file_button.<locals>.callback)r    rç   r   rg   )ÚweakrefÚrefr  )r[   r    rç   r   rg   r  rY   r\   r  r]   Ú_tool_bar_add_file_buttonõ  s    
	üz$_QtToolBar._tool_bar_add_file_buttonc                C   s   | j |||d |d� d S )N)r    rç   r   r
  rg   )r  )r[   r    rç   r   rg   r\   r\   r]   Ú_tool_bar_add_play_button  s        ÿz$_QtToolBar._tool_bar_add_play_button)r  N)
rj   rk   rl   r	  r  r  r  r  r  r  r\   r\   r\   r]   r  Ú  s   
ÿ	r  c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	Ú
_QtMenuBarNc                 C   sF   t ƒ | _t ƒ | _tƒ | _| j d¡ |d kr2| jn|}| | j¡ d S )NF)r`   Ú_menusÚ_menu_actionsr   Ú	_menu_barZsetNativeMenuBarr_   Z
setMenuBar©r[   rw   r\   r\   r]   Ú_menu_initialize  s    z_QtMenuBar._menu_initializec                 C   s"   | j  |¡| j|< tƒ | j|< d S rR   )r  ZaddMenur  r`   r  )r[   r    rç   r\   r\   r]   Ú_menu_add_submenu  s    z_QtMenuBar._menu_add_submenuc                 C   s(   | j | }t| ||¡ƒ| j| |< d S rR   )r  r  r  r  )r[   Z	menu_namer    rç   r   Zmenur\   r\   r]   Ú_menu_add_button  s    
ÿz_QtMenuBar._menu_add_button)N)rj   rk   rl   r   r!  r"  r\   r\   r\   r]   r    s   
r  c                   @   s6   e Zd Zddd„Zddœdd„Zddd	„Zd
d„ ZdS )Ú_QtStatusBarNc                 C   s    |d kr| j n|}| ¡ | _d S rR   )r_   Z	statusBarÚ_status_barr  r\   r\   r]   Ú_status_bar_initialize!  s    z#_QtStatusBar._status_bar_initializer   )r‘   c                C   s$   t |ƒ}|  | j ¡ ||¡ t|ƒS rR   )r   r’   r$  r�   r±   )r[   r²   r‘   ra   r\   r\   r]   Ú_status_bar_add_label%  s    z"_QtStatusBar._status_bar_add_labelc                 C   s"   t ƒ }|  | j ¡ ||¡ t|ƒS rR   )r   r’   r$  r�   r±   )r[   r‘   ra   r\   r\   r]   Ú_status_bar_add_progress_bar*  s    z)_QtStatusBar._status_bar_add_progress_barc                 C   s   | j  ¡  ¡  d S rR   )r$  r�   ÚupdaterZ   r\   r\   r]   Ú_status_bar_update/  s    z_QtStatusBar._status_bar_update)N)r   )rj   rk   rl   r%  r&  r'  r)  r\   r\   r\   r]   r#     s   

r#  c                   @   s   e Zd Zdd„ ZdS )Ú_QtPlaybackc                 C   s   | j j ||¡ d S rR   )ÚfigureÚplotterZadd_callback)r[   r   Útimeoutr²   rÉ   Ztime_widgetZplay_widgetr\   r\   r]   Ú_playback_initialize4  s    z _QtPlayback._playback_initializeN)rj   rk   rl   r.  r\   r\   r\   r]   r*  3  s   r*  c                   @   s   e Zd Zdd„ ZdS )Ú_QtMplInterfacec                 C   sL   ddl m} ddlm} || jƒ| _| | j|jj|jj¡ | 	| j¡ d S )Nr   )Ú	QtWidgets)ÚFigureCanvasQTAgg)
Zqtpyr0  Z"matplotlib.backends.backend_qt5aggr1  ZfigÚcanvasr  r   r  ÚupdateGeometry)r[   r0  r1  r\   r\   r]   Ú_mpl_initialize:  s    ýz_QtMplInterface._mpl_initializeN)rj   rk   rl   r4  r\   r\   r\   r]   r/  9  s   r/  c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_QtMplCanvasc                    s   t ƒ  |||¡ |  ¡  d S rR   )rê   rë   r4  ©r[   r¤   rü   Údpiró   r\   r]   rë   G  s    z_QtMplCanvas.__init__©rj   rk   rl   rë   r  r\   r\   ró   r]   r5  F  s   r5  c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_QtBrainMplCanvasc                    sJ   t ƒ  ||||¡ |  ¡  |jr.| j d ¡ n| j |jj¡ |  ¡  d S rR   )	rê   rë   r4  Úseparate_canvasr2  Z	setParentZ	_rendererr_   Ú_connect)r[   Úbrainr¤   rü   r7  ró   r\   r]   rë   M  s    z_QtBrainMplCanvas.__init__r8  r\   r\   ró   r]   r9  L  s   r9  c                       s¬   e Zd Zddddœ‡ fdd„
Zdd„ Zdd	„ Zd
dœdd„Zd&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d d!„ ƒZd'd"d#„Zd$d%„ Z‡  ZS )(Ú	_QtWindowNF)rw   Úcentral_layoutÚ
fullscreenc                   sÖ   t ƒ  ¡  ˆ jjjˆ _|d kr,ˆ jjjˆ _n|ˆ _|rDˆ j t	j
¡ |d k	rzˆ j ¡ }|d krptƒ }ˆ j |¡ | |¡ ˆ  ¡  ˆ  ¡  ˆ j ttjjƒ¡ ˆ jj ˆ j¡ tƒ ˆ _tƒ ˆ _‡ fdd„}|ˆ j_d S )Nc                    s`   d}ˆ j D ]}|ƒ }t|tƒr
|s
d}q
|rBˆ jj ¡  |  ¡  n|  ¡  ˆ jD ]
}|ƒ  qPd S )NTF)	Ú_window_before_close_callbacksrŽ   Úboolr_   Úsignal_closerõ   r   ÚignoreÚ_window_after_close_callbacks)rW   Zaccept_close_eventrY   ÚretrZ   r\   r]   Ú
closeEvents  s    


z0_QtWindow._window_initialize.<locals>.closeEvent)rê   Ú_window_initializer+  r,  Z
interactorÚ_interactorÚ
app_windowr_   ZsetWindowStater   ZWindowFullScreenZcentralWidgetr   ZsetCentralWidgetrÛ   Ú_window_load_iconsÚ_window_set_themeZ	setLocaler   ZLanguageZEnglishrB  r…   Ú_window_cleanr‚   r@  rD  rF  )r[   rw   r>  r?  Zcentral_widgetrF  ró   rZ   r]   rG  X  s*    


z_QtWindow._window_initializec                 C   sÄ   t  d¡| jd< t  d¡| jd< t  d¡| jd< t  d¡| jd< t  d¡| jd< t  d¡| jd< t  d¡| jd< t  d¡| jd< t  d	¡| jd	< t  d
¡| jd
< t  d¡| jd< t  d¡| jd< d S )NÚhelpZplayÚpauseÚresetÚscaleÚclearZmovieZrestoreZ
screenshotZvisibility_onZvisibility_offræ   )r
   Z	fromThemer¹   rZ   r\   r\   r]   rJ  ‡  s    z_QtWindow._window_load_iconsc                 C   s   d | j _d | _d S rR   )r+  Z_plotterrH  rZ   r\   r\   r]   rL  •  s    z_QtWindow._window_cleanT)Úafterc                C   s"   |r| j  |¡ n| j |¡ d S rR   )rD  rƒ   r@  )r[   r   rR  r\   r\   r]   Ú_window_close_connect™  s    z_QtWindow._window_close_connectc                 C   s   |r| j  ¡  n
| j ¡  d S rR   )rD  rQ  r@  )r[   rR  r\   r\   r]   Ú_window_close_disconnectŸ  s    z"_QtWindow._window_close_disconnectc                 C   s   | j  ¡  ¡  ¡ S rR   )r_   ZwindowHandleÚscreenZlogicalDotsPerInchrZ   r\   r\   r]   Ú_window_get_dpi¥  s    z_QtWindow._window_get_dpic                 C   s$   | j  ¡  ¡ }| j  ¡  ¡ }||fS rR   )rH  Zgeometryr¤   rü   )r[   ÚwÚhr\   r\   r]   Ú_window_get_size¨  s    z_QtWindow._window_get_sizec                 C   s   t |||ƒS rR   )r5  r6  r\   r\   r]   Ú_window_get_simple_canvas­  s    z#_QtWindow._window_get_simple_canvasc                 C   s:   |   |¡\}}|| _|| _|| _t||||  ¡ ƒ| _| jS rR   )Z_window_get_mplcanvas_sizeÚ_interactor_fractionÚ_show_tracesÚ_separate_canvasr9  rV  Ú
_mplcanvas)r[   r<  Zinteractor_fractionZshow_tracesr:  rW  rX  r\   r\   r]   Ú_window_get_mplcanvas°  s       ÿz_QtWindow._window_get_mplcanvasc                 C   s,   | j j}t| jdtjƒ\| _}| |¡ d S )NZTraces)r^  r2  r�   r_   r   ZBottomDockWidgetAreaÚ	_mpl_dockr�   )r[   r2  Údock_layoutr\   r\   r]   Ú_window_adjust_mplcanvas_layoutº  s      ÿ
z)_QtWindow._window_adjust_mplcanvas_layoutc                 C   s
   | j  ¡ S rR   )r_   ÚcursorrZ   r\   r\   r]   Ú_window_get_cursorÀ  s    z_QtWindow._window_get_cursorc                 C   s   | j  |¡ | j |¡ d S rR   )rH  r{   r_   )r[   rc  r\   r\   r]   Ú_window_set_cursorÃ  s    z_QtWindow._window_set_cursorc                 C   s   t tt|ƒƒS rR   )r   rz   r   )r[   r    r\   r\   r]   Ú_window_new_cursorÇ  s    z_QtWindow._window_new_cursorc                 c   sR  | j jd }| jo| j }| jj|Ž  |rttt|d | j d| j  ƒƒ}| j	j
 |d |¡ | j ¡  |d |¡ z
d V  W 5 |  ¡  |  ¡  | j ¡ }| j ¡ }| j dd¡ |rØ| j	j
 dd¡ | j ¡  dd¡ |  ¡  |  ¡  | ¡ }|�r|t| j ¡  ¡  ¡ | dƒ7 }| ¡ |f| j_| j | ¡ | ¡ ¡ |  ¡  |  ¡  X d S )NÚwindow_sizer&   r   )r+  Ústorer\  r]  rH  r£   rÃ   rÐ   r[  r^  r2  r`  ra   Ú_process_eventsr_   Úsizerü   rÏ   r¤   rg  Úresize)r[   ÚszZ
adjust_mplZmpl_hZwin_szZren_szZwin_hr\   r\   r]   Ú_window_ensure_minimum_sizesÊ  s>    ÿ


 ÿz&_QtWindow._window_ensure_minimum_sizesc                 C   sV   |d krt ƒ }n|}td|ƒ}t|ƒ}| j |¡ t| jƒrHt d¡ n
t d¡ d S )NZMNE_3D_OPTION_THEMEZdarkZlight)r@   rF   r>   r_   r¸   r?   r
   ZsetThemeName)r[   ÚthemeZdefault_themeÚ
stylesheetr\   r\   r]   rK  ø  s    

z_QtWindow._window_set_themec                 C   s   t ƒ S rR   )Ú_MNEMainWindowrZ   r\   r\   r]   Ú_window_create  s    z_QtWindow._window_create)T)N)rj   rk   rl   rG  rJ  rL  rS  rT  rV  rY  rZ  r_  rb  rd  re  rf  r   rm  rK  rq  r  r\   r\   ró   r]   r=  W  s(     ÿ/


-
r=  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
rÖ   c                 C   sV   || _ tƒ | _t| j tƒr&| j  ¡ }n|}|D ]"}t|tƒsDt|ƒ}| j |¡ q.d S rR   )Ú_srcr‚   Ú_widgetsrŽ   r   ru   r±   rƒ   )r[   ÚsrcZwidgetsra   r\   r\   r]   rë   
  s    
z_QtWidgetList.__init__c                 C   s   | j D ]}| |¡ qd S rR   )rs  Úset_enabled)r[   Ústatera   r\   r\   r]   ru    s    
z_QtWidgetList.set_enabledc                 C   s   | j |  ¡ S rR   )rs  Ú	get_value)r[   Úidxr\   r\   r]   rw    s    z_QtWidgetList.get_valuec                 C   s2   t | jtƒr| j|  d¡ n| j|  |¡ d S r®   )rŽ   rr  r   rs  Ú	set_value)r[   rx  r²   r\   r\   r]   ry    s    z_QtWidgetList.set_valueN)rj   rk   rl   rë   ru  rw  ry  r\   r\   r\   r]   rÖ   	  s   rÖ   c                   @   sf   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d„Z
dd„ Zdd„ Zdd„ ZdS )r±   c                 C   sŒ   t | jtttfƒr| j ¡  njt| jdƒr8| j |¡ nPt| jdƒrR| j |¡ n6t| jdƒrl| j 	|¡ nt| jdƒs|t
‚| j |¡ d S )NrÆ   rÓ   rÌ   r€   )rŽ   Ú_widgetr    r   r$   ÚclickÚhasattrrÆ   rÓ   rÌ   r–   r€   rö   r\   r\   r]   ry  %  s    z_QtWidget.set_valuec                 C   sf   t | jdƒr| j ¡ S t | jdƒr,| j ¡ S t | jdƒrH| j ¡ tjkS t | jdƒsXt‚| j ¡ S d S )Nr²   ÚcurrentTextÚ
checkStaterS   )	r|  rz  r²   r}  r~  r   Z	Uncheckedr–   rS   rZ   r\   r\   r]   rw  3  s    

z_QtWidget.get_valuec                 C   s   | j  |d |d ¡ d S )Nr   r&   )rz  ZsetRange)r[   rÉ   r\   r\   r]   Ú	set_range>  s    z_QtWidget.set_rangec                 C   s   | j  ¡  d S rR   )rz  r§   rZ   r\   r\   r]   r§   A  s    z_QtWidget.showc                 C   s   | j  ¡  d S rR   )rz  r©   rZ   r\   r\   r]   r©   D  s    z_QtWidget.hidec                 C   s   | j  |¡ d S rR   )rz  Z
setEnabled)r[   rv  r\   r\   r]   ru  G  s    z_QtWidget.set_enabledc                 C   s
   | j  ¡ S rR   )rz  Z	isEnabledrZ   r\   r\   r]   Ú
is_enabledJ  s    z_QtWidget.is_enabledTc                 C   s   | j  ¡  |r| j  ¡  d S rR   )rz  r(  Úrepaint)r[   r�  r\   r\   r]   r(  M  s    
z_QtWidget.updatec                 C   s   t | jdƒst‚| j ¡ S )NÚtoolTip)r|  rz  r–   r‚  rZ   r\   r\   r]   Úget_tooltipR  s    z_QtWidget.get_tooltipc                 C   s    t | jdƒst‚| j |¡ d S )NÚ
setToolTip)r|  rz  r–   r„  )r[   r¶   r\   r\   r]   Úset_tooltipV  s    z_QtWidget.set_tooltipc                 C   s:   d}|  ¡ D ]\}}||› d|› d� }q| j |¡ d S )NÚ ú:ú;)Úitemsrz  r¸   )r[   rµ   ro  rV   rØ   r\   r\   r]   Ú	set_styleZ  s    z_QtWidget.set_styleN)T)rj   rk   rl   ry  rw  r  r§   r©   ru  r€  r(  rƒ  r…  rŠ  r\   r\   r\   r]   r±   $  s   
r±   c                       s$   e Zd Zeƒ Zd‡ fdd„	Z‡  ZS )Ú_QtDialogCommunicatorNc                    s   t ƒ  |¡ d S rR   )rê   rë   )r[   rò   ró   r\   r]   rë   d  s    z_QtDialogCommunicator.__init__)N)rj   rk   rl   r   Úsignal_showrë   r  r\   r\   ró   r]   r‹  a  s   r‹  c                       s.   e Zd Z‡ fdd„Zdd„ Zddd„Z‡  ZS )	r†   c                    s.   t ƒ  |¡ || _tƒ | _| jj | j¡ d S rR   )rê   rë   Ú_modalr‹  Ú_communicatorrŒ  r…   r§   )r[   ra   rv   ró   r\   r]   rë   i  s    z_QtDialogWidget.__init__c                 C   s6   t t|ƒ}| j ¡ D ]}| j |¡|kr| ¡  qd S rR   )rz   r%   rz  ru   rx   r{  )r[   r|   r}   Zcurrent_buttonr\   r\   r]   Útriggero  s    
z_QtDialogWidget.triggerFc                 C   s2   |r| j j ¡  n| jr$| j ¡  n
| j ¡  d S rR   )rŽ  rŒ  rõ   r�  rz  Úexecr§   )r[   Úthreadr\   r\   r]   r§   u  s
    z_QtDialogWidget.show)F)rj   rk   rl   rë   r�  r§   r  r\   r\   ró   r]   r†   h  s   r†   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r  c                 C   s   | j  ¡  d S rR   )Ú_actionr�  rZ   r\   r\   r]   r�  €  s    z_QtAction.triggerc                 C   s   | j  |¡ d S rR   )r’  r�   )r[   rt   r\   r\   r]   r  ƒ  s    z_QtAction.set_iconc                 C   s   | j  |¡ d S rR   )r’  ZsetShortcut)r[   rg   r\   r\   r]   r  †  s    z_QtAction.set_shortcutN)rj   rk   rl   r�  r  r  r\   r\   r\   r]   r    s   r  c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú	_RendererZqtc                    s*   |  dd¡}tƒ j||Ž | j|d� d S )Nr?  F)r?  )Úpoprê   rë   rG  )r[   Úargsrè   r?  ró   r\   r]   rë   �  s    z_Renderer.__init__c              
      s–   t ƒ  ¡  t| jƒ�& |  ¡ � | jj ¡  W 5 Q R X W 5 Q R X |  ¡  | jD ]}| ¡  | 	¡  qN|  
¡  t| jddƒ}|r†| ¡  t| jjƒ d S )NÚsplashF)rê   r§   r=   r,  rm  rI  Ú_updateZ_all_plottersr3  Ú_renderri  rz   r+  ÚcloserA   )r[   r,  r–  ró   r\   r]   r§   ”  s    

 

z_Renderer.show)rj   rk   rl   Ú_kindrë   r§   r  r\   r\   ró   r]   r“  Š  s   r“  c                 C   s   |d k	r|   |¡ d S rR   )r„  )ra   r¶   r\   r\   r]   rº   ª  s    rº   r›   c          
      C   s®   t |ƒ}t|ƒ}| |¡ t|ƒ}| |¡ | d¡ | |¡ | t|ƒ¡ |  ||¡ t	ƒ }| 
|¡ dg}|d k	rŠ| d|› d�¡ dd |¡ d }	| |	¡ ||fS )NTzmargin: 4px;zmax-width: rˆ  zQDockWidget { z  
z
})r   r   Z	setWidgetr   ZsetWidgetResizableZsetAllowedAreasZsetTitleBarWidgetr   ZaddDockWidgetr   rÛ   rƒ   Újoinr¸   )
rw   r    r¡   rŠ   ZdockÚscrollra   ra  ÚstylesZstyle_sheetr\   r\   r]   r�   ¯  s"    





r�   c                 c   sf   ddl m} tj}|j}|j}d|_| r6dt_d|_ndt_d|_z
d V  W 5 |t_||_||_X d S )Nr&   )ÚrendererTF)r†  rž  ÚpyvistaZ
OFF_SCREENZMNE_3D_BACKEND_TESTINGZMNE_3D_BACKEND_INTERACTIVE)Úinteractiverž  Zorig_offscreenZorig_testingZorig_interactiver\   r\   r]   Ú_testing_contextÈ  s    
r¡  c                       s   e Zd Zd‡ fdd„	Z‡  ZS )rp  Nc                    s"   t ƒ  |||¡ |  tjd¡ d S r®   )rê   rë   ZsetAttributer   ZWA_ShowWithoutActivating)r[   rò   r‡   rj  ró   r\   r]   rë   ä  s    z_MNEMainWindow.__init__)NNNr8  r\   r\   ró   r]   rp  ã  s   rp  )or  Ú
contextlibr   ÚosÚplatformÚsysr  rŸ  Zpyvistaqt.plottingr   r   Zqtpy.QtCorer   r   r   r   r	   Z
qtpy.QtGuir
   r   Zqtpy.QtWidgetsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Z_pyvistar'   r(   r)   r*   r+   r,   r-   Z	_abstractr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   Z_utilsr=   r>   r?   r@   rA   ÚutilsrC   rE   rF   ÚfixesrG   Úmac_verÚversionÚsegmentsÚenvironÚ
setdefaultrL   rm   r‰   r™   rÁ   r  r  r#  r*  r/  r5  r9  r=  rÖ   r±   r‹  r†   r  r“  rº   r�   r¡  rp  r\   r\   r\   r]   Ú<module>   sn   p Dÿþ05 bI3 3=   þ 
