
    Je                     "   d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZ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$ 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l0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;  ee5jx                        xZ=Z>ej~                  dk(  Z@ G d de      ZA G d deA      ZB G d deA      ZC G d de$      ZD G d de      ZE G d de      ZFd ZGeHdk(  r eG        yy) zSpyder interactive tours    )ceilN)QEasingCurveQPointQPropertyAnimationQRectFQtSignal)QBrushQColorQIconQPainterQPainterPathQPenQPixmapQRegion)QActionQApplication	QComboBoxQDialogQGraphicsOpacityEffectQHBoxLayoutQLabelQLayoutQMainWindowQMenuQMessageBoxQPushButtonQSpacerItemQToolButtonQVBoxLayoutQWidget)__docs_url__)Panel)_)DefaultLayouts)to_binary_string)ima)get_image_path)QStylePaletteSpyderPalette)add_actionscreate_action)DialogStyledarwinc                        e Zd ZdZ e       Z f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 xZS )FadingDialogz>A general fade in/fade out QDialog with some builtin functionsc                 N   t         t        |   |       || _        t	        |      | _        t        |      | _        |d   | _        |d   | _	        |d   | _
        |d   | _        d | _        d | _        d| _        g | _        g | _        g | _        g | _        | j'                  d       y )Nr   F)superr0   __init__parentminopacity_minmaxopacity_maxduration_fadeinduration_fadeouteasing_curve_ineasing_curve_outeffectanim_fade_running_funcs_before_fade_in_funcs_after_fade_in_funcs_before_fade_out_funcs_after_fade_outsetModal)selfr5   opacitydurationeasing_curve	__class__s        >/usr/lib/python3/dist-packages/spyder/plugins/tours/widgets.pyr4   zFadingDialog.__init__4   s    lD*62w<w<'{ (+A ,R 0	"%'"$&!&(#%'"e    c                      |D ]	  } |         y N )rF   funcsfuncs      rK   _runzFadingDialog._runI   s     	DF	rL   c                 :    | j                  | j                         y rN   )rR   rA   rF   s    rK   _run_before_fade_inz FadingDialog._run_before_fade_inM       		$,,-rL   c                 :    | j                  | j                         y rN   )rR   rB   rT   s    rK   _run_after_fade_inzFadingDialog._run_after_fade_inP   s    		$++,rL   c                 :    | j                  | j                         y rN   )rR   rC   rT   s    rK   _run_before_fade_outz!FadingDialog._run_before_fade_outS   s    		$--.rL   c                 :    | j                  | j                         y rN   )rR   rD   rT   s    rK   _run_after_fade_outz FadingDialog._run_after_fade_outV   rV   rL   c                     d| _         y )NFr@   rT   s    rK   _set_fade_finishedzFadingDialog._set_fade_finishedY   s
    "rL   c                     d| _         t        |       | _        | j                  | j                         t	        | j                  t        d            | _        y )NTrG   )r@   r   r>   setGraphicsEffectr   r&   r?   rT   s    rK   _fade_setupzFadingDialog._fade_setup\   sC    !,T2t{{+&KK!1)!<>	rL   c                    | j                          | j                          | j                          | j                          | j                  j                  | j                         | j                  j                  | j                         | j                  j                  | j                         | j                  j                  | j                         | j                  j                  j                  |       | j                  j                  j                  | j                         | j                  j                  j                  | j                          | j                  j#                          y rN   )rU   rb   showraise_r?   setEasingCurver<   setStartValuer7   setEndValuer9   setDurationr:   finishedconnectr_   rX   startrF   on_finished_connects     rK   fade_inzFadingDialog.fade_ind   s      "				  !5!56		 0 01		d../		d223		""#67		""4#:#:;		""4#:#:;		rL   c                    | j                          | j                          | j                  j                  | j                         | j                  j                  | j                         | j                  j                  | j                         | j                  j                  | j                         | j                  j                  j                  |       | j                  j                  j                  | j                         | j                  j                  j                  | j                         | j                  j                          y rN   )rZ   rb   r?   rf   r=   rg   r9   rh   r7   ri   r;   rj   rk   r_   r\   rl   rm   s     rK   fade_outzFadingDialog.fade_outr   s    !!#		  !6!67		 0 01		d../		d334		""#67		""4#:#:;		""4#;#;<		rL   c                     | j                   S rN   r^   rT   s    rK   is_fade_runningzFadingDialog.is_fade_running~   s    !!!rL   c                     || _         y rN   )rA   rF   rP   s     rK   set_funcs_before_fade_inz%FadingDialog.set_funcs_before_fade_in   
    %*"rL   c                     || _         y rN   )rB   ru   s     rK   set_funcs_after_fade_inz$FadingDialog.set_funcs_after_fade_in   s
    $)!rL   c                     || _         y rN   )rC   ru   s     rK   set_funcs_before_fade_outz&FadingDialog.set_funcs_before_fade_out   s
    &+#rL   c                     || _         y rN   )rD   ru   s     rK   set_funcs_after_fade_outz%FadingDialog.set_funcs_after_fade_out   rw   rL   )__name__
__module____qualname____doc__r	   sig_key_pressedr4   rR   rU   rX   rZ   r\   r_   rb   ro   rq   rs   rv   ry   r{   r}   __classcell__rJ   s   @rK   r0   r0   0   sX    HhO*.-/.#>
"+*,+rL   r0   c                   \     e Zd ZdZ	 d fd	Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )FadingCanvasz=The black semi transparent canvas that covers the applicationc                     t         t           ||||       | _        | _        | _        t        t        j                         _	        d _
        d _        d _        d _        d _        d _        d _        d _        d _        d _        d _         j+                  t,        j.                  t,        j0                  z          j3                  t,        j4                          j3                  t,        j6                          j9                  d        j;                  t,        j<                          j?                   j@                  g        jC                   fd fdg       y)z;Create a black semi transparent canvas that covers the app.   NFc                  &     j                  d       S rN   )update_widgetsrT   s   rK   <lambda>z'FadingCanvas.__init__.<locals>.<lambda>   s    t/B/B4/H rL   c                  &     j                  d       S rN   )update_decorationrT   s   rK   r   z'FadingCanvas.__init__.<locals>.<lambda>   s    t/E/Ed/K rL   )"r3   r   r4   r5   tourcolorr   r*   COLOR_ERROR_2color_decorationstroke_decorationregion_maskregion_subtractregion_decorationwidgets
