
    
8d                         d Z ddlZddlZddlmZ ddlmZ ddl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 dd
lmZ d Z G d dej                  ZdS )zThe Qt MainWindow for the QtConsole

This is a tabbed pseudo-terminal of Jupyter sessions, with a menu bar for
common actions.
    N)partial)Thread)jupyter_runtime_dir)get_all_styles)QtGuiQtCore	QtWidgets)styles)JupyterWidget)gui_referencec                 N    t          |           }|                                 |S )z7call a function in a simple thread, to prevent blocking)target)r   start)fts     4lib/python3.11/site-packages/qtconsole/mainwindow.py
backgroundr      s$    aAGGIIIH    c                       e Zd Z	 	 	 	 d; fd	Zd Zed             Zed             Zed             Zd Z	d	 Z
d
 Zd Zd Zd Zd<dZd Zd Zd Zd=dZd Zd=dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Z d! Z!d" Z"d# Z#d$ Z$d% Z%d& Z&d' Z'd( Z(d) Z)d* Z*d+ Z+d, Z,d- Z-d. Z.d/ Z/d0 Z0d1 Z1d2 Z2d3 Z3d4 Z4d5 Z5d6 Z6d7 Z7d8 Z8d9 Z9d: Z: xZ;S )>
MainWindowTNc                    t                                          |           d| _        d| _        || _        || _        || _        || _        || _        t          j
        |           | _        | j                            d           | j                            d           | j        j        t                                       | j                   |                     | j                   | j                                                            d           | j                            t,          j        j                   dS )aI   Create a tabbed MainWindow for managing FrontendWidgets

        Parameters
        ----------

        app : reference to QApplication parent
        confirm_exit : bool, optional
            Whether we should prompt on close of tabs
        new_frontend_factory : callable
            A callable that returns a new JupyterWidget instance, attached to
            its own running kernel.
        slave_frontend_factory : callable
            A callable that takes an existing JupyterWidget, and  returns a new
            JupyterWidget instance, attached to the same kernel.
        )parentr   TFN)super__init___kernel_counter_external_kernel_counter_appconfirm_exitnew_frontend_factoryslave_frontend_factoryconnection_frontend_factoryr	   
