o
    tBhh                  
   @   sx  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ zd dlZW n eyc Z zed	edZ[ww zed
d W n ey{ Z zeedZ[ww d dl 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/m0Z1 e2e3Z4ej5G dd dZ6e 7 dd Z8G dd de$j9eZ:G dd deZ;G dd de+e$j<Z=G dd dee$j>Z?G dd de	j@ZAejBdddG d d! d!e	jCZDG d"d# d#e	jEZFG d$d% d%e	jGZHejId&krd'ZJnd(ZJeKe
Ld)eJZMd.d*d+ZNeAe	_Oe/e	_Pe1e	_QeFe	_ReHe	_Se?Z<ejTG d,d- d-e*ZUdS )/    N)Path)_apibackend_toolscbook)Gcf)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2	TimerBaseToolContainerBase)Cursors)Figure)SubplotToolz#The GTK3 backends require PyGObjectGtkz3.0)GioGLibGObjectr   Gdk   )_create_application_shutdown_applicationbackend_version_BackendGTK_NavigationToolbar2GTKTimerGTKConfigureSubplotsGTKRubberbandGTKc                   @   s&   e Zd Zejdddedd ZdS )__getattr__3.5 )obj_typec                 C   sx   z't tjjtj }tj|dtj	|dtj
|dtj|dtj|diW S  ty; } zi W  Y d }~S d }~ww )Nmovepointerdefault	crosshairwait)	functoolspartialr   Cursornew_from_nameDisplayget_defaultr   MOVEHANDPOINTERSELECT_REGIONWAIT	TypeError)self
new_cursorexc r6   w/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/matplotlib/backends/backend_gtk3.pycursord.   s   




z__getattr__.cursordN)__name__
__module____qualname__r   
deprecatedpropertyr8   r6   r6   r6   r7   r   ,   s    r   c                 C   sL   t jtjdtjdtjdtjdtjdtjdtj	di| d}t
jt
j |S )	Nr"   r#   r$   r%   r&   z	ew-resizez	ns-resize)cursor)r   check_getitemr   r-   r.   r/   r0   r1   RESIZE_HORIZONTALRESIZE_VERTICALr   r)   r*   r+   r,   )
mpl_cursornamer6   r6   r7   _mpl_to_gtk_cursor?   s   	rD   c                   @   s  e Zd ZdZeZejjejj	B ejj
B ejjB ejjB ejjB ejjB ejjB ejjB Zd/ddZdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Z d!d" Z!d#d$ Z"d%d& Z#d'd( Z$d)d* Z%d+d, Z&d-d. Z'dS )0FigureCanvasGTK3gtk3Nc                 C   s<  t | | tj|  d| _d | _d | _| d| j | d| j | d| j	 | d| j
 | d| j | d| j | d| j | d| j | d	| j | d
| j | d| j | d| j | d| j | d| j | | jj | d t }|d |  }||tj |d d S )Nr   scroll_eventbutton_press_eventbutton_release_eventconfigure_eventzscreen-changedznotify::scale-factordrawkey_press_eventkey_release_eventmotion_notify_eventleave_notify_evententer_notify_eventsize_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)r   __init__r   _idle_draw_id_lastCursor_rubberband_rectconnectrG   rH   rI   rJ   _update_device_pixel_ratioon_draw_event
_post_drawrL   rM   rN   rO   rP   rQ   
set_events	__class__
event_maskset_can_focusr   CssProviderload_from_dataget_style_contextadd_provider#STYLE_PROVIDER_PRIORITY_APPLICATION	add_class)r3   figurecss	style_ctxr6   r6   r7   rR   \   s4   

zFigureCanvasGTK3.__init__c                 C   s   |    d S N)close_eventr3   r6   r6   r7   destroy}   s   zFigureCanvasGTK3.destroyc                 C   s<   |  d}|d ur|t| tj }|d d S d S )NwindowT)get_property
set_cursorrD   r   MainContextr$   	iteration)r3   r>   rk   contextr6   r6   r7   rm      s   

