
    G@dC                        d Z ddlZddlmZ ddl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 ddlmZmZ ddlmZ dd	lmZmZmZmZ dd
l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& ddl'm(Z(  G d de          Z)dS )z
Application Plugin.
    N)Slot)QMenu)PluginsSpyderPluginV2_)on_plugin_availableon_plugin_teardown)MENU_SEPARATOR)DEVget_module_pathget_debug_levelrunning_under_pytest)ApplicationConfigPage)ApplicationActionsApplicationContainerApplicationPluginMenus)ConsoleActions)ApplicationMenusFileMenuSectionsHelpMenuSectionsToolsMenuSections)add_actionsc                      e Zd ZdZej        ej        gZej        ej	        ej
        ej        ej        gZeZdZdZeZdZed             Zd Zd Zd Z eej
                  d	             Z eej                  d
             Z eej                  d             Z eej	                  d             Z eej                  d             Z eej                  d             Z  e!ej                  d             Z" e!ej                  d             Z# e!ej                  d             Z$ e!ej                  d             Z% e!ej	                  d             Z&d6dZ'd Z(d Z)d Z*d Z+d Z,d Z-d Z.e/d             Z0d Z1d Z2d  Z3d! Z4d" Z5d# Z6d7d%Z7d& Z8d' Z9 e:            d8d(            Z;e/d)             Z<e/d*             Z=e/d+             Z>e/d,             Z?e/d-             Z@e/d.             ZAe/d/             ZBe/d0             ZCe/d1             ZDe/d2             ZEe/d3             ZFe/d4             ZGe/d5             ZHd$S )9ApplicationapplicationmainFc                       t          d          S )Nr   r        Alib/python3.11/site-packages/spyder/plugins/application/plugin.pyget_namezApplication.get_name1   s    r    c                 ,    |                      d          S )Ngenprefs)create_iconselfs    r!   get_iconzApplication.get_icon5   s    
+++r    c                      t          d          S )Nz&Provide main application base actions.r   r&   s    r!   get_descriptionzApplication.get_description8   s    9:::r    c                     |                                  }|j                            | j                   |                    | j                   d S N)get_containersig_report_issue_requestedconnectreport_issue
set_window_window)r'   	containers     r!   on_initializezApplication.on_initialize;   sI    &&((	,44T5FGGGT\*****r    )pluginc                 p    |                      t          j                  r|                                  d S d S r,   )is_plugin_availabler   MainMenu_populate_help_menur&   s    r!   on_shortcuts_availablez"Application.on_shortcuts_availableA   s=    ##G$455 	'$$&&&&&	' 	'r    c                 |    |                      t          j                  r| j                            d           d S d S )NTr7   r   r8   report_action
setVisibler&   s    r!   on_console_availablez Application.on_console_availableF   sB    ##G$455 	0))$/////	0 	0r    c                 n    |                      t          j                  }|                    |            d S r,   )
get_pluginr   Preferencesregister_plugin_preferencesr'   preferencess     r!   on_preferences_availablez$Application.on_preferences_availableK   s2     oog&9:://55555r    c                    |                                   |                                  |                     t          j                  r4|                     t          j                  r|                                  n|                                  |                     t          j                  s| j        	                    d           d S d S NF)
_populate_file_menu_populate_tools_menuis_plugin_enabledr   	Shortcutsr7   r9   Consoler=   r>   r&   s    r!   on_main_menu_availablez"Application.on_main_menu_availableQ   s      """!!###!!'"344 	'''(9:: +((***$$&&&''88 	1))%00000	1 	1r    c                     |                      t          j                  }|                                 j                            |j                   d S r,   )rA   r   Editorr-   sig_load_log_filer/   loadr'   editors     r!   on_editor_availablezApplication.on_editor_available_   s@    00.66v{CCCCCr    c                     | j         r;|                     t          j                  }|                    | j                    d S d S r,   )application_update_statusrA   r   	StatusBaradd_status_widgetr'   	statusbars     r!   on_statusbar_availablez"Application.on_statusbar_availabled   sM     ) 	H(9::I''(FGGGGG	H 	Hr    c                     | j         r@|                     t          j                  }|                    | j         j                   d S d S r,   )rW   rA   r   rX   remove_status_widgetIDrZ   s     r!   on_statusbar_teardownz!Application.on_statusbar_teardownm   sP     ) 	N(9::I**4+I+LMMMMM	N 	Nr    c                 n    |                      t          j                  }|                    |            d S r,   )rA   r   rB   deregister_plugin_preferencesrD   s     r!   on_preferences_teardownz#Application.on_preferences_teardownt   s0    oog&9::11$77777r    c                     |                      t          j                  }|                                 j                            |j                   d S r,   )rA   r   rP   r-   rQ   
disconnectrR   rS   s     r!   on_editor_teardownzApplication.on_editor_teardowny   s@    00.99&+FFFFFr    c                 |    |                      t          j                  r| j                            d           d S d S rH   r<   r&   s    r!   on_console_teardownzApplication.on_console_teardown~   sB    ##G$455 	1))%00000	1 	1r    c                     |                                   |                                  |                                  | j                            d           d S rH   )_depopulate_file_menu_depopulate_tools_menu_depopulate_help_menur=   r>   r&   s    r!   on_main_menu_teardownz!Application.on_main_menu_teardown   sU    ""$$$##%%%""$$$%%e,,,,,r    Tc                 R    |                                                                   d S r,   )r-   on_close)r'   _unuseds     r!   ro   zApplication.on_close   s&    %%'''''r    c                 >   |                                  }t                      s|                                 t          2|                     d          rd|_        |                    d           t          j        dk    s| j	        
                                }|j                            |j                   | j	        
                                                                }|                                |_        |j                            |j                   dS dS )z(Actions after the mainwindow in visible.Ncheck_updates_on_startupFT)startupdarwin)r-   r   compute_dependenciesr   get_confgive_updates_feedbackcheck_updatessysplatformr2   windowHandlescreenChangedr/   handle_new_screenscreenlogicalDotsPerInchcurrent_dpilogicalDotsPerInchChangedshow_dpi_change_message)r'   r3   windowr~   s       r!   on_mainwindow_visiblez!Application.on_mainwindow_visible   s   &&((	 $%% 	-**,,, ;4==)CDD;.3I+##D#111 |x''\..00F (()DEEE\..007799F$*$=$=$?$?I!,4413 3 3 3 3 ('r    c                    |                      t          j                  }|                    | j        t
          j        t          j                   |                    | j	        t
          j        t          j                   d S )Nmenu_idsection)