QTabWidget
tab_widgetsetDocumentModesetTabsClosabletabCloseRequestedintconnect	close_tabsetCentralWidgettabBar
setVisiblesetFocusPolicyr   QtNoFocus)selfappr   r   r    r!   r   	__class__s          r   r   zMainWindow.__init__$   s   , 	''' ()%	($8!&<#+F(#.t44''---''---)#.66t~FFFdo...  ++E222&&vy'899999r   c                 X   | j                                         dk    r-| j                                                             d           n,| j                                                             d           | j                                         dk    r|                                  dS dS )a   update visibility of the tabBar depending of the number of tab

        0 or 1 tab, tabBar hidden
        2+ tabs, tabBar visible

        send a self.close if number of tab ==0

        need to be called explicitly, or be connected to tabInserted/tabRemoved
           FTr   N)r#   countr+   r,   closer0   s    r   update_tab_bar_visibilityz$MainWindow.update_tab_bar_visibilityN   s     ?  ""a''O""$$//6666O""$$//555?  ""A%%JJLLLLL &%r   c                 4    | j         }| xj         dz  c_         |S )z,constantly increasing counter for kernel IDsr4   )r   r0   cs     r   next_kernel_idzMainWindow.next_kernel_id_   s%      !r   c                 4    | j         }| xj         dz  c_         |S )z5constantly increasing counter for external kernel IDsr4   )r   r:   s     r   next_external_kernel_idz"MainWindow.next_external_kernel_idf   s%     )%%*%%r   c                 4    | j                                         S N)r#   currentWidgetr7   s    r   active_frontendzMainWindow.active_frontendm   s    ,,...r   c                 X    |                                  }|                     |           dS )z0create a new frontend and attach it to a new tabN)r   add_tab_with_frontendr0   widgets     r   create_tab_with_new_frontendz'MainWindow.create_tab_with_new_frontendq   s-    **,,""6*****r   c                     |                                  }t          j                            | dd|          \  }}|r|                     |           dS dS )z#Set the title of the console windowzRename Window
New title:textN)windowTitler	   QInputDialoggetTextsetWindowTitler0   	old_titletitleoks       r   set_window_titlezMainWindow.set_window_titlev   so    $$&&	*2243B3?8A 3 C C	r  	'&&&&&	' 	'r   c                     t           j                            | dt                      d          \  }}|sdS |                     |          }d                    | j                  }|                     ||           dS )zAcreate a new frontend attached to an external kernel in a new tabzConnect to Existing KernelzConnection file (*.json)Nzexternal {}name)r	   QFileDialoggetOpenFileNamer   r!   formatr>   rD   )r0   connection_file	file_typerF   rW   s        r   create_tab_with_existing_kernelz*MainWindow.create_tab_with_existing_kernel   s    %.%:%J%J45Q5H5J5J5O&Q &Q"  	F11/BB##D$@AA""6"55555r   c                    | j                                         }| j                             |          }| j                             |          }|                     |          }d|v r|}nd|z  }|                     ||           dS )zDcreate a new frontend attached to the same kernel as the current tabslavez
(%s) slaverV   N)r#   rA   indexOftabTextr    rD   )r0   current_widgetcurrent_widget_indexcurrent_widget_namerF   rW   s         r   create_tab_with_current_kernelz)MainWindow.create_tab_with_current_kernel   s    6688#66~FF"o556JKK,,^<<)))&DD"55D""6t"44444r   c                     | j                             | j                                                   }t          j                            | dd|          \  }}|r4| j                             | j                                         |           dS dS )z Set the title of the current tabz
Rename TabrI   rJ   N)r#   ra   currentIndexr	   rM   rN   
setTabTextrP   s       r   set_tab_titlezMainWindow.set_tab_title   s    O++DO,H,H,J,JKK	*2243?3?8A 3 C C	r  	NO&&t'C'C'E'EuMMMMM	N 	Nr   c                 
   t          |          t          ur| j                            |          }| j                            |          }|dS |                     |          }d}t          |d          r|j        }||D ]	}d|_        
||v r	 | 	                    |          
                    d           nD# t          $ r7 | j                            d           | j                            |           Y nw xY w|                                  dS |j        }|j        }||j        s|j        }|J|rF|j        r>|                                                                 }t.          j        j        }	t.          j        j        }
|j        rd| j                            |          z   dz   }d}t/          j        d	|           }|                    d
           t/          j        d|           }|                    d           |                    d           t/          j        t.          j        j        ||          }|                     |           |!                    |	           |!                    |t.          j        j"                   |!                    |t.          j        j#                   |$                    |           |%                    |	           tM          j'        | j(        j)        *                    tW          j,        dd                              }|-                    |           |.                                }|dk    r|D ]M}t_          |j        j0                   | j                            | j                            |                     N|1                                 | j                            |           t_          |j0                   nh|dk    rJ|j        s|
                    d           | j                            |           t_          |j0                   nt.          j        2                    | |d|
|	z  |
          }||
k    r| j                            |           n|r/| j                            |           t_          |j0                   n| j                            |           |r|j        rz|D ]M}t_          |j        j0                   | j                            | j                            |                     N|r|1                                 t_          |j0                   |                                  dS )z Called when you need to try to close a tab.

        It takes the number of the tab to be closed as argument, or a reference
        to the widget inside this tab
        N_keep_kernel_on_exitTexitz<Master already closed or not local, closing only current tabzYou are closing the tab : ""zJWould you like to quit the Kernel and close all attached Consoles as well?z&No, just this TabNz&Yes, close allYzCtrl+D@   r4   r   z	exit Truez^Are you sure you want to close this Console?
The Kernel and other Consoles will remain active.)defaultButton)3typer'   r#   r`   rF   find_slave_widgetshasattrrk   _hiddenfind_master_tabexecuteAttributeErrorloginfo	removeTabr8   kernel_clientkernel_manager_confirm_exit	_existingchannels_runningwindowrL   r	   QMessageBoxCancelOk
_may_closera   QPushButtonsetShortcutQuestionsetInformativeText	addButtonNoRoleYesRolesetDefaultButtonsetEscapeButtonr   QPixmapr   iconpixmapr   QSizesetIconPixmapexec_r   stop_channelsshutdown_kernelquestion)r0   current_tabclosing_widget
slave_tabs
keepkerneltabr|   r}   rR   cancelokaymsgrz   justthiscloseallboxr   replyr_   s                      r   r)   zMainWindow.close_tab   sQ    C''/11+>>K--k:: !F ,,^<<

>"899 	'<J
 %% ' 'C"&CKK!Z//?,,^<<DDVLLLL) ? ? ?&deee11+>>>>>? 22444F&4'6n&B (1J -?!? -?1133".5 ,/!, )?:4?;R;RS^;_;__`ccCgD(45I4PPH((---(45FMMH((---((222#/	0E0N,138 8C**4000MM&)))MM(I,A,HIIIMM(I,A,IJJJ((222''///"]49>+@+@bQSATAT+U+UVVF%%f---IIKKEzz%/ V VE&u':'HIII O55do6M6Me6T6TUUUU&6688811+>>>"=#>????!-7 @*22;???11+>>>"=#>???%1::4NV&*	 ;  E }}11+>>> 	8O%%k222}23333O%%k222 8!? 8' N NEu2@AAAO--do.E.Ee.L.LMMMM! 5"22444=6777&&(((((s   (B9 9>C:9C:c                     |s
d| j         z  }| j                            ||           |                                  |                     |           |j                            | j                   dS )zP insert a tab with a given frontend in the tab bar, and give it a name

        z	kernel %iN)r<   r#   addTabr8   make_frontend_visibleexit_requestedr(   r)   )r0   frontendrW   s      r   rD   z MainWindow.add_tab_with_frontend  sv      	5!44Dx---&&(((""8,,,''77777r   c                 n    | j                             | j                                         dz              d S Nr4   r#   setCurrentIndexrg   r7   s    r   next_tabzMainWindow.next_tab   1    '')E)E)G)G)IKKKKKr   c                 n    | j                             | j                                         dz
             d S r   r   r7   s    r   prev_tabzMainWindow.prev_tab#  r   r   c                 ~    | j                             |          }|dk    r| j                             |           d S d S )Nr   )r#   r`   r   )r0   r   widget_indexs      r   r   z MainWindow.make_frontend_visible&  sF    _,,X66!O++L99999 r   Fc                 v    t          |t                    r j                            |          }|j         fdt           j                                                  D             }fd|D             }d |D             }|r|S t          |          dk    sJ t          |          dk    rdS |d         S )a  
        Try to return the frontend that owns the kernel attached to the given widget/tab.

            Only finds frontend owned by the current application. Selection
            based on port of the kernel might be inaccurate if several kernel
            on different ip use same port number.

            This function does the conversion tabNumber/widget if needed.
            Might return None if no master widget (non local kernel)
            Will crash if more than 1 masterWidget

            When asList set to True, always return a list of widget(s) owning
            the kernel. The list might be empty or containing several Widget.
        c                 D    g | ]}j                             |          S  r#   rF   .0ir0   s     r   
<listcomp>z.MainWindow.find_master_tab.<locals>.<listcomp>A  )    YYYQt--a00YYYr   c                 ^    g | ])}|j         j        j        k    t          |d           '|*S r   )r|   r[   rt   r   rF   kms     r   r   z.MainWindow.find_master_tab.<locals>.<listcomp>E  sI      ?  ?  ?F & 4 DHZ Z Z '| < < ![ "( Z Z Zr   c                      g | ]}|j         	|S r   r   )r   rF   s     r   r   z.MainWindow.find_master_tab.<locals>.<listcomp>I  s     XXXFfFWXXXXr   r4   r   N)
isinstancer'   r#   rF   r|   ranger5   len)r0   r   as_listwidget_listfiltered_widget_listmaster_widgetr   s   `     @r   rv   zMainWindow.find_master_tab+  s    " c3 	./((--C ZYYY%@U@U@W@W:X:XYYY ?  ?  ?  ?k  ?  ?  ? YX.BXXX 	!  =!!1$$$$}q  4Qr   c                 B    t          |t                    r j                            |          }|j         fdt           j                                                  D             }fd|D             }                     |d          fd|D             }|S )a*  return all the frontends that do not own the kernel attached to the given widget/tab.

            Only find frontends owned by the current application. Selection
            based on connection file of the kernel.

            This function does the conversion tabNumber/widget if needed.
        c                 D    g | ]}j                             |          S r   r   r   s     r   r   z1MainWindow.find_slave_widgets.<locals>.<listcomp>`  r   r   c              3   F   K   | ]}|j         j        j        k    |V  d S r@   )r|   r[   r   s     r   	<genexpr>z0MainWindow.find_slave_widgets.<locals>.<genexpr>c  sF        \  \F & 4 DHZ Z Z "( Z Z Z Z \  \r   T)r   c                     g | ]}|v|	S r   r   )r   rF   master_widget_lists     r   r   z1MainWindow.find_slave_widgets.<locals>.<listcomp>h  s$    ddd6QcCcCcfCcCcCcr   )r   r'   r#   rF   r|   r   r5   rv   )r0   r   r   r   
slave_listr   r   s   `    @@r   rs   zMainWindow.find_slave_widgetsR  s     c3 	./((--C ZYYY%@U@U@W@W:X:XYYY \  \  \  \k  \  \  \ "11#t1DDdddd+?ddd
r   c                     |                     |           |                      |           |r&|                    t          j        j                   dS dS )a/  Add action to menu as well as self

        So that when the menu bar is invisible, its actions are still available.

        If defer_shortcut is True, set the shortcut context to widget-only,
        where it will avoid conflict with shortcuts already bound to the
        widgets themselves.
        N)	addActionsetShortcutContextr   r.   WidgetShortcut)r0   menuactiondefer_shortcuts       r   add_menu_actionzMainWindow.add_menu_actionm  s\     	vv 	@%%fi&>?????	@ 	@r   c                     |                                   |                                  |                                  |                                  |                                  |                                  d S r@   )init_file_menuinit_edit_menuinit_view_menuinit_kernel_menuinit_window_menuinit_help_menur7   s    r   init_menu_barzMainWindow.init_menu_bar|  st    r   c                    |                                                      d          | _        t          j        d| d| j                  | _        |                     | j        | j                   t          j        d| d| j                  | _	        |                     | j        | j	                   t          j        d| d| j
                  | _        |                     | j        | j                   | j                                         t          j        d	| t          j        j        | j                  | _        |                     | j        | j                   t          j        d
| t          j        j        | j                  | _        |                     | j        | j        d           | j                                         t          j        t          j        j                  }|                    d          rt.          j        dk    rd}t          j        d| || j                  | _        |                     | j        | j        d           t.          j        dk    rl| j                                         t          j        d| t          j        j        | j                  | _        |                     | j        | j                   d S d S )Nz&FilezNew Tab with &New kernelzCtrl+Tshortcut	triggeredzNew Tab with Sa&me kernelzCtrl+Shift+TzNew Tab with &Existing kernelzAlt+Tz
&Close Tabz&Save to HTML/XHTMLTzCtrl+PdarwinzCtrl+Shift+Pz&Print&Quit)menuBaraddMenu	file_menur	   QActionrG   new_kernel_tab_actr   re   slave_kernel_tab_actr]   existing_kernel_tab_actaddSeparatorr   QKeySequenceCloseclose_active_frontendclose_actionSaveexport_action_active_frontendexport_actionPrintmatchessysplatformprint_action_active_frontendprint_actionQuitr6   quit_action)r0   printkeys     r   r   zMainWindow.init_file_menu  s   //88"+"34N7#9 #9 #9 	T^T-DEEE$-$56Q#9%; %; %;! 	T^T-FGGG'0'89X59>E?C?c(e (e (e$ 	T^T-IJJJ##%%%#+L'-0  
 	T^T->???$,-B',8  
 	T^T-?FFF##%%%%e&8&>??H%% 	&#,(*B*B &H%-h79 9 9 	T^T->EEE<8## N'')))(0+0*     D
   1ABBBBB $#r   c                    |                                                      d          | _        t          j        d| t
          j        j        d| j                  | _	        | 
                    | j        | j	                   t          j        d| t
          j        j        d| j                  | _        | 
                    | j        | j                   | j                                         t          j        d| t
          j        j        | j                  | _        | 
                    | j        | j        d	           t          j        d
| t
          j        j        | j                  | _        | 
                    | j        | j        d	           t          j        d| d| j                  | _        | 
                    | j        | j        d	           t          j        d| t
          j        j        | j                  | _        | 
                    | j        | j        d	           | j                                         t          j        t
          j        j                  }|                    d          rt8          j        dk    rd}t          j        d| || j                  | _        | 
                    | j        | j        d	           d S )Nz&Editz&UndozUndo last action if possibler   	statusTipr   z&RedozRedo last action if possiblez&Cutr   Tz&CopyzCopy (&Raw Text)zCtrl+Shift+Cz&PastezCtrl+Ar   zCtrl+Shift+AzSelect Cell/&All) r   r   	edit_menur	   r   r   r   Undoundo_active_frontendundo_actionr   Redoredo_active_frontendredo_actionr   Cutcut_active_frontend
cut_actionCopycopy_active_frontendcopy_actioncopy_raw_active_frontendcopy_raw_actionPastepaste_active_frontendpaste_action	SelectAllr   r   r   select_all_active_frontendselect_all_action)r0   	selectalls     r   r   zMainWindow.init_edit_menu  s   //88$,W',4/	   	T^T-=>>>$,W',4/	1 1 1
 	T^T-=>>>##%%%#+F'+.  
 	T^T_dCCC$,W',/  
 	T^T-=tDDD(01C#3     
 	T^T-A4HHH%-h'-0  
 	T^T->EEE##%%%&u'9'CDD	X&& 	'3<8+C+C 'I!*!23E5" " "
 	T^T-CTJJJJJr   c                                                                           d           _        t          j        dk    rCt          j        d dd j                   _         	                     j         j                   t          j        dk    rdnd}t          j        d	 |d
 j
                   _         	                     j         j                    j                                         t          j        d t          j        j         j                   _         	                     j         j        d           t          j        d t          j        j         j                   _         	                     j         j        d           t          j        d d j                   _         	                     j         j        d            j                                         t          j        d dd j                   _         	                     j         j                    j                            d           _        t          j                   } j        j        }t          j        d  fd          }|                    d           |                    |dk               t          j        d  fd          }|                    d           |                    |dk               t          j        d  fd          }|                    d           |                    |dk               |                    |           |                    |           |                    |            j                            |            j                            |            j                            |            j                             |            j                            d           _!        t          j        d   fd!          }t          j        d"  fd#          }t          j        d$  fd%          }	 j!                            |            j!                            |            j!                            |	            "                                }
tG          |
          d&k    r j                            d'           _$        t          j                   }|
D ]}t          j        d(%                    |                     }|j&        '                    tQ           j)        |                     |                    d           |                    |            j$                            |           |d)k    r/|                    d            j$                             |           d S d S )*Nz&Viewr   zToggle &Menu BarCtrl+Shift+MzToggle visibility of menubarr   zCtrl+Meta+FF11z&Full Screenz)Toggle between Fullscreen and Normal SizezZoom &Inr   Tz	Zoom &OutzZoom &ResetzCtrl+0z&Clear ScreenzCtrl+LzClear the consolez&Completion typez&ncursesc                  .                          d          S )Nncurses%set_completion_widget_active_frontendr7   s   r   <lambda>z+MainWindow.init_view_menu.<locals>.<lambda>?  s    dHH  r   r   r  z	&droplistc                  .                          d          S )Ndroplistr  r7   s   r   r  z+MainWindow.init_view_menu.<locals>.<lambda>G  s    dHH  r   r   z&plainc                  .                          d          S )Nplainr  r7   s   r   r  z+MainWindow.init_view_menu.<locals>.<lambda>O  s    dHH  r   r"  z&Pagerz.. &Horizontal Splitc                  .                          d          S )Nhsplitset_paging_active_frontendr7   s   r   r  z+MainWindow.init_view_menu.<locals>.<lambda>b      d==hGG r   z : &Vertical Splitc                  .                          d          S )Nvsplitr%  r7   s   r   r  z+MainWindow.init_view_menu.<locals>.<lambda>f  r'  r   z   &Inside Pagerc                  .                          d          S )Ninsider%  r7   s   r   r  z+MainWindow.init_view_menu.<locals>.<lambda>j  r'  r   r   z&Syntax Stylez{}default)*r   r   	view_menur   r   r	   r   toggle_menu_bartoggle_menu_bar_actr   toggleFullScreenfull_screen_actr   r   r   ZoomIn"increase_font_size_active_frontendincrease_font_sizeZoomOut"decrease_font_size_active_frontenddecrease_font_sizereset_font_size_active_frontendreset_font_sizeclear_active_frontendclear_actioncompletion_menuQActionGrouprB   gui_completionsetCheckable
setCheckedr   setDefaultAction
pager_menuget_available_syntax_stylesr   syntax_style_menurZ   r   r(   r   set_syntax_style)r0   fs_keycompletion_groupactive_frontend_completionncurses_completion_actiondroplist_completion_actionplain_commpletion_actionhsplit_actionvsplit_actioninside_actionavailable_syntax_stylesstyle_groupstyler   s   `             r   r   zMainWindow.init_view_menu  sL   //88<8##'0'89K'8.	(0 (0 (0D$
   1IJJJ"%,(":":(0A+	 -  -  -
 	T^T-ABBB##%%%"+"3J'.=# # #
 	T^T-DdKKK"+"3K'/=# # #
 	T^T-DdKKK(0:     
 	T^T-A4HHH##%%%%-o)0	2 2 2
 	T^T->???#~556HII$1$77%)%9%H"$-$5   % % %!
 	"..t444!,,&)3	5 	5 	5%.%6   & & &"
 	#//555"--&*4	6 	6 	6#,#4   $ $ $ 
 	!--d333 ++&'1	3 	3 	3 	""#<===""#=>>>""#;<<<&&'@AAA&&'ABBB&&'?@@@--.GHHH.00::!)*@GGGGI I I ")*>GGGGI I I ")*<GGGGI I I 	!!-000!!-000!!-000"&"B"B"D"D&''!++%)^%;%;O%L%LD"#066K0 	D 	D"*4;;u+=+=tDD ((1F16*8 *8 9 9 9##D)))%%f---&00888I%%%%d+++*;;FCCC ,+	D 	Dr   c                    |                                                      d          | _        t          j        dk    rdnd}t          j        d| | j        |dz             | _        | 	                    | j        | j                   t          j        d| | j
        |d	z             | _        | 	                    | j        | j                   | j                                         t          j        d
| d| j        j        | j                  | _        | 	                    | j        | j                   | j        j                            | j                   d S )Nz&Kernelr   MetaCtrlz&Interrupt current Kernelz+C)r   r   z&Restart current Kernelz+.z&Confirm kernel restartT)	checkablecheckedr   )r   r   kernel_menur   r   r	   r    interrupt_kernel_active_frontendinterrupt_kernel_actionr   restart_kernel_active_frontendrestart_kernel_actionr   rB   confirm_restart&toggle_confirm_restart_active_frontendconfirm_restart_kernel_actionr#   currentChangedr(   update_restart_checkbox)r0   ctrls     r   r   zMainWindow.init_kernel_menu  sT   <<>>11)<<
 11vvv'0'89T;$Y( ( ($
 	T-t/KLLL%.%67P9$Y& & &"
 	T-t/IJJJ%%'''-6->?X(8A	. . .* 	T-t/QRRR&..t/KLLLLLr   c                 $   |                                                      d          | _        t          j        dk    rt          j        d| dd| j                  | _        t          j        d| dd	| j	                  | _
        |                     | j        | j                   |                     | j        | j
                   | j                                         t          j        dk    rd
nd}t          j        d| |d| j                  | _        |                     | j        | j                   t          j        dk    rdnd}t          j        d| |d| j                  | _        |                     | j        | j                   t          j        d| dd| j                  | _        |                     | j        | j                   t          j        d| dd| j                  | _        |                     | j        | j                   d S )Nz&Windowr   z	Mini&mizezCtrl+mz'Minimize the window/Restore Normal Sizer   z&Zoomr  z'Maximize the window/Restore Normal SizezCtrl+Alt+Leftz	Ctrl+PgUpzPre&vious TabzSelect previous tabzCtrl+Alt+RightzCtrl+PgDownz	Ne&xt TabzSelect next tabzRename &WindowzAlt+RzRename windowz&Rename Current TabzCtrl+RzRename current tab)r   r   window_menur   r   r	   r   toggleMinimizedminimizeActtoggleMaximizedmaximizeActr   r   r   prev_tab_actr   next_tab_actrT   rename_window_actri   rename_current_tab_act)r0   prev_keynext_keys      r   r   zMainWindow.init_window_menu  s2   <<>>11)<<<8##(0!C.	 0  0  0D  )0'C.	 0  0  0D   !143CDDD  !143CDDD))+++&)lh&>&>??K%-o+m	% % %
 	T-t/@AAA'*|x'?'?##]%-k'm	% % %
 	T-t/@AAA!*!23C/38?9H9=9N	"P "P "P
 	T-t/EFFF '0&78M48=E>R>B>P	'R 'R 'R#
 	T-t/JKKKKKr   c                 b   |                                                      d          | _        t          j        d| | j                  | _        t          j        d| | j                  | _        | 	                    | j        | j                   | 	                    | j        | j                   d S )Nz&HelpzShow &QtConsole helpr  zOpen online &help)