zFigureCanvasGTK3.set_cursorc                 C   s*   |j | j }| jjj|j| j  }||fS )aI  
        Calculate mouse coordinates in physical pixels.

        GTK use logical pixels, but the figure is scaled to physical pixels for
        rendering.  Transform to physical pixels so that all of the down-stream
        transforms work as expected.

        Also, the origin is different and needs to be corrected.
        )xdevice_pixel_ratiord   bboxheighty)r3   eventrq   ru   r6   r6   r7   _mouse_event_coords   s   
z$FigureCanvasGTK3._mouse_event_coordsc                 C   s<   |  |\}}|jtjjkrdnd}tj| ||||d dS )Nr   guiEventF)rw   	directionr   ScrollDirectionUPr   rG   )r3   widgetrv   rq   ru   stepr6   r6   r7   rG      s   zFigureCanvasGTK3.scroll_eventc                 C   (   |  |\}}tj| |||j|d dS Nry   F)rw   r   rH   buttonr3   r~   rv   rq   ru   r6   r6   r7   rH      
   z#FigureCanvasGTK3.button_press_eventc                 C   r   r   )rw   r   rI   r   r   r6   r6   r7   rI      r   z%FigureCanvasGTK3.button_release_eventc                 C      |  |}tj| ||d dS Nry   T)_get_keyr   rL   r3   r~   rv   keyr6   r6   r7   rL         
z FigureCanvasGTK3.key_press_eventc                 C   r   r   )r   r   rM   r   r6   r6   r7   rM      r   z"FigureCanvasGTK3.key_release_eventc                 C   s$   |  |\}}tj| |||d dS r   )rw   r   rN   r   r6   r6   r7   rN      s   z$FigureCanvasGTK3.motion_notify_eventc                 C   s   t | | d S rg   )r   rO   )r3   r~   rv   r6   r6   r7   rO         z#FigureCanvasGTK3.leave_notify_eventc                 C   s&   |  |\}}tj| |||fd d S )N)rz   xy)rw   r   rP   r   r6   r6   r7   rP      s   z#FigureCanvasGTK3.enter_notify_eventc                 C   sP   | j j}|j| j | }|j| j | }| j j||dd t|  |   d S )NFforward)	rd   dpiwidthrr   rt   set_size_inchesr   resize_event	draw_idle)r3   r~   
allocationdpivalwinchhinchr6   r6   r7   rQ      s   
zFigureCanvasGTK3.size_allocatec                 C   s   t t|j}t|t|j}tjjdftjj	dftjj
dftjjdfg}|D ]\}}|j|@ rB|dkr;| sB| d| }q*|S )Nctrlaltshiftsuper+)chrr   keyval_to_unicodekeyvalr   _unikey_or_keysym_to_mplkeykeyval_nameModifierTypeCONTROL_MASK	MOD1_MASK
SHIFT_MASK	MOD4_MASKstateisprintable)r3   rv   unikeyr   	modifierskey_maskprefixr6   r6   r7   r      s    





zFigureCanvasGTK3._get_keyc                 O   s&   |  |  r|   |   d S d S rg   )_set_device_pixel_ratioget_scale_factorqueue_resize
queue_draw)r3   argskwargsr6   r6   r7   rW      s   z+FigureCanvasGTK3._update_device_pixel_ratioc                 C   sd   | dd u r	d S |j| j }|j| j }|dk s|dk rd S | jj}| jj|| || dd dS )Nrk      Fr   )rl   r   rr   rt   rd   r   r   )r3   r~   rv   whr   r6   r6   r7   rJ      s   z FigureCanvasGTK3.configure_eventc                 C   s   || _ |   d S rg   )rU   r   )r3   rectr6   r6   r7   _draw_rubberband   s   z!FigureCanvasGTK3._draw_rubberbandc           	         s    j d u rd S  fdd j D \}}}}|| }|| }||| ||| ||| ||| ||| ||| ||| ||| |d |d |dd |ddd |  |dd |ddd |  d S )Nc                 3   s    | ]}| j  V  qd S rg   )rr   ).0dimri   r6   r7   	<genexpr>   s    z.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r   r   r   r   )	rU   move_toline_toset_antialiasset_line_widthset_dashset_source_rgbstroke_preservestroke)	r3   r~   ctxx0y0r   r   x1y1r6   ri   r7   rY      s.   



