
    Je<                         d Z ddlmZ ddlZddlmZm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 dd
lmZ ddlmZmZ  G d d      Z G d d      Z G d de      Zy)z
Layout container.
    )OrderedDictN)QtSlot)QMessageBox)SpyderAPIError)_)PluginMainContainer)BaseGridLayoutType)DefaultLayouts)LayoutSaveDialogLayoutSettingsDialogc                   D    e 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y)LayoutContainerActionsdefault_layout_actionmatlab_layout_actionrstudio_layout_actionhorizontal_split_layout_actionvertical_split_layout_actionsave_layout_actionshow_layout_preferences_actionreset_layout_actionzMaximize paneFullscreen modeUse next layoutUse previous layoutz
Close panezLock unlock panesN)__name__
__module____qualname__DefaultLayoutMatlabLayoutRStudioHorizontalSplitVerticalSplitSaveLayoutActionShowLayoutPreferencesActionResetLayoutMaximizeCurrentDockwidget
Fullscreen
NextLayoutPreviousLayoutCloseCurrentDockwidgetLockDockwidgetsAndToolbars     A/usr/lib/python3/dist-packages/spyder/plugins/layout/container.pyr   r      sY    +M)L%G6O2M+"B'K !0 #J #J +N * "5r-   r   c                       e Zd ZdZdZy)LayoutPluginMenusplugins_menulayouts_menuN)r   r   r   PluginsMenuLayoutsMenur,   r-   r.   r0   r0   :   s     K Kr-   r0   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	 e
       d        Z e
       d	        Z e
       d
        Z e
       d        Z e
       d        ZddZd Zy)LayoutContainerzU
    Plugin container class that handles the Spyder quick layouts functionality.
    c           	      J    t                _        d  _        d  _        d  _        d  _         j                  t        j                  t        d       j                  d       j                  j                  t        j                  dd       _         j                  t        j                   t        d       j                  d       fdt        j                  dd	       _         j                  t        j$                  t        d
       j                  j&                  t        j                  dd       _        t*        j,                  dk(  r? j(                  j/                  d        j(                  j1                  t        d              j                  t        j2                  d fdt        j                  dd       _         j                  t        j6                  t        d       j8                  t        j                  d       _         j                  t        j<                  t        d       j>                  t        j                  d       _          j                  t        jB                  t        d       jD                  d       _#         j                  t        jH                  t        d       jJ                  t        j                  dd       _&         j                  t        jN                  t        d       jP                  t        j                  dd       _)         jU                  tV        jX                  t        d             _         jU                  tV        jZ                  t        d             _.         j\                  j_                  d       y )NzClose current pane
close_paneTr   )texticon	triggeredcontextregister_shortcutshortcut_contextzMaximize current panemaximizec                 8    j                   j                         S N)_pluginmaximize_dockwidget)stateselfs    r.   <lambda>z'LayoutContainer.setup.<locals>.<lambda>\   s    $,,"B"B"D r-   )r9   r:   toggledr<   r=   r>   r   )r9   r;   r<   r=   r>   darwinFz2For fullscreen mode use the macOS built-in feature c                 8    j                   j                         S rA   )rB   toggle_lock)checkedrE   s    r.   rF   z'LayoutContainer.setup.<locals>.<lambda>r   s    ((* r-   zSave current layout)r;   r<   r=   zLayout preferences)r9   r;   r<   r=   zReset to Spyder default)r9   r;   r=   r   )r;   r<   r=   r>   r   zWindow layoutsPaneszcheckbox-padding)0r   _spyder_layouts_save_dialog_settings_dialog_layouts_menu_current_quick_layoutcreate_actionr   r*   r   create_iconrB   close_current_dockwidgetr   ApplicationShortcut_close_dockwidget_actionr&   _maximize_dockwidget_actionr'   toggle_fullscreen_fullscreen_actionsysplatform
setEnabled
setToolTipr+   _lock_interface_actionr#   show_save_layout_save_layout_actionr$   show_layout_settings_show_preferences_actionr%   reset_window_layout_reset_actionr(   toggle_next_layout_toggle_next_layout_actionr)   toggle_previous_layout_toggle_previous_layout_actioncreate_menur0   r4   r3   _plugins_menusetObjectNamerE   s   `r.   setupzLayoutContainer.setupD   s9   *}  $!%)" )-(:(:"99'(!!,/ll;;**"  ); )
% ,0+=+="<<*+!!*-D**"  ,> ,"( #'"4"4"--$%ll44**"  #5 #" <<8###..u5##..q 2J 0K L '+&8&8"==+**"  '9 '
# $(#5#5"33#$++**# $6 $
  )-(:(:">>'(//**# ); )
% "//"..,-..#	 0 
 +/*<*<"-- --**"  += +"' /3.@.@"11#$11**"  /A /"+ "--))1-=+>@ "--))1W:7(();<r-   c                      y rA   r,   rm   s    r.   update_actionszLayoutContainer.update_actions   s    r-   c                    | j                   }|j                          | j                  d      }| j                  d      }| j                  d      }| j                  d      }g }|D ]}  }||v s|| j                  v r |}| j                  |   j	                         }n|j                  |      }||   }|| fd}	| j                  || |	       dd      }
|j                  |
        |D ]  }| j                  ||d	
        | j                  | j                  | j                  fD ]  }| j                  ||d
        | j                  j                  t        |      dk7         y)zB
        Update layouts menu and layouts related actions.
        namesui_namesorderactivec                       fdS )Nc                  &    j                         S rA   )quick_layout_switchirE   s   r.   rF   zMLayoutContainer.update_layout_menu_actions.<locals>.trigger.<locals>.<lambda>   s    4#;#;A#> r-   r,   ry   s   ``r.   triggerz;LayoutContainer.update_layout_menu_actions.<locals>.trigger   s	    >>r-   FT)r9   r;   r=   	overwritelayouts_sectionsectionlayouts_section_2r   N)rQ   clear_actionsget_confrN   get_nameindexrS   appendadd_item_to_menura   rc   re   r]   len)rE   menurr   rs   rt   ru   actionsnamer   r{   layout_switch_actionitems               r.   update_layout_menu_actionsz*LayoutContainer.update_layout_menu_actions   s    !!g&==,g&x( 	5Dv~4/// E//6??AD!KK-E#E?D $$ ? (,'9'9%i&+" (: ($ 34+	5.  	ID!!$6G!H	I --t/L/L'') 	KD!!$6I!J	K 	%%00UqAr-   c                 2    t        j                  | ||       y)z@Expose a QMessageBox.critical dialog to be used from the plugin.N)r   critical)rE   titlemessages      r.   critical_messagez LayoutContainer.critical_message   s    T5'2r-   c                    t        |t              st        d      |j                  }|| j                  v rt        dj                  |             ||      }|j                          || j                  |<   | j                  d      }| j                  d      }| j                  d      }| j                  d      }||vr|j                  |       |j                  |j                                |j                  |       |j                  |       | j                  d|       | j                  d|       | j                  d|       | j                  d|       yy)a  
        Register a new layout type.

        Parameters
        ----------
        parent_plugin: spyder.api.plugins.SpyderPluginV2
            Plugin registering the layout type.
        layout_type: spyder.plugins.layout.api.BaseGridLayoutType
            Layout to register.
        z4A layout must be a subclass is `BaseGridLayoutType`!z'Layout with id `{}` already registered!rr   rs   rt   ru   N)
issubclassr
   r   IDrN   format_check_layout_validityr   r   r   set_conf)	rE   parent_pluginlayout_type	layout_idlayoutrr   rs   rt   ru   s	            r.   register_layoutzLayoutContainer.register_layout   s3    +'9: FH H  NN	,,, 9@@KM M ]+%%'*0Y'g&==,g&x(E!LL#OOFOO-.LL#MM)$MM'5)MM*h/MM'5)MM(F+ "r-   c                 p    || j                   vrt        dj                  |            | j                   |   S )a  
        Get a registered layout by its ID.

        Parameters
        ----------
        layout_id : string
            The ID of the layout.

        Raises
        ------
        SpyderAPIError
            If the given id is not found in the registered layouts.

        Returns
        -------
        Instance of a spyder.plugins.layout.api.BaseGridLayoutType subclass
            Layout.
        z&Layout with id `{}` is not registered!)rN   r   r   )rE   r   s     r.   
get_layoutzLayoutContainer.get_layout  sB    & D000 8??	JL L ##I..r-   c                    | j                  d      }| j                  d      }| j                  d      }| j                  d      }|D cg c]   }|| j                  j                         vr|" }}t        | |      x}| _        |j                         r|j                  j                         }|| j                  v r9t        j                  | t        d      t        d      j                  |             y||v rjt        j                  | t        d      t        d	      j                  |      t        j                  t        j                  z        }|j                  |      }	nJd
}d|v r|j                  d      }	|||	<   nt!        |      }	|j#                  |       |j#                  |       ||vr|j#                  |       ||vr|j#                  |       |rt| j$                  j'                  dj                  |	      d       | j)                  d|       | j)                  d|       | j)                  d|       | j)                  d|       | j+                          yyc c}w )zShow the save layout dialog.rr   rs   rt   ru   ErrorzrLayout <b>{0}</b> was defined programatically. It is not possible to overwrite programatically registered layouts.NWarningz?Layout <b>{0}</b> will be overwritten. Do you want to continue?Tz
layout_{}/quick_layoutsr~   )r   rN   keysr   rO   exec_	combo_boxcurrentTextr   r   r   r   warningYesNor   r   r   rB   save_current_window_settingsr   r   )
rE   rr   rs   rt   ru   r   dialog_namesdlganswerr   s
             r.   r`   z LayoutContainer.show_save_layout  s"    g&==,g&x(). Dt';';'@'@'BB  D D"24"FFd99;==,,.Dt+++$$gJ , --3VD\ u}$,,iL 1 228&,OOknn4 D)5=!KK-E#'E%LJELL&T" 6!d#8#%99 ''. : Igu-j(3gu-h/++-_ 	Ds   	%Ic                 "   | j                  d      }| j                  d      }| j                  d      }| j                  d      }t        | j                  j                               }t	        | |||||      x}| _        |j                         r| j                  d|j                         | j                  d|j                         | j                  d|j                         | j                  d|j                         | j                          yy)zLayout settings dialog.rr   rs   rt   ru   N)r   listrN   r   r   rP   r   r   rr   rs   rt   ru   r   )rE   rr   rs   rt   ru   	read_onlyr   s          r.   rb   z$LayoutContainer.show_layout_settingsV  s     g&==,g&x(--2245	&:%5&)'= 	=d#99;MM'399-MM*cll3MM'399-MM(CJJ/++- r-   c                     t        j                  | t        d      t        d      t         j                  t         j                  z        }|t         j                  k(  r| j
                  j                  d       yy)zReset window layout to default.r   z}Window layout will be reset to default settings: this affects window position, size and dockwidgets.
Do you want to continue?T)defaultN)r   r   r   r   r   rB   setup_layout)rE   r   s     r.   rd   z#LayoutContainer.reset_window_layouti  se     $$iL ) * OOknn,
 [__$LL%%d%3 %r-   c                 &    | j                  d       y)zAUse the previous layout from the layouts list (default + custom).previousNtoggle_layoutrm   s    r.   rh   z&LayoutContainer.toggle_previous_layoutx  s     	:&r-   c                 &    | j                  d       y)z=Use the next layout from the layouts list (default + custom).nextNr   rm   s    r.   rf   z"LayoutContainer.toggle_next_layout}  s     	6"r-   c                    | j                  d      }| j                  d      }| j                  d      }t        |      dk(  ryg }|D ]'  }||v s|j                  |j                  |             ) | j                  }ddd}||j                  t
        j                        }||v r|j                  |      }	nd}	|	||   z   t        |      z  }
||
   }||   | j                  v }|r|||
      }| j                  |       y)	zChange current layout.rr   rt   ru   r   N   )r   r   )	r   r   r   r   rR   r   SpyderLayoutrN   rx   )rE   	directionrr   rt   ru   layout_indexr   current_layoutdiccurrent_index	new_indexindex_or_layout_idis_layout_ids                r.   r   zLayoutContainer.toggle_layout  s   g&g&x(v;! 	7Dv~##EKK$56	7 33b)!"[[)D)DEN\)(..~>MM"S^3s<7HH	))4$%)=)== 	 !&|I'>!?  !34r-   c                     | j                   j                  |      }|@t        |t              r|| _        y| j                  d      }|j                  |      | _        yy)z
        Switch to quick layout number *index* or *layout id*.

        Parameters
        ----------
        index: int or str
        Nrr   )rB   rx   
isinstanceintrR   r   r   )rE   r   possible_current_layoutrr   s       r.   rx   z#LayoutContainer.quick_layout_switch  s^     #',,"B"B#  #.137-D*g.-2[[+.-* /r-   N)r   )r   r   r   __doc__rn   rp   r   r   r   r   r   r`   rb   rd   rh   rf   r   rx   r,   r-   r.   r6   r6   ?   s    `=D*B\3$,L/2 
V9. 9.v 
V. .$ 
V4 4 
V' ' 
V# #"5H-r-   r6   )r   collectionsr   r[   qtpy.QtCorer   r   qtpy.QtWidgetsr   spyder.api.exceptionsr   spyder.api.translationsr   !spyder.api.widgets.main_containerr	   spyder.plugins.layout.apir
   spyder.plugins.layout.layoutsr   $spyder.plugins.layout.widgets.dialogr   r   r   r0   r6   r,   r-   r.   <module>r      sS   
 $ 
 ! & 1 % A 8 8,5 5:! !
x-) x-r-   