r   r   	help_menur	   r   
_show_helphelp_action_open_online_helponline_help_actionr   r7   s    r   r   zMainWindow.init_help_menu  s     //88 %,-CT37?D D D"+"34G:>:P#R #R #RT^T-=>>>T^T-DEEEEEr   c                 d    t           j                            d| j        j        j                   d S )N   )r   QTimer
singleShotrB   _controlsetFocusr7   s    r   _set_active_frontend_focusz%MainWindow._set_active_frontend_focus  s+     	  d&:&C&LMMMMMr   c                     |                                  }|                                r|                    d           d S |                    d           d S )NFT)r   	isVisibler,   )r0   menu_bars     r   r.  zMainWindow.toggle_menu_bar  sW    <<>> 	&&&&&&%%%%%r   c                     |                                  s|                                  d S |                                  d S r@   )isMinimizedshowMinimized
showNormalr7   s    r   rd  zMainWindow.toggleMinimized  D    !! 	     OOr   c                 D    | j                             t                     d S r@   )rB   _pager   r7   s    r   rp  zMainWindow._show_help  s    ""=11111r   c                 4    t          j        ddd           d S )Nz https://qtconsole.readthedocs.ior4   T)new	autoraise)
webbrowseropenr7   s    r   rr  zMainWindow._open_online_help  s     :TRRRRRRr   c                     |                                  s|                                  d S |                                  d S r@   )isMaximizedshowMaximizedr  r7   s    r   rf  zMainWindow.toggleMaximized  r  r   c                    |                                  s\|                                  t          j        dk    r6| j                            d           | j                            d           d S d S |                                  t          j        dk    r6| j                            d           | j                            d           d S d S )Nr   FT)isFullScreenshowFullScreenr   r   rg  
setEnabledre  r  r7   s    r   r0  zMainWindow.toggleFullScreen  s      "" 		2!!!|x'' ++E222 ++E22222 (' OO|x'' ++D111 ++D11111 ('r   c                 :    | j                             |           d S r@   )rB   _set_paging)r0   pagings     r   r&  z%MainWindow.set_paging_active_frontend  s    ((00000r   c                 :    | j                             |           d S r@   )rB   _set_completion_widget)r0   r>  s     r   r  z0MainWindow.set_completion_widget_active_frontend  s    33NCCCCCr   c                 V    t          t                                }t          |          S )z,Get a list with the syntax styles available.)listr   sorted)r0   r
   s     r   rC  z&MainWindow.get_available_syntax_styles  s!    n&&''f~~r   c                 t   |dk    rd}nt          j        |          rd}nd}|| j        _        t          j        ||          }|| j        _        | j                                         | j                                         | j                            d           | j        	                    dd           dS )	z,Set up syntax style for the current console.bwnocolorlinuxlightbgT)clearz%colors linuxN)