zFigureCanvasGTK3._post_drawc                 C   s   d S rg   r6   )r3   r~   r   r6   r6   r7   rX     s   zFigureCanvasGTK3.on_draw_eventc                 C   s   |   r
|   d S d S rg   )is_drawabler   ri   r6   r6   r7   rK     s   zFigureCanvasGTK3.drawc                    s*    j dkrd S  fdd}t| _ d S )Nr   c                     s   z
    W d _dS d _w )Nr   F)rK   rS   r   ri   r6   r7   	idle_draw  s
   
z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rS   r   idle_add)r3   r   r6   ri   r7   r     s   
zFigureCanvasGTK3.draw_idlec                 C   s,   t j }| r|d | s	d S d S NT)r   rn   r$   pendingro   )r3   rp   r6   r6   r7   flush_events&  s   

zFigureCanvasGTK3.flush_eventsrg   )(r9   r:   r;   required_interactive_framework	TimerGTK3
_timer_clsr   	EventMaskBUTTON_PRESS_MASKBUTTON_RELEASE_MASKEXPOSURE_MASKKEY_PRESS_MASKKEY_RELEASE_MASKENTER_NOTIFY_MASKLEAVE_NOTIFY_MASKPOINTER_MOTION_MASKSCROLL_MASKr\   rR   rj   rm   rw   rG   rH   rI   rL   rM   rN   rO   rP   rQ   r   rW   rJ   r   rY   rX   rK   r   r   r6   r6   r6   r7   rE   M   sT    

!
rE   c                       s\   e Zd ZdZ fddZdd Zdd Zdd	 Zd
Zdd Z	dd Z
dd Zdd Z  ZS )FigureManagerGTK3a9  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window

    c                    s|  t  }t  _| j t ||  jdd  jt	 t
  _ jdtjj  j j  j   j   j jddd  j \}}   _ jrit j  jrit j  jd ur j   j jddd  j \}}||j7 } j|| d _ jd fdd	  jd
 fdd	 t ! r j   j"   j#  d S )N
matplotlib
MatplotliborientationTr   Frj   c                     
   t  S rg   r   rj   r   ri   r6   r7   <lambda>a     
 z,FigureManagerGTK3.__init__.<locals>.<lambda>delete_eventc                     r   rg   r   r   ri   r6   r7   r   b  r   )$r   r   Windowrk   
add_windowr   rR   set_wmclassset_icon_from_filewindow_iconBoxvboxset_propertyOrientationVERTICALaddshowcanvas
pack_startget_width_height_get_toolbartoolbartoolmanagerr   add_tools_to_manageradd_tools_to_containerpack_endget_preferred_sizert   set_default_size_destroyingrV   mplis_interactiver   
grab_focus)r3   r   numappr   r   min_sizenat_sizer[   ri   r7   rR   =  s>   









zFigureManagerGTK3.__init__c                 G   sF   | j rd S d| _ | j  | j  | j  | jr!| j  d S d S r   )r   r   rj   rk   r   r   r3   r   r6   r6   r7   rj   i  s   


zFigureManagerGTK3.destroyc                 C   sH   | j   | j  tjd r"| j  r| j   d S t	d d S d S )Nzfigure.raise_windowz#Cannot raise window yet to be setup)
rk   r   r   rK   r   rcParams
get_windowpresentr   warn_externalri   r6   r6   r7   r   w  s   