decorationinteraction_onpath_currentpath_subtract	path_fullpath_decorationsetWindowFlagsr   DialogFramelessWindowHintsetAttributeWA_TranslucentBackgroundWA_TransparentForMouseEventsrE   setFocusPolicyNoFocusrv   update_canvasr}   )rF   r5   rG   rH   rI   r   r   rJ   s   `      rK   r4   zFadingCanvas.__init__   s3    	lD*67H+7	9	 
 &}'B'B C!"#!%# !# 	BII(>(>>?"556"99:eBJJ'%%t'9'9&:;%%'H'K'M 	NrL   c                     || _         y rN   )r   )rF   values     rK   set_interactionzFadingCanvas.set_interaction   s
    #rL   c           	      h	   | j                   j                         j                         | j                   j                         j                         }}t	               | _        t	               | _        t	               | _        t        dd||      | _	        | j
                  j                  dd||       | j                  W| j                  D ]  }t	               }||j                          |j                          |j                         }|j                         |j                         }}|j                  | j                   t!        dd            }|j#                         |j%                         }
}	|j                  t'        |	|
||             t        |	|
||      }| j(                  r | j                  j+                        | _	        | j                  j-                  |      | _         | j
                  j+                  | j                        | _        n| j
                  | _        | j0                  | j0                  D ]  }t3        |t4              r|g}g }|D ]  }|j                          |j                          |j                         }|j                         |j                         }}|j                  | j                   t!        dd            }|j#                         |j%                         }
}	|j7                  |	|
||f        t9        |D cg c]  }|d   	 c}      }	t9        |D cg c]  }|d   	 c}      }
t;        |D cg c]  }|d   |d   z    c}      |	z
  }t;        |D cg c]  }|d   |d   z    c}      |
z
  }t	               }|j                  t'        |	|
||             t        |	dz
  |
dz
  |dz   |dz         }t        |	dz   |
dz   |dz
  |dz
        }|j+                  |      }| j(                  r | j                  j-                  |      | _	        | j                  j-                  |      | _         n| j                  j                  dddd       | j=                  | j                         | j?                          | jA                          y c c}w c c}w c c}w c c}w )Nr      r      )!r5   sizewidthheightr   r   r   r   r   r   addRectr   re   rd   frameGeometrymapTor   xyr   r   
subtractedunitedr   r   
isinstancer!   appendr6   r8   setMaskupdaterepaint)rF   whwidget	temp_pathgeor   r   pointr   r   temp_regionr   geomsgeomtemp_region_1temp_region_2s                    rK   r   zFadingCanvas.update_canvas   s   {{!'')4;;+;+;+=+D+D+F1%)^+~"1aA.q!Q*<<#,, J(N	%MMOKKM ..0C$'IIK6E"LLfQlCE 779eggiqA%%fQ5&&AB")!Qv">K&&'+'7'7'B'B;'OD$%)%7%7%>%>y%I"#J& !% 9 9$:L:L MD $D??&?? Ngw/&iG% 8FMMOKKM ..0C$'IIK6E"LLfQlCE 779eggiqALL!Qv!678 U3Ta34U3Ta34279*.DGd1g%9 :<=>279*.DGd1g%9 :<=>(N	!!&Auf"=> '!QqS%'6!8 D '!QqS%'6!8 D+66}E&&'+'7'7'>'>{'KD$'+';';'B'B9'M$9N<   ((Aq!4 	T%%&/ 4399s   R 
-R%
	R*
.R/
c                     || _         y rN   )r   rF   r   s     rK   r   zFadingCanvas.update_widgets  s	    rL   c                     || _         y rN   )r   r   s     rK   r   zFadingCanvas.update_decoration  s	    !rL   c                 *   t        |       }|j                  t         j                         |j                  | j                  t        | j                               |j                  | j                  t        | j                  | j                               yzOverride Qt methodN)r   setRenderHintAntialiasingfillPathr   r
   r   
strokePathr   r   r   r   rF   eventpainters      rK   
paintEventzFadingCanvas.paintEvent  sn    4.h334**F4::,>?4//d6K6K6:6L6L2N 	OrL   c                     | j                         s2t        j                  }|| _        | j                  j                          yyr   rs   r   
Key_Escapekey_pressedr   emitrF   keys     rK   rejectzFadingCanvas.reject  6    ##%--C"D  %%' &rL   c                      yr   rO   rF   r   s     rK   mousePressEventzFadingCanvas.mousePressEvent  s    rL   c                 Z    | j                         r| j                  j                          yyOverride Qt method.N)hasFocusr   
gain_focusr   s     rK   focusInEventzFadingCanvas.focusInEvent  s"     ==?II  " rL   c                 l    | j                   j                  dk7  r| j                   j                          yy)r   r   N)r   step_current
lost_focusr   s     rK   focusOutEventzFadingCanvas.focusOutEvent$  s+     99!!Q&II  " 'rL   rN   )r~   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   s   @rK   r   r      s@    G%NN$EN"O(##rL   r   c                   p     e Zd ZdZ	 	 d fd	Zd Zd Z	 	 ddZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Z xZS )FadingTipBoxz9Dialog that contains the text for each frame in the tour.c	                 (   t         t        |   ||||       | j                  | _        || _        || _        d | _        d| _        d| _	        d | _
        | j                  t        j                         | j                  t        j                  t        j                   z  t        j"                  z         | j%                  d       d }	 |	t'        j(                  d            | _         |	t'        j(                  d            | _         |	t'        j(                  d            | _         |	t'        j(                  d            | _         |	t'        j(                  d	            | _        t5        t7        d
            | _        d | _        t=               | _        tA               | _!        tA               | _"        tG               | _$        tA               | _%        tA               | _&        | jL                  jO                  d       | jL                  jQ                  | j                         | jL                  jS                  | j                         | jJ                  jU                  t        jV                         | jL                  jY                  d       | jL                  | jD                  | jJ                  | jH                  | j*                  | j8                  | j2                  | j.                  | j0                  | j,                  | j>                  g| _-        t]        d      }
|| _/        || _0        || _1        dje                  | jb                  jg                         |
      | _4        | jh                  jk                  dd      | _4        | jm                  t        jn                         | jZ                  D ]<  }|jm                  t        jp                         |js                  | jh                         > tu               }|jw                  | jH                         |jy                          |jw                  | j*                         |j{                  t}        | j                  | j                               tu               }|jw                  | jL                         |jw                  | jB                         |j{                  t}        dd             tu               }|jy                          |jw                  | j8                         |jy                          |j{                  t}        | j                  | j                               tu               }|jw                  | j,                         |jw                  | j.                         |jy                          |jw                  | jJ                         |jy                          |jw                  | j2                         |jw                  | j0                         |j{                  t}        | j                  | j                               t               }|j                  |       |jy                          |j{                  t}        dd             |j                  |       |j                  |       |jy                          |j{                  t}        dd             |j                  |       |j{                  t}        | j                  | j                               |j                  t        j                         | j                  |       | j                  | j                  g       | j                  | j                  | j                  g       | j                  | j                  g       | j                  t        j                         y )Nr   ,  Fc                 ^    t               }|j                  d       |j                  |        |S NT)r   setAutoRaisesetIcon)iconbts     rK   
toolbuttonz)FadingTipBox.__init__.<locals>.toolbuttonA  s&    BOOD!JJtIrL   z
tour.closez	tour.homeztour.previousztour.endz	tour.nextzRun codeThidea  QComboBox {{
                             padding-left: 5px;
                             background-color: {}
                             border-width: 0px;
                             border-radius: 0px;
                             min-height:20px;
                             max-height:20px;
                             }}

                             QComboBox::drop-down  {{
                             subcontrol-origin: padding;
                             subcontrol-position: top left;
                             border-width: 0px;
                             }}

                             QComboBox::down-arrow {{
                             image: url({});
                             }}
                             \/      )Mr3   r   r4   r?   holderr5   r   framesoffset_shadowfixed_widthr   r   r   r   r   r   r   WindowStaysOnTopHintrE   r'   r   button_closebutton_homebutton_previous
button_endbutton_nextr   r$   
button_runbutton_disabler   button_currentr   label_imagelabel_titler   combo_titlelabel_currentlabel_contentsetOpenExternalLinkssetMinimumWidthsetMaximumWidthsetAlignmentAlignCentersetWordWrapr   r(   	color_top
color_backcombobox_backgroundformatname
stylesheetreplacer   StrongFocusr   setStyleSheetr   	addWidget
addStretchaddSpacerItemr   r    	addLayoutsetSizeConstraintr   SetFixedSize	setLayoutrv   _disable_widgetsry   _enable_widgetssetFocusr{   setContextMenuPolicyCustomContextMenu)rF   r5   rG   rH   rI   r   r  r  r  r   arrowr   
layout_toplayout_content
layout_runlayout_navigationlayoutrJ   s                    rK   r4   zFadingTipBox.__init__-  s   lD*67H+7	9ii	"556BII(>(>>334 	5e	 'sxx'=>%chh{&;<)#((?*CD$SXXj%9:%chh{&;<%a
m4")m!8!8$;#X#X//5**4+;+;<**4+;+;<''7&&t,**D,<,<**D,<,<))4??D<L<L,,doo(($*=*=	? v&"$#6 !$ "((@(@(E(E(G!O% 	( //11$<BNN+ll 	2F!!"**-  1	2 !]
T--.T../  T-?-?-1-?-?"A 	B %  !3!34  !1!12$$[A%67 ]
T__-  T-?-?-1-?-?"A 	B (M##D$4$45##D$8$89$$&##D$6$67$$&##D$4$45##DOO4''D4F4F484F4F)H 	I $[R01($[R01*+[););)-););= 	> 	  !5!56v%%t'<'<&=>$$d&:&:DMM%JK&&(=(='>?!!""6"67rL   c                 H    | j                   D ]  }|j                  d        y r   )r   setDisabledrF   r   s     rK   r!  zFadingTipBox._disable_widgets  s#    ll 	%Ft$	%rL   c                 8   | j                  t        j                  t        j                  z  t        j                  z         | j
                  D ]  }|j                  d        | j                  dk(  r7| j                  j                  d       | j                  j                  d       nE| j                  dk(  r6| j                  j                  d       | j                  j                  d       | j                  j                  t        j                  dk(         y )NFpreviousTnextr.   )r   r   r   r   r   r   r-  r  r   r   r  r  r  sysplatformr.  s     rK   r"  zFadingTipBox._enable_widgets  s    BII(>(>>334 	5ll 	&Fu%	& *,  ,,T2((.  F*((.OO''-##CLLH$<=rL   c                    | j                   j                  |       | j                  j                          | j                  j	                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       || _	        |7| j                  j                  d       | j                  j                  d       n|j                  d      d   }t        t        |      |      | _	        | j                  j!                  | j                         | j                  j#                  | j                  j%                                || j&                  j)                  d       nI| j&                  j)                  d       t*        j,                  dk(  r| j&                  j/                  d       | j1                         j3                          y )Nr   .r2   FTr.   zNot available on macOS)r  setTextr  clearaddItemssetCurrentIndexr	  r  r
  imager  setFixedHeightsetFixedWidthsplitr   r(   	setPixmapsetFixedSizer   r  
setVisibler2  r3  
setToolTipr+  activate)	rF   titlecontentcurrentr:  runr   step	extensions	            rK   set_datazFadingTipBox.set_data  s{     ' !!&)((.
 	""7+##G,""7+
=++A.**1-C(,I !6	BDJ&&tzz2))$**//*;<;OO&&u-OO&&t,||x'**+CD 	 rL   c                     t        |      | _        t        |      | _        | j                  t	        | j                  | j                               y rN   )r   r   r   mover   )rF   r   r   s      rK   set_poszFadingTipBox.set_pos  s3    aa		&()rL   c                 4   | j                         }d}| j                  }|j                         |j                         }}|j	                         |z
  |j                         |z
  }}d\  }}	||}}
t               | _        | j                  j                  |
|	|z          | j                  j                  |
|z
  |	||dd       | j                  j                  ||z   |	       | j                  j                  ||	||dd       | j                  j                  |||z
         | j                  j                  |||z
  ||dd       | j                  j                  |
|z
  |       | j                  j                  |
|z
  ||z
  ||dd       | j                  j                          d}d}||}	}||z
  }
t               | _        | j                  j                  |
|	|z          | j                  j                  |
|	|z          | j                  j                  |
|z
  |	||dd       | j                  j                  ||z   |	       | j                  j                  ||	||dd       | j                  j                  ||	|z          | j                  j                  |
|	|z          y )	Nr   )r   r           g     V@g     f@g     p@$   r   )geometryr   r   r   r   r   r   round_rect_pathmoveToarcTolineTocloseSubpathtop_rect_path)rF   r   radiusshadowx0y0r   r   lefttoprightbottomheaderoffsets                 rK   build_pathszFadingTipBox.build_paths  sc   mmo###%%'B		f,cjjlV.Cv	cvv+~##E3<8""5<ffc#'	)##DK5""4ffdDI##D&-8""4#'	)##E&L&9""5<#($	0))+ Fc )^!!%v6!!%v6  vsFFCN!!$v+s3  sFFD$G!!$f5!!%v6rL   c                 x   | j                          t        |       }|j                  t        j                         |j	                  | j
                  | j                         |j	                  | j                  | j                         |j                  | j
                  t        t        j                  d             y)r   r   N)ra  r   r   r   r   rQ  r  rV  r  r   r   r   grayr   s      rK   r   zFadingTipBox.paintEvent  s    4.h334--t?++T^^<4//bggq1ABrL   c           
         |j                         }|| _        t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  g
}||v r,| j                         s| j                  j                          yyyr   )r   r   r   	Key_RightKey_LeftKey_DownKey_Upr   
Key_PageUpKey_PageDownKey_HomeKey_EndKey_Menurs   r   r   )rF   r   r   keyss       rK   keyReleaseEventzFadingTipBox.keyReleaseEvent'  s    iikbkk2;;		r}}booRZZ6 $;'')$$))+ * rL   c                     | j                   j                          | j                          |j                         t        j                  k(  ryyr   )r5   re   buttonr   RightButtonr   s     rK   r   zFadingTipBox.mousePressEvent4  s7     	<<>R^^+ ,rL   c                 8    | j                   j                          yr   )r   r   r   s     rK   r   zFadingTipBox.focusOutEvent@  s     			rL   c                 H   t        |j                         |j                               }t        |       }g }t	        | t        d      t                     }|j                  d       |j                  |       t        ||       |j                  | j                  |             y )NzGo to step: )r   T)r   r   r   r   r,   r$   r   r-  r   r+   popupmapToGlobal)rF   r   posmenuactionsaction_titles         rK   context_menu_requestedz#FadingTipBox.context_menu_requestedE  sz    UWWY	*T{$T1^+<57K  &|$ 	D'"

4##C()rL   c                     | j                         s2t        j                  }|| _        | j                  j                          yy)z$Qt method to handle escape key eventNr   r   s     rK   r   zFadingTipBox.rejectS  r   rL   )NNNN)NN)r~   r   r   r   r4   r!  r"  rI  rL  ra  r   ro  r   r   r{  r   r   r   s   @rK   r   r   +  sW    CEIFJI8\%> DH !D*
$7L	C,
*(rL   r   c                       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d Zd Zd Zd Zd Zd Zd Zd Zd Zd dZd Zd Zd Zd Zd Zd Z y)!AnimatedTourz&Widget to display an interactive tour.c           
          t        j                   |       | _        ddg _        ddg _        ddg _        ddg _        t        j                   _	        t        j                  g _        d _        d _        d _        d  _        d  _        d  _        d  _        d  _        d  _        d  _        d  _        d  _        d _        d _        t7         j                   j
                   j                   j                   j                          _        t9         j                   j                   j                   j                   t:        t<        t:        	       _         j?                  t        j@                          j"                  jB                  jD                  jG                   jH                          j"                  jJ                  jD                  jG                   jL                          j"                  jN                  jD                  jG                   jP                          j"                  jR                  jD                  jG                   jT                          j"                  jV                  jD                  jG                   jX                          j"                  jZ                  jD                  jG                   j\                          j"                  jR                  jD                  jG                   fd
        j"                  j^                  j`                  jG                   jb                          j                  jd                  jG                   jf                          j                  jh                  jG                   jj                          j"                  jl                  jG                   jn                         d _8        d _9        y )Ni  iM  rN  gffffff?      ?r   F)r   )r   r  r  r  c                  N     j                   j                  j                  d      S r   )tipsr  r-  rT   s   rK   r   z'AnimatedTour.__init__.<locals>.<lambda>  s    DII((44T: rL   ):r!   r4   r5   duration_canvasduration_tipsopacity_canvasopacity_tipsr   blackr   r   LinearrI   current_stepr   stepscanvasr  r   
