
    cc>                     j    d dl Z d dlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ  G d	 d
e      Zy)    N)Gtk   )AbstractAbstractTool)OptionsBarSelection)&utilities_gdk_rgba_to_normalized_array)!utilities_show_overlay_on_context)NoSelectionPixbufExceptionc                        e Zd Zd 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&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d Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z( xZ)S )'AbstractSelectionToolc                     t         |   ||||       d| _        d| _        d | _        d| _        d| _        d| _        d| _        d | _	        | j                  dd       | j                  dd       y )N   Tr   selection-colorzlast-delete-replaceselection-extractF)super__init__menu_idaccept_selection_future_pixbufx_pressy_presslocal_dxlocal_dyoperation_typeload_tool_action_enumadd_tool_action_boolean)selftool_idlabel	icon_namewindowkwargs	__class__s         9/usr/lib/python3/dist-packages/drawing/abstract_select.pyr   zAbstractSelectionTool.__init__   st    '7E9f5$,$$$,$,$-$-$.0EF2E:    c                     t        d      S )N	Selection)_r   s    r#   get_options_labelz'AbstractSelectionTool.get_options_label/   s    	
;r$   c                 Z    | j                         rt        d      }|gS t        d      }|gS )Nz/Drag the selection or right-click on the canvasz+Select an area or right-click on the canvas)selection_is_activer'   )r   	label_tips     r#   get_editing_tipsz&AbstractSelectionTool.get_editing_tips2   s8    	BC9  >?9
r$   c                 |    t         j                  j                  | j                  dz         }|j	                  d      S )Nzselection.uizoptions-menu)r   Buildernew_from_resourceUI_PATH
get_object)r   builders     r#   get_options_modelz'AbstractSelectionTool.get_options_model9   s0    KK))$,,*GH'			N	++r$   c                 r    d| _         | j                  j                  j                  | j                   |        y )N	selection)pane_idr    options_managertry_add_bottom_paner(   s    r#   try_build_panez$AbstractSelectionTool.try_build_pane=   s'    $,++11$,,Er$   c                 ,    t        | j                        S N)r   r    r(   s    r#   build_bottom_panez'AbstractSelectionTool.build_bottom_paneA   s    	T[[	))r$   c                 f    | j                         j                          |s| j                          y y r<   )get_selectionhide_popoversunselect_and_apply)r   preserve_selections     r#   give_back_controlz'AbstractSelectionTool.give_back_controlG   s+    $$&	 
r$   c                      y r<    r(   s    r#   cancel_ongoing_operationz.AbstractSelectionTool.cancel_ongoing_operationS       r$   c                      y)NFrE   r(   s    r#   has_ongoing_operationz+AbstractSelectionTool.has_ongoing_operationV   s    	r$   c                     |j                   dk(  ry| j                         sy| j                         j                  | j                  | j
                        ryy)N   menudefinedragcancel)buttonr+   r?   point_is_in_selectionr   r   )r   events     r#   _get_press_behaviorz)AbstractSelectionTool._get_press_behavior\   sG    
\\Q
##%
11$,,M

r$   c                      y r<   rE   r   event_xevent_ys      r#   press_definez"AbstractSelectionTool.press_definef   rG   r$   c                      y r<   rE   )r   rV   rW   renders       r#   motion_definez#AbstractSelectionTool.motion_definei   rG   r$   c                      y r<   rE   )r   surfacerV   rW   s       r#   release_definez$AbstractSelectionTool.release_definel   rG   r$   c                 t   || _         || _        | j                  |      | _        | j                  dk(  r#d| _        | j
                  j                  d       y | j                  dk(  r| j                  ||       y | j                  dk(  r1| j                          | j                          | j                          y y )NrN   grabbingTrM   rO   )r   r   rS   behaviorcursor_namer    
set_cursorrX   rA   restore_pixbufnon_destructive_show_modifr   rR   r]   rV   rW   s        r#   on_press_on_areaz&AbstractSelectionTool.on_press_on_arear   s    $,$,**51$-	]]f 4;;$}} Wg&}} ""$ !r$   c                     | j                   dk(  r| j                  |||       y |r#| j                   dk(  r| j                  ||       y y y )NrM   rN   )ra   r[   _preview_drag_to)r   rR   r]   rV   rW   rZ   s         r#   on_motion_on_areaz'AbstractSelectionTool.on_motion_on_area   sE    	]]hgw/$--6)'* *vr$   c                 t    || j                   z
  | _        || j                  z
  | _        | j	                          y r<   )r   r   r   r   re   rU   s      r#   ri   z&AbstractSelectionTool._preview_drag_to   s.    DLL($-DLL($-!!#r$   c                    | j                         j                  |      \  }}| j                         sd| _        n/| j	                         j                  ||      rd| _        nd| _        | j                  j                  d       y )NcrossgrabT)	get_imageget_event_coordsr+   rb   r?   rQ   r    rc   )r   rR   r]   xys        r#   on_unclicked_motion_on_areaz1AbstractSelectionTool.on_unclicked_motion_on_area   sl    			*	*5	1$!Q		!	!	#411!Q744++r$   c                    |j                   dk(  r| j                         j                  s!| j                         j                  d||       | j                         j	                  |j
                  |j                         | j                         j                          y | j                          | j                  dk(  r| j                  |||       y | j                  dk(  r| j                  ||       y y )NrK   TrM   rN   )rP   r?   	is_active