zFigureManagerGTK3.showc                 C   s,   | j  | _ | j r| j  d S | j  d S rg   )_full_screen_flagrk   
fullscreenunfullscreenri   r6   r6   r7   full_screen_toggle  s   
z$FigureManagerGTK3.full_screen_toggleFc                 C   sD   t jd dkrt| j| j}|S t jd dkrt| j}|S d }|S )Nr   toolbar2r   )r   r  NavigationToolbar2GTK3r   rk   ToolbarGTK3r   )r3   r   r6   r6   r7   r     s   
zFigureManagerGTK3._get_toolbarc                 C   s
   | j  S rg   )rk   	get_titleri   r6   r6   r7   get_window_title  s   
z"FigureManagerGTK3.get_window_titlec                 C      | j | d S rg   )rk   	set_title)r3   titler6   r6   r7   set_window_title  r   z"FigureManagerGTK3.set_window_titlec                 C   s   t || jj }t || jj }| jr| j }||j7 }| j }|j|j  kr.dkr9n n	| j	|| dS | j
|| dS )zSet the canvas size in pixels.r   N)intr   rr   r   size_requestrt   get_allocationr   rk   r   resize)r3   r   rt   toolbar_sizecanvas_sizer6   r6   r7   r    s   


zFigureManagerGTK3.resize)r9   r:   r;   __doc__rR   rj   r   r  r
  r   r  r  r  __classcell__r6   r6   r  r7   r   -  s    ,r   c                   @   s   e Zd Zdd Zdd ZdS )r  c                 C   s\  || _ tj|  | tjj i | _| jD ]Y\}}}}|d u r)| 	t
 d qtjtjttd| dtjj}|dv rGt nt  | j|< }|| || |dt| ||_|| | 	|d qt }	| 	|	d t }
|
d |	 d |	!|
 t }	| 	|	d t | _"|	!| j" | #  t$| | d S )Nrx   images-symbolic.svg)zoompanclickedu   <small> 
 </small>T)%winr   rR   	set_styler   ToolbarStyleICONS_gtk_ids	toolitemsinsertSeparatorToolItemImagenew_from_giconr   Iconnew_for_stringstrr   _get_data_pathIconSizeLARGE_TOOLBARToggleToolButton
ToolButton	set_labelset_icon_widgetrV   getattr_signal_handlerset_tooltip_textToolItemLabel
set_markup
set_expandr   messageshow_allr
   )r3   r   rk   texttooltip_text
image_filecallbackimager   toolitemlabelr6   r6   r7   rR     sP   






zNavigationToolbar2GTK3.__init__c           
   
      s  t jdj t jjt jt jjt j	t jj
fd j  D ]+\}}t  }|| |D ]
}|d|  q. | j |v rJ | qt jd fdd} tjd   j   d   }  }  }j |  d	 }    |t jj
krd S tjd rt!j"#|tjd< zjj$j%||d
 W d S  t&y }	 zt't(|	d W Y d }	~	d S d }	~	ww )NzSave the figure)r  parentactionbuttonsz*.znotify::filterc                     sD       }j | d } tt  d|  d S )Nr   .)	
get_filterget_namer   get_supported_filetypes_groupedset_current_namer0  r   get_current_namewith_suffix)r   rC   fmtdialogr3   r6   r7   on_notify_filter  s
   z<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )format)rH  ))r   FileChooserDialogr   get_toplevelFileChooserActionSAVESTOCK_CANCELResponseTypeCANCEL
STOCK_SAVEOKrN  items
FileFilterset_nameadd_pattern
add_filterget_default_filetype
set_filterr'   r(   rV   set_current_folderr   r  rO  get_default_filenameset_do_overwrite_confirmationrunget_filenamerL  rM  rj   ospathdirnamerd   savefig	Exceptionerror_msg_gtkr0  )
r3   r   rC   fmtsffrR  rU  responsefnameer6   rS  r7   save_figure  sL   







z"NavigationToolbar2GTK3.save_figureN)r9   r:   r;   rR   rw  r6   r6   r6   r7   r    s    0r  c                   @   sP   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )r  r   c                 C   s\   t | | tj|  | dtjj t | _| 	| jddd | 
  i | _i | _d S )Nr   Fr   )r   rR   r   r   r   r   