spy_windowinitial_fullscreen_stater   dockwidgetsr   rF  is_tour_set
is_runningr   r   MAIN_TOP_COLORMAIN_BG_COLORr   r   r  clickedrk   	next_stepr   previous_stepr   
close_tourr  run_coder   
first_stepr  	last_stepr  currentIndexChanged
go_to_stepsig_resized_resized	sig_moved_movedr   _key_pressedsetting_datahidden)rF   r5   s   ` rK   r4   zAnimatedTour.__init__^  s   v& !$Sz!3Z"Cj #JXX
)001
	(,%  #4;;0C0C#'#7#79J9J#'::D: !d.?.?!%!3!3T5F5F&*n,95C	E	 	"99: 			%%--dnn=		!!))11$2D2DE		&&..t?		$$,,T]];		%%--doo>		$$,,T^^<		$$,,:	<		1199$//J 	''6%%dkk2 			!!))$*;*;< "rL   c                 0   | j                   r| j                  j                         }| j                  j	                  |j                         |j                                | j                  j                          | j                  r| j                          y y y rN   )
r  r5   rP  r  r?  r   r   r   r  	_set_datarF   r   r   s      rK   r  zAnimatedTour._resized  sh    ??;;'')DKK$$TZZ\4;;=AKK%%'    rL   c                     | j                   rp| j                  j                         }| j                  j	                  |j                         |j                                | j                  r| j                          y y y rN   )	r  r5   rP  r  rK  r   r   r  r  r  s      rK   r  zAnimatedTour._moved  sX    ??;;'')DKKTVVXtvvx0   	 rL   c                     | j                   j                          | j                  j                  | j                  j                         y rN   )r  r   r  rq   rT   s    rK   _close_canvaszAnimatedTour._close_canvas  s,    		T[[--.rL   c                     | j                   j                  d        | j                   j                  d        | j                   j                          y rN   )r  r   r   r   rT   s    rK   _clear_canvaszAnimatedTour._clear_canvas  s8     	""4(%%d+!!#rL   c                 @   | j                          | j                  }|'|d   }| |j                          |j                          | j	                          | j
                  j                  | j                  j                         | j
                  j                          y Nr   )	r  r  rd   re   _locate_tip_boxr  ro   r  r   )rF   r   r   s      rK   
_move_stepzAnimatedTour._move_step  sz     ""QZF! 			$++334		rL   c                     t         j                  j                         }d|v ry d|v r9|D ]3  }|j                  |       |j	                          |j                          5 y d|v ry y )Nlinuxwinr.   )r2  r3  lowerrE   r   rd   )rF   r   r   r3  r   s        rK   
_set_modalzAnimatedTour._set_modal  sd    <<%%'hh! & !rL   c                    g }g }|D ]S  }	 |j                  d      d   }	 t        ||      }|j                  |       t        |d|      }|j                  |       U ||fS # t        $ r: d }d|v r.|j                         }t        ||j                  d      d         }| Y ww xY w# t        $ r t	        d|       }Y w xY w)Nr5  r   zget_current_editor()r2   zspy_window.
dockwidget)r=  getattrAttributeErrorget_current_editorevalr   )rF   namesr  r   r  r  basetemps           rK   _process_widgetszAnimatedTour._process_widgets  s     	%D2zz#q)	":t4D NN4  4t4Dt$+	%. ##% & D-5#668&tTZZ_R-@A| $ " 2k$012s/   B'A!!A B$!B'#B$$B''C Cc           	      b   d| _         | j                  | j                  | j                  }}}dj	                  |dz   |      }||   }t        |      D cg c]  \  }}dj	                  |dz   |d          }}}d\  }	}
}d\  }}}d}d|v r|d   }	d	|v r|d	   }
d
|v r'||   d
   }| j                  || j                        \  }}|| _        || _	        d|v r.||   d   }| j                  || j                        \  }}|| _
        d|v r||   d   }d|v r_| j                  j                  |d          |d   r| j                  d| j                  g       nV| j                  d| j                  g       n8| j                  j                  d       | j                  d| j                  g       d|v r|d   }|| _        | j                  j!                  |	|
|||||       | j#                          | j                  j%                  |       | j                  j'                  |       d| _         yc c}}w )z4Set data that is displayed in each step of the tour.Tz{0}/{1}r   z{0}. {1}rC  ) r  N)NNNNrD  r   r   r:  interactFrF  )r   rG  )r  r   r  r   r  	enumerater  r  r   r  r   r  r   r  r  rF  rI  _check_buttonsr   r   )rF   rG  r  r   rE  frameifcombobox_framesrC  rD  r:  r   r  r   rF  widget_namesdecos                     rK   r  zAnimatedTour._set_data  sM    "//T[[Ve""4!8U3t (1'8:#q! '--ac1W:> : : !-w+;(j e'NEI&G!$<	2L#'#8#89=$J G[&5 !$<5L#44\59__ FD*(DOe4L)EKK''j(9:Z 		{3tyyk2KK''.OOD499+.E>,CDH		5'7E3"1 	 	> 	"";/%%j1!k:s   "H+c                 ~   | j                   }| j                  j                         }|j                         |j	                         |j                         |j                         f\  }}}}|| _        || _        || _	        || _
        d}d}||d   |d   j                         }|j                         |j	                         |j                         |j                         f\  }}}}|d   j                  t        dd            }	|	j                         |	j	                         }}
|| j                  j                         k  r/|
|z   |z   }||dz  z   | j                  j                         dz  z
  }nF|
| j                  j                         z
  |z
  }||dz  z   | j                  j                         dz  z
  }|| j                  j                         z   | j                  | j                  z   kD  r||| j                  j                         z   | j                  | j                  z   z
  z
  |z
  }nt| j                  | j                  dz  z   | j                  j                         dz  z
  }| j                  | j                  dz  z   | j                  j                         dz  z
  }| j                  j                  ||       y )N   
   r   r   )r  r5   r   r   r   r   r   
width_mainheight_mainx_mainy_mainrP  rv  r   r  rL  )rF   r  r   r   r   r   r   deltar`  r   x_globy_globs               rK   r  zAnimatedTour._locate_tip_box7  sc   && kk'')!eegsuuw		SZZ\I1eV! "1~)!!n--/'*uuw'*yy{CJJL'B#1eV $A226!Q<@!&EGGI tyy((.A)DII,<,<,>q,@@A!22U:A)DII,<,<,>q,@@A		((**t{{T=M=M/MNtyy//11 KK$*:*::<=?EF  dooa//$))//2CA2EEAd..q004993C3C3Ea3GGA		!QrL   c                     | j                   | j                  }}d | j                  _        |dk(  rd| j                  _        ||dz
  k(  rd| j                  _        y y )Nr   r0  r   r1  )r   r  r  r  )rF   rG  r  s      rK   r  zAnimatedTour._check_buttonse  sQ    ''e#'		 19'1DII$519'-DII$ rL   c                    | j                   j                  }|t        j                  k(  s&|t        j                  k(  s|t        j
                  k(  r-| j                  | j                  dz
  k7  r| j                          y |t        j                  k(  s&|t        j                  k(  s|t        j                  k(  r | j                  dk7  r| j                          y |t        j                  k(  r| j                          y |t        j                  k(  r | j                  dk7  r| j!                          y |t        j"                  k(  r-| j                  | j                  dz
  k7  r| j%                          y |t        j&                  k(  r@| j                   j(                  j+                         }| j                   j-                  |       y y )Nr   r   )r  r   r   re  rg  rj  r   r  r  rf  rh  ri  r  r   r  rk  r  rl  r  rm  r	  rw  r{  )rF   r   rw  s      rK   r  zAnimatedTour._key_pressedo  s.   ii##BLL C2;;$6BOO#):):djj1n)LNNbkk!SBII%5bmm#):):a)? BMM!OOBKKD$5$5$:OOBJJ4#4#4

Q#FNNBKK))))--/CII,,S1  rL   c                 F    d| _         | j                  j                          y r   )r  r  r   rT   s    rK   _hidingzAnimatedTour._hiding  s    		rL   c                 j    | j                   }| j                  d   }|D ]  }|j                  |        y r  )rF  r   execute_code)rF   	codelinesconsolecodelines       rK   r  zAnimatedTour.run_code  s5    HH	,,q/! 	+H  *	+rL   c                     || _         || _        |d   | _        |d   | _        t	        | j                        | _        d| _        y )Nlastr   T)r  active_tour_indexlast_frame_activer   lenr  r  )rF   indexr   r  s       rK   set_tourzAnimatedTour.set_tour  s@    $!&!'Vn%
rL   c                 b   | j                   j                         s | j                   j                  j                  rt        j
                  dk(  rX| j                   j                  d       t        d      }t        d      }t        j                  | ||t        j                         y| j                   j                  j                  r%| j                   j                  j                          y| j                   j                  | j                   j                         t        j                   z         y)Nr.   TRequestz~To run the tour, please press the green button on the left of the Spyder window's title bar to take it out of fullscreen mode.F)r  isFullScreenlayouts_fullscreen_flagr2  r3  setUpdatesEnabledr$   r   informationOktoggle_fullscreensetWindowStatewindowStater   WindowFullScreen)rF   	msg_titlemsgs      rK   _handle_fullscreenzAnimatedTour._handle_fullscreen  s    OO((*''88||x'11$7iL	 5 6 ''i(38&&77''99;
  ..OO//1,,,./ rL   c                    | j                   j                  d       | j                         ry | j                   j                  j	                  dd       | j                   j                  j                  t        j                         | j                  j                         }|j                         |j                         |j                         |j                         f\  }}}}| j                  | _        | j                   j#                  ||       | j                   j%                  t'        ||             | j                   j                  d       | j                   j)                  | j*                         | j-                          d| _        y )NFzlayout_current_temp/quick_layouts)sectionT)r  r  r  r  save_current_window_settingsquick_layout_switchr%   SpyderLayoutr5   rP  r   r   r   r   r  r   r  r?  rK  r   ro   r  r  r  )rF   r   r   r   r   r   s         rK   
start_tourzAnimatedTour.start_tour  s#   ))%0""$<<"# 	= 	
 	33''	)kk""$!eegsuuw		SZZ\I1eV !22 	  /1&))$/DOO,rL   c                 6   | j                   j                  | j                         | j                  j	                  d       | j
                  j                  d       | j                  d| j                   g       | j
                  j                          	 | j                  | j                  j                  | j                     d<   d| _        | j                  j                  j!                  d       | j                  j	                  d       y # t        $ r Y Sw xY w)NFTr  current_temp)r  rq   r  r  r  r  r   r  r   r   r5   tours_availabler  	Exceptionr  r  r  rT   s    rK   r  zAnimatedTour.close_tour  s    		4--.))%0##E*tyyk*	 !! KK''(>(>?G
  33NC))$/  		s   0D 	DDc                 n    | j                          | j                  j                  | j                         y)z2Hide tips dialog when the main window loses focus.N)r  r  rq   r  rT   s    rK   	hide_tipszAnimatedTour.hide_tips  s$    		4<<(rL   c                 R    | j                          | j                          d| _        y)z4Unhide tips dialog when the main window loses focus.FN)r  r  r  rT   s    rK   unhide_tipszAnimatedTour.unhide_tips  s    rL   c                     | j                          | xj                  dz  c_        | j                  j                  | j                         y Nr   r  r   r  rq   r  rT   s    rK   r  zAnimatedTour.next_step  5    Q		4??+rL   c                     | j                          | xj                  dz  c_        | j                  j                  | j                         y r  r  rT   s    rK   r  zAnimatedTour.previous_step  r  rL   Nc                 |    | j                          || _        | j                  j                  | j                         y rN   r  )rF   numberid_s      rK   r  zAnimatedTour.go_to_step  s,    "		4??+rL   c                 @    | j                  | j                  dz
         y r  )r  r  rT   s    rK   r  zAnimatedTour.last_step  s    