rA   r   r8   add_item_to_application_menurestart_actionr   Filer   Restartrestart_debug_actionr'   mainmenus     r!   rI   zApplication._populate_file_menu   s    ??7#344--$)$, 	. 	. 	. 	. 	--%$)$, 	. 	. 	. 	. 	. 	.r    c                 0   |                      t          j                  }|                    | j        t
          j        t          j                   t                      dk    r3|                    | j	        t
          j        t          j
                   dS dS )-Add base actions and menus to the Tools menu.r      N)rA   r   r8   r   user_env_actionr   Toolsr   r   debug_logs_menuExtrasr   s     r!   rJ   z Application._populate_tools_menu   s    ??7#344-- $*%+ 	. 	- 	- 	-
 !!11$(.)0 2 2 2 2 2 2 "!r    c                 ~    |                                   |                                  |                                  dS )z,Add base actions and menus to the Help menu.N))_populate_help_menu_documentation_section#_populate_help_menu_support_section!_populate_help_menu_about_sectionr&   s    r!   r9   zApplication._populate_help_menu   s>    6688800222..00000r    c                 6   |                      t          j                  }|                      t          j                  }d}|rddlm} |j        }| j        | j        fD ]:}|	                    |t          j        t          j        |t          j                   ;dS )z<Add base Spyder documentation actions to the Help main menu.Nr   ShortcutActions)r   r   beforebefore_section)rA   r   r8   rL   spyder.plugins.shortcuts.pluginr   ShortcutSummaryActiondocumentation_actionvideo_actionr   r   Helpr   DocumentationSupport)r'   r   	shortcutsshortcuts_summary_actionr   r   s         r!   r   z5Application._populate_help_menu_documentation_section   s    ??7#344OOG$566	#'  	MGGGGGG'6'L$)4+<%> 	9 	9 11$(-(6//7 2 9 9 9 9	9 	9r    c                     |                      t          j                  }| j        | j        | j        | j        | j        fD ]9}|                    |t          j
        t          j        t          j                   :dS )z6Add Spyder base support actions to the Help main menu.)r   r   r   N)rA   r   r8   trouble_actionr=   dependencies_actioncheck_updates_actionsupport_group_actionr   r   r   r   r   ExternalDocumentationr'   r   support_actions      r!   r   z/Application._populate_help_menu_support_section   s    ??7#344#T%7($*C)+ 	G 	GN 11(-(0/E	 2 G G G G		G 	Gr    c                     |                      t          j                  }|                    | j        t
          j        t          j                   dS )z!Create Spyder base about actions.r   N)	rA   r   r8   r   about_actionr   r   r   Aboutr   s     r!   r   z-Application._populate_help_menu_about_section   sO    ??7#344--$)$* 	. 	, 	, 	, 	, 	,r    c                 4    | j                                         S r,   )r   r   r&   s    r!   r2   zApplication._window   s    y!!!r    c                 ~    |                                   |                                  |                                  d S r,   )+_depopulate_help_menu_documentation_section%_depopulate_help_menu_support_section#_depopulate_help_menu_about_sectionr&   s    r!   rl   z!Application._depopulate_help_menu   s>    88:::224440022222r    c                     |                      t          j                  }t          j        t          j        fD ]#}|                    |t          j                   $d S Nr   )	rA   r   r8   r   SpyderDocumentationActionSpyderDocumentationVideoAction!remove_item_from_application_menur   r   )r'   r   r   s      r!   r   z7Application._depopulate_help_menu_documentation_section   sl    ??7#344"<"A%C 	/ 	/  66$(- 7 / / / /	/ 	/r    c                     |                      t          j                  }t          j        t
          j        t          j        t          j        t          j	        fD ]#}|
                    |t          j                   $dS )z;Remove Spyder base support actions from the Help main menu.r   N)rA   r   r8   r   SpyderTroubleshootingActionr   SpyderReportActionSpyderDependenciesActionSpyderCheckUpdatesActionSpyderSupportActionr   r   r   r   s      r!   r   z1Application._depopulate_help_menu_support_section   s|    ??7#344">1";";"68 	/ 	/N 66(- 7 / / / /	/ 	/r    c                     |                      t          j                  }|                    t          j        t          j                   d S r   )rA   r   r8   r   r   SpyderAboutr   r   r   s     r!   r   z/Application._depopulate_help_menu_about_section  sI    ??7#34422*$) 	3 	+ 	+ 	+ 	+ 	+r    c                     |                      t          j                  }t          j        t          j        fD ]#}|                    |t          j                   $d S r   )	rA   r   r8   r   SpyderRestartSpyderRestartDebugr   r   r   )r'   r   	action_ids      r!   rj   z!Application._depopulate_file_menu  si    ??7#344,:,?A 	/ 	/I66(- 7 / / / /	/ 	/r    c                    |                      t          j                  }|                    t          j        t          j                   t                      dk    r-|                    t          j
        t          j                   dS dS )r   r   r   N)rA   r   r8   r   r   SpyderUserEnvVariablesr   r   r   r   DebugLogsMenur   s     r!   rk   z"Application._depopulate_tools_menu  s    ??7#344225$* 	3 	, 	, 	, !!66&4(. 7 0 0 0 0 0 "!r    Nc                    d}d}|                      t          j                  }|                      t          j                  }t	          |          }| j        g}|r&ddlm} |                    |j	                  }||gz  }|r5ddl