set_coordsset_popovers_positionrq   rr   show_popoverrd   ra   r^   _apply_drag_torf   s        r#   on_release_on_areaz(AbstractSelectionTool.on_release_on_area   s    
\\Q




(
(##D'7;--egguww?$$&		]]hw1}}w( r$   c                    | j                         sy | j                  }| j                  }| j                         j	                  |d||       | j                         j                  ||      }| j                         }t        |||       y )NT)r+   r   r   r?   show_selection_on_surfaceget_path_with_scrollget_overlay_thicknessr   )r   areaccontextldxldydragged_path	thicknesss          r#   on_draw_abovez#AbstractSelectionTool.on_draw_above   su    		!	!	#	##004cJ##%::3D,((*)#HlIFr$   c                 D    | j                         j                  ||       y r<   )r?   set_future_coords)r   rq   rr   s      r#   _pre_load_coordsz&AbstractSelectionTool._pre_load_coords   s    ((A.r$   c                 D    | j                         j                  ||       y r<   )r?   set_future_path)r   pathresync_coordss      r#   _pre_load_pathz$AbstractSelectionTool._pre_load_path   s    &&t];r$   c                    t        ||      }t        ||      }t        ||      }t        ||      }||z
  }	||z
  }
|	dk  s|
dk  ry| j                  ||       | j                         }|j	                          |j                  ||       |j                  ||       |j                  ||       |j                  ||       |j                          | j                  |j                         d       y)zBuild rectangle path and pre-load it in the selection manager. This
		is used in `self.select_all` (abstract, here), and in the "rectangle
		selection" implementation.r   NF)
minmaxr   get_contextnew_pathmove_toline_to
close_pathr   	copy_path)r   press_xpress_y	release_x	release_yx0y0x1y1whcairo_contexts               r#   _build_rectangle_pathz+AbstractSelectionTool._build_rectangle_path   s    
 7I"
7I"
7I"
7I"2g!2g!!VqAv	B""$-BBBBm--/7r$   c                 6   | j                         j                  }| j                         j                  }||z   | j                  z
  }||z   | j                  z
  }| j                  ||       d| _        | j                         }| j                  |       d| _        y )Nop-drag	op-define)	r?   selection_xselection_yr   r   r   r   build_operationdo_tool_operation)r   rV   rW   rq   rr   fxfy	operations           r#   ry   z$AbstractSelectionTool._apply_drag_to   s    
&&!
&&!7{T\\!"7{T\\!"B!$""$)##$r$   c                 0   | j                         j                         }| j                         j                         }| j                  dd||       d| _        | j                         }| j                  |       | j                         j                          y )Nr   r   )	get_main_pixbuf	get_width
get_heightr   r   r   apply_operationr?   rx   )r   total_wtotal_hr   s       r#   
select_allz AbstractSelectionTool.select_all   s}      ",,.'  "--/'Q7G4#$""$)y!##%r$   c                 b    d| _         | j                         }| j                  |       d| _         y )N	op-deleter   )r   r   r   r   r   s     r#   delete_selectionz&AbstractSelectionTool.delete_selection   s.    #$""$)y!#$r$   c                    | j                          || _        d| _        | j                         j                  }| j                         j
                  }| j                  ||       | j                         }| j                  |       d| _        y )N	op-importr   )	rA   r   r   r?   r   r   r   r   r   )r   pixbufsxsyr   s        r#   import_selectionz&AbstractSelectionTool.import_selection   s|    $#$''"''"
 B""$)y!#$r$   c                     d| _         | j                         j                         | _        | j	                         }| j                  |       d| _         y )Nop-replace-canvasr   )r   get_selection_pixbufcopyr   r   r   r   s     r#   replace_canvasz$AbstractSelectionTool.replace_canvas	  sH    +$11388:$""$)y!#$r$   c                      y r<   rE   r(   s    r#   invert_selectionz&AbstractSelectionTool.invert_selection  rG   r$   c                 2   | j                         j                  }| j                         j                  }| j                  ||       d| _        | j                         }| j                  |       d| _        d| _        | j                  j                  d       y )Nop-applyr   rm   T)