Q'rL   c                 &    | j                  d       y r  )r  rT   s    rK   r  zAnimatedTour.first_step  s    rL   c                 @   | j                   r| j                  s| j                  sxt        j                  dk(  rC| j                         s2| j                          | j                         s| j                          yyy| j                         s| j                          yyyyy)z3Confirm if the tour loses focus and hides the tips.r.   N)	r  r  r  r2  r3  tour_has_focusr  any_has_focusr  rT   s    rK   r   zAnimatedTour.lost_focus  s    OO%%dkk||x'**,NN$--/) 0 -
 ))+NN$ , /:% rL   c                     | j                   r<| j                         r+| j                  s| j                  r| j	                          yyyyy)z7Confirm if the tour regains focus and unhides the tips.N)r  r  r  r  r   rT   s    rK   r   zAnimatedTour.gain_focus  s>    OO 2 2 4  T[[ &1  !5OrL   c                     | j                         xs> | j                  j                         xs" | j                         xs | j                         }|S )z.Returns True if tour or main window has focus.)r   r5   r  isActiveWindowrF   r  s     rK   r  zAnimatedTour.any_has_focus  sK    ]]_ < 4 4 6 <  "<&*&9&9&; 	
rL   c                     | j                   j                         xs6 | j                  j                         xs | j                   j                         }|S )z8Returns true if tour or any of its components has focus.)r  r   r  r  r  s     rK   r  zAnimatedTour.tour_has_focus  sE    YY! (T[[%9%9%; (YY%%' 	
rL   rN   )!r~   r   r   r   r4   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   r   r  r  rO   rL   rK   r~  r~  [  s    0@D!!/$"$:<"|, \.2&
+ (<0&)
,
,
,
(%rL   r~  c                   (     e Zd ZdZ fdZd Z xZS )OpenTourDialogzInitial widget with tour.c                    t         |   |       t        r4| j                         t        j
                  t        j                   z  z  }n"| j                         t        j                   z  }| j                  |       || _        t               }d}t        |      }t        |      }t               }t        |j                         t        j                   z        }	t        |j#                         t        j                   z        }
|j%                  |
|	t        j&                  t        j(                        }|j+                  |       |j-                          |j/                  |       |j-                          t        r|j1                  dddd       n|j1                  dddd       t        t3        d            }|j5                  dt        j6                          |j9                  d	       t        t3        d
            }|j5                  dt        j:                          |j9                  d	       |j=                  d       t               }t>        j@                  }t>        jB                  }t>        jD                  }t>        jF                  }t>        jH                  }t>        jJ                  }t>        jL                  }t>        jN                  }tQ        t3        d            | _)        | jR                  j5                  djU                  ||t        jV                  |t        jX                  ||             | jR                  j[                  d       tQ        t3        d            | _.        | j\                  j5                  djU                  ||t        jV                  |t        jX                  ||             | j\                  j[                  d       |j-                          |j/                  | jR                         t        s|j_                  d       |j/                  | j\                         t               }|ja                  |       tc               }|j/                  |       t        s#|j_                  d       |j/                  |       n"|j/                  |       |j_                  d       tc               }t        sT|j-                          |ja                  |       |j_                  d       |ja                  |       |j-                          n"|ja                  |       |ja                  |       t               }t        sT|j-                          |ja                  |       |j_                  d       |ja                  |       |j-                          n"|ja                  |       |ja                  |       | je                  |       | jR                  jf                  ji                  | jj                         | j\                  jf                  ji                  | jl                         | j5                  d|        | j1                  dddd       t        s| jo                  dd       y y )Nztour-spyder-logor   r  i#   zWelcome to Spyder!zfont-size: TzNCheck out our interactive tour to explore some of Spyder's panes and features.iT  z