m}	 |                    |	j                  }|                    |           |t          | j        gz  }t!          ||           |S )zV
        Return menu with the actions to be shown by the Spyder context menu.
        N)parentr   )HelpActionsr   )rA   r   r   rL   r   r   spyder.plugins.help.pluginr   
get_actionShowSpyderTutorialActionr   r   r   appendr   r   r   )
r'   r   tutorial_actionshortcuts_actionhelp_pluginr   menuactionsr   r   s
             r!   get_application_context_menuz(Application.get_application_context_menu)  s    oogl33OOG$566	F###,- 	)>>>>>>)4446 6O((G 	-GGGGGG(335 7  7NN+,,,ND$566D'"""r    c                     |                      t          j                  r5|                     t          j                  }|                                 d S d S r,   )r7   r   rM   rA   r0   )r'   consoles     r!   r0   zApplication.report_issueG  sO    ##GO44 	#oogo66G  """""	# 	#r    c                 8    | j                                          dS )zApply applications settings.N)_mainapply_settingsr&   s    r!   r   zApplication.apply_settingsL  s    
!!#####r    c                 |   |                      t          j                  }t          d          }t	          j        |dd          }t          j                                        }|	                    dd          }|	                    d          }t          j
                    }	t          j        }
||}d}nd}||d<   t          |	          |d	<   t          |          |d
<   t          j        dk    r0t          j                    }|xj        t          j        z  c_        d}nd}d}d}|                    |
|          }	 | j                            d|          r.t          j        ||||           |                                 dS dS # t0          $ r)}t3          |           t3          |           Y d}~dS d}~ww xY w)zs
        Quit and Restart Spyder application.

        If reset True it allows to reset spyder on restart.
        spyderappz