HORIZONTALr<  _messager   r@  _groups
_toolitems)r3   r   r6   r6   r7   rR     s   

zToolbarGTK3.__init__c           
      C   s   |rt  }nt  }|| |d ur&t jtj|t j	j
}|| |d u r,d}| ||| |d| j|}	|| |  | j|g  | j| ||	f d S )Nrx   r#  )r   r4  r5  r6  r,  r-  r   r.  r/  r2  r3  r7  _add_buttonrV   
_call_toolr:  r@  r{  
setdefaultappend)
r3   rC   grouppositionrC  descriptiontoggler   rE  signalr6   r6   r7   add_toolitem  s$   




zToolbarGTK3.add_toolitemc                 C   sf   || j vr(| j r|   t }|tjj | |ddd |  || j |< | j | 	|| d S )NFr   )
rz  _add_separatorr   Toolbarr%  r&  r'  r   r@  r*  )r3   r   r  r  r   r6   r6   r7   r|  3  s   

zToolbarGTK3._add_buttonc                 C   s   |  | d S rg   )trigger_tool)r3   btnrC   r6   r6   r7   r}  >  s   zToolbarGTK3._call_toolc                 C   sD   || j vrd S | j | D ]\}}|| || || qd S rg   )r{  handler_block
set_activehandler_unblock)r3   rC   toggledrF  r  r6   r6   r7   toggle_toolitemA  s   


zToolbarGTK3.toggle_toolitemc                 C   sl   || j vr| j| d|  d S | jD ]}| j | D ]\}}|| j| v r.| j| | qq| j |= d S )Nz not in toolbar)r{  r   message_eventrz  remove)r3   rC   r  rF  _signalr6   r6   r7   remove_toolitemI  s   

zToolbarGTK3.remove_toolitemc                 C   s4   t  }|dt jj | |ddd |  d S )Nr   FTr   )r   	Separatorr   r   r   r   r@  )r3   sepr6   r6   r7   r  T  s   zToolbarGTK3._add_separatorc                 C   r  rg   )ry  r6  )r3   sr6   r6   r7   set_messageZ  r   zToolbarGTK3.set_messageN)r9   r:   r;   _icon_extensionrR   r  r|  r}  r  r  r  r  r6   r6   r6   r7   r    s    
r  c                   @      e Zd Zdd ZdS )SaveFigureGTK3c                    s   G  fddd}t | S )Nc                       s   e Zd Z jjZdS )z-SaveFigureGTK3.trigger.<locals>.PseudoToolbarN)r9   r:   r;   rd   r   r6   ri   r6   r7   PseudoToolbara      r  )r  rw  )r3   r   r   r  r6   ri   r7   trigger_  s   zSaveFigureGTK3.triggerNr9   r:   r;   r  r6   r6   r6   r7   r  ^  r  r  r   ToolSetCursor)alternativec                   @   r  )SetCursorGTK3c                 C   s   t |  | d S rg   )r  rm   "_make_classic_style_pseudo_toolbar)r3   r>   r6   r6   r7   rm   i  s   zSetCursorGTK3.set_cursorN)r9   r:   r;   rm   r6   r6   r6   r7   r  g  s    r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )HelpGTK3c                 C   s~   ddddd}| d}dd |d	d
 D }|d
 }||v r$|| }nt|dkr/| }n	| r8|dg7 }d|| S )z
        Convert Matplotlib key presses to GTK+ accelerator identifiers.

        Related to `FigureCanvasGTK3._get_key`.
        	BackSpace	Page_DownPage_UpScroll_Lock)	backspacepagedownpageupscroll_lockr   c                 S   s   g | ]}d | d qS )<>r6   )r   modr6   r6   r7   
<listcomp>}  s    z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nrx   r   z<shift>r    )splitlen
capitalizeisupperjoin)r3   r   specialpartsmodsr6   r6   r7   _normalize_shortcuto  s   