r
   
dark_stylerB   syntax_stylesheet_from_templatestyle_sheet_syntax_style_changed_style_sheet_changedreset_execute)r0   r  colorsr  s       r   rE  zMainWindow.set_syntax_style  s    FF|,, 	FFF,8)0vFF+6(2244411333"""...%%ot<<<<<r   c                 :    |                      | j                   d S r@   )r)   rB   r7   s    r   r   z MainWindow.close_active_frontend.  s    t+,,,,,r   c                 8    | j                                          d S r@   )rB   request_restart_kernelr7   s    r   rZ  z)MainWindow.restart_kernel_active_frontend1  s    3355555r   c                 8    | j                                          d S r@   )rB   request_interrupt_kernelr7   s    r   rX  z+MainWindow.interrupt_kernel_active_frontend4  s    5577777r   c                 l    | j         }|j         |_        | j                            |j                   d S r@   )rB   r\  r^  r@  rE   s     r   r]  z1MainWindow.toggle_confirm_restart_active_frontend7  s8    %%+%;!;*55f6LMMMMMr   c                 d    | j         d S | j         }| j                            |j                   d S r@   )rB   r^  r@  r\  rE   s     r   r`  z"MainWindow.update_restart_checkbox<  s8    'F%*55f6LMMMMMr   c                 8    | j                                          d S r@   )rB   r  r7   s    r   r:  z MainWindow.clear_active_frontendB  s    ""$$$$$r   c                 h    | j         }|                                r|                                 d S d S r@   )rB   can_cutcutrE   s     r   r  zMainWindow.cut_active_frontendE  s7    %>> 	JJLLLLL	 	r   c                 <    | j         }|                                 d S r@   )rB   copyrE   s     r   r  zMainWindow.copy_active_frontendJ  s    %r   c                 B    | j         j                                         d S r@   )rB   _copy_raw_actiontriggerr7   s    r   r  z#MainWindow.copy_raw_active_frontendN  s     -5577777r   c                 h    | j         }|                                r|                                 d S d S r@   )rB   	can_pastepasterE   s     r   r  z MainWindow.paste_active_frontendQ  s9    % 	LLNNNNN	 	r   c                 8    | j                                          d S r@   )rB   undor7   s    r   r  zMainWindow.undo_active_frontendV      !!#####r   c                 8    | j                                          d S r@   )rB   redor7   s    r   r  zMainWindow.redo_active_frontendY  r  r   c                 B    | j         j                                         d S r@   )rB   r   r  r7   s    r   r   z'MainWindow.print_action_active_frontend\  s     )1133333r   c                 B    | j         j                                         d S r@   )rB   r   r  r7   s    r   r   z(MainWindow.export_action_active_frontend_  s     *2244444r   c                 B    | j         j                                         d S r@   )rB   r  r  r7   s    r   r  z%MainWindow.select_all_active_frontendb  s     .6688888r   c                 B    | j         j                                         d S r@   )rB   r4  r  r7   s    r   r3  z-MainWindow.increase_font_size_active_frontende       /7799999r   c                 B    | j         j                                         d S r@   )rB   r7  r  r7   s    r   r6  z-MainWindow.decrease_font_size_active_frontendh  r  r   c                 B    | j         j                                         d S r@   )rB   r9  r  r7   s    r   r8  z*MainWindow.reset_font_size_active_frontendk  s     ,4466666r   c                    | j                                         dk    r|                                 dS |                                                                 }t
          j        j        }t
          j        j        }t
          j        j	        }| j
        rZ| j                                         dk    rd}nd}d}t          j        d|           }|                    d           t          j        t
          j        j        ||          }	|	                    |           |	                    |           |	                    |t
          j        j                   |	                    |           |	                    |           t'          j        | j        j                            t1          j        d	d	                              }
|	                    |
           |	                                }n|}||k    r|                                 dS ||k    s||k    rs| j                                         dk    r@| j        }d
|_        |                     |           | j                                         dk    @|                                 dS dS )zH Forward the close event to every tabs contained by the windows
        r   Nr4   z+Close all tabs, stop all kernels, and Quit?z%Close console, stop kernel, and Quit?z=Kernels not started here (e.g. notebooks) will be left alone.r   Qrp   F) r#   r5   acceptr   rL   r	   r   r   r   
AcceptRoler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ignorerB   r~   r)   )r0   eventrR   r   r   accept_roler   rz   r   r   r   r   rF   s                r   
closeEventzMainWindow.closeEventr  s?    ?  ""a''LLNNNF))++&-$'+6 	$$&&**C=RD ,Wd;;H  %%%'	(=(F$)30 0C""4(((MM&!!!MM(I$9$ABBB  ***''']49>#8#8b9L9L#M#MNNFf%%%IIKKEEEF??LLNNNFD==E[00/''))Q..-',$v&&&	 /''))Q..
 LLNNNNN 10r   )TNNNNr@   )F)<__name__
__module____qualname__r   r8   propertyr<   r>   rB   rG   rT   r]   re   ri   r)   rD   r   r   r   rv   rs   r   r   r   r   r   r   r   r   rz  r.  rd  rp  rr  rf  r0  r&  r  rC  rE  r   rZ  rX  r]  r`  r:  r  r  r  r  r  r  r   r   r  r3  r6  r8  r  __classcell__)r2   s   @r   r   r      s        "&FJ04	(: (: (: (: (: (:T  "   X   X / / X/+ + +
' ' '
6 
6 
65 5 5N N Np) p) p)d	8 	8 	8 	8L L LL L L: : :
%  %  %  % N  6@ @ @ @  =C =C =C@<K <K <K~yD yD yDv M  M  MD1L 1L 1LfF F F N N N& & &  2 2 2S S S  
2 
2 
21 1 1D D D  
= = = - - -6 6 68 8 8N N N
N N N% % %  
  8 8 8  
$ $ $$ $ $4 4 45 5 59 9 9: : :: : :7 7 7+ + + + + + +r   r   )__doc__r   r  	functoolsr   	threadingr   jupyter_core.pathsr   pygments.stylesr   qtpyr   r   r	   	qtconsoler
   qtconsole.jupyter_widgetr   qtconsole.usager   r   QMainWindowr   r   r   r   <module>r     s    


                 2 2 2 2 2 2 * * * * * * ) ) ) ) ) ) ) ) ) )       2 2 2 2 2 2 ) ) ) ) ) )      &     r   