restart.pySPYDER_BOOTSTRAP_ARGSNSPYDER_ARGSTF
SPYDER_PIDSPYDER_IS_BOOTSTRAPntz"{0}" "{1}")close_immediately)shellenvstartupinfo)rA   r   rM   r   ospjoinosenvironcopypopgetpidry   
executablestrname
subprocessSTARTUPINFOdwFlagsSTARTF_USESHOWWINDOWformatr   closingPopenquit	Exceptionprint)r'   resetr   r   spyder_start_directoryrestart_scriptr   bootstrap_argsspyder_argspidpythonis_bootstrapr   r   commanderrors                   r!   restartzApplication.restartP  s    //'/22 "1!:!:"8%NN joo!8$??ggm,, ikk %(KLL L )MHHL%(%6%6!" 7d??$022K:#BBEEKE..88		y  9J KK  3-8: : : :   	 	 	 %LLL'NNNNNNNNN		s   <AF 
F;F66F;c                 4    |                                  j        S )z+Open Spyder's Documentation in the browser.)r-   r   r&   s    r!   r   z Application.documentation_action       !!##88r    c                 4    |                                  j        S )z1Open Spyder's video documentation in the browser.)r-   r   r&   s    r!   r   zApplication.video_action       !!##00r    c                 4    |                                  j        S )z;Open Spyder's troubleshooting documentation in the browser.)r-   r   r&   s    r!   r   zApplication.trouble_action       !!##22r    c                 4    |                                  j        S )z&Show Spyder's Dependencies dialog box.)r-   r   r&   s    r!   r   zApplication.dependencies_action  s     !!##77r    c                 4    |                                  j        S )z.Check if a new version of Spyder is available.)r-   r   r&   s    r!   r   z Application.check_updates_action  r  r    c                 4    |                                  j        S )z2Open Spyder's Google support group in the browser.)r-   r   r&   s    r!   r   z Application.support_group_action  r  r    c                 4    |                                  j        S )zShow Spyder's About dialog box.)r-   r   r&   s    r!   r   zApplication.about_action  r  r    c                 4    |                                  j        S )z4Show Spyder's Windows user env variables dialog box.)r-   r   r&   s    r!   r   zApplication.user_env_action  s     !!##33r    c                 4    |                                  j        S zRestart Spyder action.)r-   r   r&   s    r!   r   zApplication.restart_action  r  r    c                 4    |                                  j        S )z$Restart Spyder in DEBUG mode action.)r-   r   r&   s    r!   r   z Application.restart_debug_action  r  r    c                 4    |                                  j        S r  )r-   r=   r&   s    r!   r=   zApplication.report_action  s     !!##11r    c                 d    |                                                      t          j                  S r,   )r-   get_menur   r   r&   s    r!   r   zApplication.debug_logs_menu  s,    !!##,,"02 2 	2r    c                 4    |                                  j        S r,   )r-   rW   r&   s    r!   rW   z%Application.application_update_status  s    !!##==r    )Tr,   )FF)I__name__
__module____qualname__NAMEr   rM   rB   REQUIRESr   r8   rL   rP   rX   OPTIONALr   CONTAINER_CLASSCONF_SECTION	CONF_FILEr   CONF_WIDGET_CLASSCAN_BE_DISABLEDstaticmethodr"   r(   r*   r4   r	   r:   r?   rF   rN   rU   r\   r
   r`   rc   rf   rh   rm   ro   r   rI   rJ   r9   r   r   r   propertyr2   rl   r   r   r   rj   rk   r   r0   r   r   r
  r   r   r   r   r   r   r   r   r   r   r=   r   rW   r   r    r!   r   r   &   sL       D!45Hg.0A 13H*OLI-O    \ , , ,; ; ;+ + +  1222' ' 32' 0000 0 100  34446 6 546
  01111 1 211 ///D D 0/D  1222H H 32H w0111N N 21N w23338 8 438 w~...G G /.G w///1 1 0/1 w/000- - 10-( ( ( (3 3 36	. 	. 	.2 2 21 1 19 9 9$G G G, , , " " X"3 3 3
/ / // / /+ + +/ / /
0 
0 
0   <# # #
$ $ $ 
TVV9 9 9 V9v 9 9 X9 1 1 X1 3 3 X3 8 8 X8 9 9 X9 9 9 X9 1 1 X1 4 4 X4 3 3 X3 9 9 X9 2 2 X2 2 2 X2 > > X> > >r    r   )*__doc__r   os.pathpathr   r   ry   qtpy.QtCorer   qtpy.QtWidgetsr   spyder.api.pluginsr   r   spyder.api.translationsr   )spyder.api.plugin_registration.decoratorsr	   r
   spyder.api.widgets.menusr   spyder.config.baser   r   r   r   #spyder.plugins.application.confpager   $spyder.plugins.application.containerr   r   r   spyder.plugins.console.apir   spyder.plugins.mainmenu.apir   r   r   r   spyder.utils.qthelpersr   r   r   r    r!   <module>r9     s   
 
			           



                   7 6 6 6 6 6 6 6 % % % % % %- - - - - - - - 3 3 3 3 3 36 6 6 6 6 6 6 6 6 6 6 6 E E E E E EF F F F F F F F F F 5 5 5 5 5 5M M M M M M M M M M M M . . . . . .d> d> d> d> d>. d> d> d> d> d>r    