ó
âdc           @` s²   d  Z  d d l m Z m Z m Z m Z d d l Td d l Z e j d  d d l	 Z	 d d l
 Z
 d d l Z d d l m Z d g Z d	 e	 j f d
     YZ e
 j e  d S(   u%   Widget for `gimp.Parasite` instances.i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   *Nu   2.0i   (   t   utilsu   ParasiteBoxt   ParasiteBoxc           B` s{   e  Z d  Z i e j d d f d 6Z d Z d Z d   Z	 d   Z
 d   Z d   Z d   Z d	   Z d
   Z d   Z RS(   uĴ   
  This is a subclass of `gtk.VBox` to edit `gimp.Parasite` instances
  interactively.
  
  Signals:
  
  * `'parasite-changed'` - The parasite was modified by the user.
  s   parasite-changedi   i   c         C` s*   t  j j |   t |  _ |  j |  d  S(   N(   t   gtkt   HBoxt   __init__t   Truet&   _should_invoke_parasite_changed_signalt	   _init_gui(   t   selft   parasite(    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR	   %   s    	c         C` s   t  j |  j     S(   N(   t   gimpt   Parasitet   _get_values(   R   (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyt   get_parasite,   s    c         C` s   |  j  |  d  S(   N(   t   _set_values(   R   R   (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyt   set_parasite/   s    c         C` s¨  t  j   |  _ t  j t  j d | j d d d d d d d	 d
  d d |  _ |  j j t  t  j   |  _	 t  j
 t j t d    |  _ |  j j d d  t  j   |  _ |  j j |  j  |  j j |  j d t d t |  j j |  j d t d t t  j
 t j t d    |  _ |  j j d d  t  j   |  _ |  j j |  j  |  j j |  j d t d t |  j j |  j d t d t t  j
 t j t d    |  _ |  j j d d  t  j   |  _ |  j j |  j  |  j j |  j d t d t |  j j |  j	 d t d t |  j |  j  |  j |  j d t d t |  j |  j d t d t |  j |  j d t d t |  j |  |  j   d  S(   Nt   valuet   loweri    t   upperi   i    t	   step_incri   t	   page_incri
   t   digitsu   Nameg        g      à?t   expandt   fillu   Flagsu   DataI       (   R   t   Entryt   _parasite_name_entryt
   SpinButtont
   Adjustmentt   flagst   _parasite_flags_spin_buttont   set_numericR
   t   _parasite_data_entryt   Labelt   pgutilst   safe_encode_gtkt   _t   _vbox_name_labelt   set_alignmentt   VBoxt
   _vbox_namet   set_spacingt   _VBOX_SPACINGt
   pack_startt   Falset   _vbox_flags_labelt   _vbox_flagst   _vbox_data_labelt
   _vbox_datat   _HBOX_SPACINGR   t   _connect_changed_events(   R   R   (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR   2   sH    			!!	!c         C` s:   t  j |  j j    |  j j   t  j |  j j    f S(   N(   R&   t   safe_decode_gtkR   t   get_textR"   t   get_value_as_intR$   (   R   (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR   c   s    c         C` sa   t  |  _ |  j j t j | j   |  j j | j	  |  j
 j t j | j   t |  _ d  S(   N(   R0   R   R   t   set_textR&   R'   t   nameR"   t	   set_valueR!   R$   t   dataR
   (   R   R   (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR   i   s
    	c         C` sF   |  j  j d |  j  |  j j d |  j  |  j j d |  j  d  S(   Nu   changedu   value-changed(   R   t   connectt   _on_parasite_changedR"   R$   (   R   (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR6   r   s    c         O` s   |  j  r |  j d  n  d  S(   Nu   parasite-changed(   R   t   emit(   R   t   widgett   argst   kwargs(    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR?   w   s    	N(    (   t   __name__t
   __module__t   __doc__t   gobjectt   SIGNAL_RUN_FIRSTt   Nonet   __gsignals__R5   R.   R	   R   R   R   R   R   R6   R?   (    (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyR      s   				1				(   RF   t
   __future__R    R   R   R   t   future.builtinst   pygtkt   requireR   RG   R   t    R   R&   t   __all__R   R   t   type_register(    (    (    sR   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/pygimplib/gui/parasite_box.pyt   <module>   s   "
	f                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 # -*- coding: utf-8 -*-

"""Class simplifying hiding a popup window based on user actions."""

from __future__ import absolute_import, division, print_function, unicode_literals
from future.builtins import *

import gobject

from . import utils as utils_

__all__ = [
  'PopupHideContext',
]


class PopupHideContext(object):
  """
  This class provides a simplified interface for connecting events to hide the
  specified popup window. If the user presses a button outside the popup or
  focuses out of the widget that spawned the popup, the popup is hidden.
  """
  
  def __init__(self, popup_to_hide, popup_owner_widget, hide_callback=None):
    """
    Parameters:
    
    * `popup_to_hide` - A `gtk.Window` instance representing a popup to hide.
    
    * `popup_owner_widget` - A `gtk.Widget` instance that spawned the popup.
    
    * `hide_callback` - A function to hide the popup. If `None`,
      `popup_to_hide.hide()` is used to hide the popup.
    """
    self._popup_to_hide = popup_to_hide
    self._popup_owner_widget = popup_owner_widget
    self._hide_callback = (
      hide_callback if hide_callback is not None else self._popup_to_hide.hide)
    
    self._button_press_emission_hook_id = None
    self._toplevel_configure_event_id = None
    self._toplevel_position = None
    self._widgets_with_entered_pointers = set()
    
    self._popup_owner_widget.connect(
      'focus-out-event', self._on_popup_owner_widget_focus_out_event)
  
  def connect_button_press_events_for_hiding(self):
    self._button_press_emission_hook_id = gobject.add_emission_hook(
      self._popup_owner_widget,
      'button-press-event',
      self._on_emission_hook_button_press_event)
    
    toplevel = utils_.get_toplevel_window(self._popup_owner_widget)
    if toplevel is not None:
      toplevel.get_group().add_window(self._popup_to_hide)
      # Button presses on the window decoration cannot be intercepted via the
      # `'button-press-event'` emission hooks, hence this workaround.
      self._toplevel_configure_event_id = toplevel.connect(
        'configure-event', self._on_toplevel_configure_event)
      self._toplevel_position = toplevel.get_position()
  
  def disconnect_button_press_events_for_hiding(self):
    if self._button_press_emission_hook_id is not None:
      gobject.remove_emission_hook(
        self._popup_owner_widget,
        'button-press-event',
        self._button_press_emission_hook_id)
    
    toplevel = utils_.get_toplevel_window(self._popup_owner_widget)
    if (toplevel is not None
        and self._toplevel_configure_event_id is not None
        and toplevel.handler_is_connected(self._toplevel_configure_event_id)):
      toplevel.disconnect(self._toplevel_configure_event_id)
      self._toplevel_configure_event_id = None
  
  def exclude_widget_from_hiding_with_button_press(self, widget):
    widget.connect('enter-notify-event', self._on_widget_enter_notify_event)
    widget.connect('leave-notify-event', self._on_widget_leave_notify_event)
  
  def _on_popup_owner_widget_focus_out_event(self, widget, event):
    self._hide_callback()
  
  def _on_emission_hook_button_press_event(self, widget, event):
    if self._widgets_with_entered_pointers:
      return True
    else:
      self._hide_callback()
      return False
  
  def _on_toplevel_configure_event(self, toplevel, event):
    if self._toplevel_position != toplevel.get_position():
      self._hide_callback()
    
    self._toplevel_position = toplevel.get_position()
  
  def _on_widget_enter_notify_event(self, widget, event):
    self._widgets_with_entered_pointers.add(widget)
  
  def _on_widget_leave_notify_event(self, widget, event):
    self._widgets_with_entered_pointers.discard(widget)
                                                                                                                                                                                                                                                                         