Start toura	  QPushButton {{ background-color: {background_color};border-color: {border_color};font-size: {font_size};color: {font_color};padding: {padding}}}QPushButton:hover:!pressed {{ background-color: {color_hover}}}QPushButton:pressed {{ background-color: {color_pressed}}})background_colorborder_color	font_size
font_colorpaddingcolor_hovercolor_pressedFDismissr  r   r   zbackground-color:   (   i  i  )8r3   r4   MACwindowFlagsr   r   WindowContextHelpButtonHintr   tour_functionr   r(   r   r   intr   r-   IconScaleFactorr   scaledKeepAspectRatioSmoothTransformationr>  r  r  setContentsMarginsr$   r  TitleFontSizer  ContentFontSizer<  r)   COLOR_BACKGROUND_2COLOR_ACCENT_2COLOR_ACCENT_3COLOR_ACCENT_4COLOR_BACKGROUND_4COLOR_BACKGROUND_5COLOR_BACKGROUND_6COLOR_TEXT_1r   launch_tour_buttonr  ButtonsFontSizeButtonsPaddingsetAutoDefaultdismiss_button
addSpacingr  r    r   r  rk   _start_tourcloser?  )rF   r5   r%  flagsimages_layouticon_filename
image_pathr:  image_labelimage_heightimage_widthtour_label_title
tour_labelbuttons_layoutdialog_tour_colorstart_tour_colorstart_tour_hoverstart_tour_presseddismiss_tour_colordismiss_tour_hoverdismiss_tour_pressedr  r+  label_layoutvertical_layoutgeneral_layoutrJ   s                             rK   r4   zOpenTourDialog.__init__  s7    %%'"*A*A666+7 7E $$&"*H*H)HHEE"* $*#M2