r?   r   r   r   r   r   r   rb   r    rc   )r   r   r   r   s       r#   rA   z(AbstractSelectionTool.unselect_and_apply  s     ''"''"B"$""$)y!#$$++r$   c                    | j                   d}n!| j                   j                         }d| _         | j                  d      }|dk(  r*| j                         j	                         }t        |      }n9|dk(  r0| j                  j                  j                         }t        |      }ng d}| j                  | j                  | j                         j                         || j                  d      || j                         j                         d   | j                         j                         d   | j                  | j                  d	
}|S )
zOperation is built from the operation_type, the current tool's
		'future_pixbuf' attribute, and '_future_*' attributes from the
		selection manager that were previously set.Nr   initial	secondary)      ?r   r   g        r   r   r   )
r   r   initial_pathreplacementextractr   pixb_xpixb_yr   r   )r   r   get_option_valuero   get_initial_rgbar   r    r8   get_right_coloridr   r?   get_future_pathget_future_coordsr   r   )r   r   replacement_typegdk_rgbacolorr   s         r#   r   z%AbstractSelectionTool.build_operation%  s&    
 6$$&64**+<="nn//181(;5;&kk))99;81(;55 gg((%%'779##$78!335a8!335a8}}}}) 
r$   c                     |d   
t               | j                  |d   |d          | j                         j                  d|d   |d          | j                         j	                  |d   j                                y )Nr   r   r   F)r	   r   r?   rv   
set_pixbufr   r   ops     r#   
_op_importz AbstractSelectionTool._op_importO  sv    \	#	%% 8bl3!!%Hr(|D!!"X,"3"3"56r$   c                 8   |d   
t               | j                         j                  |d   j                                | j                         j	                          | j                         j                  d       | j                         j                          y )Nr   T)r	   ro   set_main_pixbufr   use_stable_pixbufr?   resetreset_future_datar   s     r#   _op_replace_canvasz(AbstractSelectionTool._op_replace_canvasX  sv    \	#	%%..""2h<#4#4#67..$$&T"((*r$   c                 d   |d   y | j                         }|j                          |j                  |d          |d   }|j                  t        j
                  j                          |j                  |  |j                          |j                  t        j
                  j                         y )Nr   r   )
r   r   append_pathset_operatorcairoOperatorSOURCEset_source_rgbafillOVER)r   r   r   replacement_rgbas       r#   	_op_cleanzAbstractSelectionTool._op_clean`  s    ~&	""$-In56}-U^^223-!12U^^001r$   c                 r    | j                         j                  d|d   |d          | j                          y )NFr   r   )r?   rv   re   r   s     r#   _op_dragzAbstractSelectionTool._op_dragl  s1    !!%Hr(|D!!#r$   c                     |d   y | j                         j                  d|d   |d          |d   r|d   }nd }| j                         j                  |d   |       y )Nr   Tr   r   r   r   )r?   rv   load_from_path)r   r   r   s      r#   
_op_definez AbstractSelectionTool._op_defineq  sg    	!!$8blC	]M";;%%b&8+Fr$   c                     | j                         }| j                         j                  |d|d   |d          | j                         j                  d       | j                         j	                          y )NFr   r   T)r   r?   r|   r   r   )r   r   r   s      r#   	_op_applyzAbstractSelectionTool._op_apply{  sg    ""$-00&z2Ij4IKT"((*r$   c                    | j                  |       |d   dk(  r | j                         j                  d       y |d   dk(  r| j                  |       y |d   dk(  r| j	                  |       y |d   dk(  r#| j                  |       | j                  |       y |d   dk(  r d| _        d| _        | j                  |       y |d   d	k(  r4| j                         y | j                  |       | j                  |       y y )
Nr   r   Tr   r   r   r   r   r   )start_tool_operationr?   r   r   r   r   r   r   r   r   r   r   r   s     r#   r   z'AbstractSelectionTool.do_tool_operation  s   I& K/ d#!"k1 ??9!"&999%!"k1 ??9>>)!"i/ 4=4===!"j0
 !)
==>>) 1r$   )T)*__name__
__module____qualname____gtype_name__r   r)   r-   r4   r:   r=   rC   rF   rI   rS   rX   r[   r^   rg   rj   ri   rs   rz   r   r   r   r   ry   r   r   r   r   r   rA   r   r   r   r   r   r   r   r   __classcell__)r"   s   @r#   r   r      s    );$,F*%+$
)	G2/<84
$&$$"$"%T7+
2$
G+%r$   r   )r   gi.repositoryr   abstract_toolr   optionsbar_selectionr   utilities_colorsr   utilities_overlayr   selection_managerr	   r   rE   r$   r#   <module>r     s+   $   / 5 D @ 9O0 Or$   