zHelpGTK3._normalize_shortcutc                 C   s   d|vo	| d S )z
        Check for a valid shortcut to be displayed.

        - GTK will never send 'cmd+' (see `FigureCanvasGTK3._get_key`).
        - The shortcut window only shows keyboard shortcuts, not mouse buttons.
        zcmd+zMouseButton.)
startswith)r3   r   r6   r6   r7   _is_valid_shortcut  s   zHelpGTK3._is_valid_shortcutc                    s   t  }t jj D ]6\}}|jsqt  }|| |	dd d  t j
d fdd j|D |j|jd}|| qt jdd jj d	}|  || |  d S )
Nc                 S   s
   |  dS )NF)set_visible)r~   datar6   r6   r7   r     r   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda> c                 3   s$    | ]}  |r |V  qd S rg   )r  r  )r   r   ri   r6   r7   r     s    
z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)acceleratorr  subtitleHelpT)r  modaltransient_for)r   ShortcutsSectionsortedr   toolsr`  r  ShortcutsGroupr   forallShortcutsShortcutr  get_tool_keymaprC   ShortcutsWindow_figurer   rX  r   r@  )r3   sectionrC   toolr  shortcutrk   r6   ri   r7   _show_shortcuts_window  s.   



zHelpGTK3._show_shortcuts_windowc                 C   s>   t j| jj dt jjt jj| 	 dd}|
  |  d S )Nr   r  )r  )r   MessageDialogr  r   rX  MessageTypeINFOButtonsTyper_  _get_help_textrj  rj   )r3   rT  r6   r6   r7   _show_shortcuts_dialog  s   
zHelpGTK3._show_shortcuts_dialogc                 G   s*   t dddd u r|   d S |   d S )Nr      r   )r   check_versionr  r  r  r6   r6   r7   r    s   zHelpGTK3.triggerN)r9   r:   r;   r  r  r  r  r  r6   r6   r6   r7   r  n  s    	"r  c                   @   r  )ToolCopyToClipboardGTK3c           
      O   sH   t jtj}| j }| \}}}}t|||||}	|	|	 d S rg   )
r   	Clipboardgetr   SELECTION_CLIPBOARDr   r  get_geometrypixbuf_get_from_window	set_image)
r3   r   r   	clipboardrk   rq   ru   r   rt   pbr6   r6   r7   r    s
   
zToolCopyToClipboardGTK3.triggerNr  r6   r6   r6   r7   r    r  r  win32zmatplotlib.pngzmatplotlib.svgr  c                 C   sd   |d ur|  }| sd }t| tsdtt| } tj|tjj	tj
j| d}|  |  d S )N,)rH  typerJ  message_format)rX  is_toplevel
isinstancer0  r  mapr   r  r  ERRORr  r_  rj  rj   )msgrH  rT  r6   r6   r7   rq    s   
rq  c                   @   s   e Zd ZeZeZdS )_BackendGTK3N)r9   r:   r;   rE   FigureCanvasr   FigureManagerr6   r6   r6   r7   r    s    r  rg   )Vr'   loggingrl  pathlibr   sysr   r   r   r   r   matplotlib._pylab_helpersr   matplotlib.backend_basesr   r   r	   r
   r   r   matplotlib.backend_toolsr   matplotlib.figurer   matplotlib.widgetsr   giImportErrorerrrequire_version
ValueErrorrv  gi.repositoryr   r   r   r   r   _backend_gtkr   r   r   r   r   r   r   r   ConfigureSubplotsGTK3r   RubberbandGTK3	getLoggerr9   _logcaching_module_getattrr   	lru_cacherD   DrawingArearE   r   r  r  r   r  SaveFigureBaser  r<   SetCursorBaser  ToolHelpBaser  ToolCopyToClipboardBaser  platformicon_filenamer0  r1  r   rq  ToolSaveFigureToolConfigureSubplotsToolRubberbandToolHelpToolCopyToClipboardexportr  r6   r6   r6   r7   <module>   sn     
(
	
 a ^P	U