#h5<<>K,G,GGH%++-+*E*EEF[,8J8J446e$  ",  ",,QB:,,QB: "!$8"9:&&[5N5N4O'PQ$$T* = >?
 	  ;{/J/J.K!LMt$  % %)<<(77(77*99*==*==,??"//
"-ao">--	0 &"2.&66&$33-1  3	4$ 	..u5)!I,7))	0 &"40&66&$33/3  5	6$ 	**51!!#  !8!89%%b)  !4!45'"}/0##A&"":."":.##B'%-&&(%%l3&&r*%%n5&&(%%l3%%n5$%%'$$V,%%a($$_5%%'$$V,$$_5~&''//0@0@A##++DJJ7./@.ABCBB/c3' rL   c                 D    | j                          | j                          y rN   )r=  r%  rT   s    rK   r<  zOpenTourDialog._start_tour  s    

rL   )r~   r   r   r   r4   r<  r   r   s   @rK   r  r    s    #K(ZrL   r  c                   Z     e Zd ZdZ ed      Z ed      Z fdZd Zd Z	d Z
d Z xZS )	TourTestWindow QResizeEvent
QMoveEventc                 8   t         t        |           | j                  dddd       | j	                  d       t        d|       | _        | j                  j                  d       | j                         }|j                  d      }|j                  | j                         | j                          t        |       | _        t        d	      | _        t        d
      | _        t        d      | _        t%        | j"                        }| j"                  j'                  |       t)        |t+        d            | _        | j,                  j/                  d       | j,                  j1                  d       | j,                  j3                  d       t5               }|j7                  | j                         |j9                          |j7                  | j                          |j7                  | j"                         | j                  j;                  |       | j=                  | j                         | j                  j>                  jA                  | jB                         | j                   j>                  jA                  | jD                         tG        |       | _$        y )Nr   d   i  iX  zExploring QMainWindowExitzExit programz&Filetest12rG   g{Gz?r  i  )%r3   rT  r4   setGeometrysetWindowTitler   exitsetStatusTipmenuBaraddMenu	addAction	statusBarr!   r   r   rq  button1button2r   ra   r   r&   r?   rg   rh   ri   r    r  r  r   setCentralWidgetr  rk   action1action2r~  r   )rF   menubarfile_r>   layrJ   s        rK   r4   zTourTestWindow.__init__  s   nd,.c3,34FD)			~. ,,.(		" 	 dm!&)"3'"3''5&&v.&v/?	/JK			%		c"		c"mdkk"dll#dll#c"dkk*##DLL1$$T\\2 &	rL   c                     t        d      }d}d|d}| j                  j                  |||        | j                  j                          y )Nr[  r   )r  r   )get_tourr   r  r  )rF   r   r  dics       rK   ri  zTourTestWindow.action1  sA    &!&)		5#t,		rL   c                 8    | j                   j                          y rN   )r?   rl   rT   s    rK   rj  zTourTestWindow.action2  s    		rL   c                 f    t        j                  | |       | j                  j                  |       yzReimplement Qt methodN)r   resizeEventr  r   r   s     rK   rt  zTourTestWindow.resizeEvent  s&    e,e$rL   c                 f    t        j                  | |       | j                  j                  |       yrs  )r   	moveEventr  r   r   s     rK   rv  zTourTestWindow.moveEvent  s$    dE*E"rL   )r~   r   r   r   r	   r  r  r4   ri  rj  rt  rv  r   r   s   @rK   rT  rT    s4    (K|$I*'X%
#rL   rT  c                  z    ddl m}  t        g       }t               }|j	                          |j                          y )Nr   )qapplication)spyder.utils.qthelpersrx  r   rT  rd   exec_)rx  appr  s      rK   
local_testr|    s)    3
r
C

CHHJIIKrL   __main__)Ir   mathr   r2  qtpy.QtCorer   r   r   r   r   r	   
qtpy.QtGuir
   r   r   r   r   r   r   r   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   spyderr"   spyder.api.panelr#   spyder.api.translationsr$   spyder.config.basespyder.plugins.layout.layoutsr%   spyder.py3compatr&   spyder.utils.icon_managerr'   spyder.utils.image_path_managerr(   spyder.utils.paletter)   r*   ry  r+   r,   spyder.utils.stylesheetr-   COLOR_BACKGROUND_1r  r  r3  r"  r0   r   r   r~  r  rT  r|  r~   rO   rL   rK   <module>r     s      
! !* * *% % % % %   " %   8 - ) : = = / "((H(H!I I	llh[+7 [+|Z#< Z#zm(< m(`	}7 }@RW RrC#[ C#L zL rL   