ó
dòôdc           @` sŒ   d  Z  d d l m Z m Z m Z m Z d d l Td d l m Z	 d d l m
 Z
 d d l m Z d d l m Z d e f d	 „  ƒ  YZ d
 S(   u@   Class interconnecting preview widgets for item names and images.i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   *(   t	   pygimplib(   t   builtin_constraints(   t   builtin_procedures(   t
   exceptionst   PreviewsControllerc           B` sé   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 „  Z d „  Z RS(   i2   iô  u   action_errorc         C` sr   | |  _  | |  _ | |  _ | |  _ i  |  _ i  |  _ t |  _ t |  _	 |  j d j
 |  _ |  j d j
 |  _ d  S(   Nu(   gui/size/paned_outside_previews_positionu(   gui/size/paned_between_previews_position(   t   _name_previewt   _image_previewt	   _settingst   _imaget    _selected_in_preview_constraintst   _custom_actionst   Falset   _is_initial_selection_sett   Truet$   _last_name_preview_update_successfult   valuet)   _paned_outside_previews_previous_positiont)   _paned_between_previews_previous_position(   t   selft   name_previewt   image_previewt   settingst   image(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   __init__   s    								c         C` sr   |  j  |  j d ƒ |  j  |  j d ƒ |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  d  S(   Nu   main/proceduresu   main/constraints(	   t   _connect_actions_changedR   t<   _connect_setting_after_reset_collapsed_items_in_name_previewt;   _connect_setting_after_reset_selected_items_in_name_previewt=   _connect_setting_after_reset_displayed_items_in_image_previewt&   _connect_toggle_name_preview_filteringt*   _connect_update_rendering_of_image_previewt+   _connect_image_preview_menu_setting_changest"   _connect_toplevel_notify_is_active(   R   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt#   connect_setting_changes_to_previews'   s    





c         C` sF   |  j  j d |  j ƒ |  j  j d |  j ƒ |  j  j d |  j ƒ d  S(   Nu   preview-selection-changedu   preview-updatedu   preview-tags-changed(   R
   t   connectt"   _on_name_preview_selection_changedt   _on_name_preview_updatedt   _on_name_preview_tags_changed(   R   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   connect_name_preview_events5   s    			c         C` s;  | j  ƒ  } | j d ƒ } | | k rs |  j | k rs |  j |  j |  j d d ƒ |  j |  j |  j d d ƒ n» | | k rË |  j | k rË |  j |  j |  j d d ƒ |  j |  j |  j d d ƒ nc | |  j k r.|  j j ƒ  rt	 j
 j |  j |  j j ƒ q.t	 j
 j |  j j ƒ |  j j ƒ  n  | |  _ d  S(   Nu   max-positionu   gui/name_preview_sensitiveu   previews_sensitiveu   gui/image_preview_sensitive(   t   get_positiont   get_propertyR   t   _disable_preview_on_paned_dragR
   R   R   t   _enable_preview_on_paned_dragt   is_larger_than_imaget   pgt
   invocationt   timeout_add_strictt-   _DELAY_PREVIEWS_PANE_DRAG_UPDATE_MILLISECONDSt   updatet   timeout_remove_strictt   resize(   R   t   panedt   property_spect   current_positiont   max_position(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt)   on_paned_outside_previews_notify_position=   s<    





	c         C` s†  | j  ƒ  } | j d ƒ } | j d ƒ } | | k re |  j | k re |  j |  j |  j d d ƒ n| | k r  |  j | k r  |  j |  j |  j d d ƒ nÙ | | k rÛ |  j | k rÛ |  j |  j |  j d d ƒ nž | | k r|  j | k r|  j |  j |  j d d ƒ nc | |  j k ry|  j j ƒ  rSt	 j
 j |  j |  j j ƒ qyt	 j
 j |  j j ƒ |  j j ƒ  n  | |  _ d  S(   Nu   max-positionu   min-positionu   gui/image_preview_sensitiveu   vpaned_preview_sensitiveu   gui/name_preview_sensitive(   R+   R,   R   R-   R   R   R.   R
   R/   R0   R1   R2   R3   R4   R5   R6   (   R   R7   R8   R9   R:   t   min_position(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt)   on_paned_between_previews_notify_position`   sF    







	c         ` s[   ‡  f d †  } ‡  f d †  } d „  } | j  d | ƒ | j  d | ƒ | j  d | ƒ d  S(   Nc         ` s<   | d j  r! ˆ  j | d ƒ n  | d j d ˆ  j ƒ d  S(   Nu   enabledu   value-changed(   R   t"   _update_previews_on_setting_changet   connect_event(   t   actions_t   actiont   argst   kwargs(   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _on_after_add_action‰   s    
c         ` s%   | d j  r! ˆ  j | d ƒ n  d  S(   Nu   enabled(   R   R>   (   R@   RA   RB   RC   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _on_after_reorder_action   s    c         _` s%   | d j  r! | d j t ƒ n  d  S(   Nu   enabled(   R   t	   set_valueR   (   R@   RA   RB   RC   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _on_before_remove_action“   s    u   after-add-actionu   after-reorder-actionu   before-remove-action(   R?   (   R   R@   RD   RE   RG   (    (   R   sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR   ˆ   s    	c         C` sh   |  j  j t |  j ƒ t j j |  j |  j  j ƒ |  j	 j t |  j ƒ t j j |  j |  j	 j ƒ d  S(   N(
   R
   t   lock_updateR   t   _ACTION_ERROR_KEYR0   R1   R2   t+   _DELAY_PREVIEWS_SETTING_UPDATE_MILLISECONDSR4   R   (   R   t   setting(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR>      s    		c         ` s$   ˆ  j  d j d ‡  f d †  ƒ d  S(   Nu'   gui/name_preview_layers_collapsed_stateu   after-resetc         ` s   ˆ  j  j |  j ˆ  j j ƒ S(   N(   R
   t   set_collapsed_itemsR   R   t   ID(   RK   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   <lambda>©   t    (   R   R?   (   R   (    (   R   sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR   ¦   s    c         ` s$   ˆ  j  d j d ‡  f d †  ƒ d  S(   Nu   main/selected_layersu   after-resetc         ` s   ˆ  j  j |  j ˆ  j j ƒ S(   N(   R
   t   set_selected_itemsR   R   RM   (   RK   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRN   ®   RO   (   R   R?   (   R   (    (   R   sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR   «   s    c         ` s*   ‡  f d †  } ˆ  j  d j d | ƒ d  S(   Nc         ` s   ˆ  j  j ƒ  d  S(   N(   R   t   clear(   RK   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _clear_image_preview±   s    u"   gui/image_preview_displayed_layersu   after-reset(   R   R?   (   R   RR   (    (   R   sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR    °   s    c         ` sˆ   ‡  ‡ f d †  } ‡ f d †  } ‡ f d †  } ‡ f d †  ‰  ˆ j  d j d | ƒ ˆ j  d j d | ƒ ˆ j  d j d | ƒ d  S(	   Nc         ` sL   | d j  d k rH | ˆ j | j <ˆ  | d ƒ | d j d ˆ  ƒ n  d  S(   Nu	   orig_nameu   selected_in_previewu   enabledu   value-changed(   R   R   t   nameR?   (   t   constraintst
   constraintt   orig_constraint_dict(   t   _on_enabled_changedR   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _after_add_selected_in_preview¸   s    c         ` s&   | j  ˆ  j k r" ˆ  j | j  =n  d  S(   N(   RS   R   (   RT   RU   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt"   _before_remove_selected_in_preview¿   s    c         ` s   i  ˆ  _  t ˆ  j _ d  S(   N(   R   R   R
   t   is_filtering(   RT   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _before_clear_constraintsÃ   s    	c         ` s)   t  d „  ˆ  j j ƒ  Dƒ ƒ ˆ  j _ d  S(   Nc         s` s   |  ] } | d  j  Vq d S(   u   enabledN(   R   (   t   .0RU   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pys	   <genexpr>É   s   (   t   anyR   t   valuesR
   RZ   (   t   constraint_enabled(   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRW   Ç   s    	u   main/constraintsu   after-add-actionu   before-remove-actionu   before-clear-actions(   R   R?   (   R   RX   RY   R[   (    (   RW   R   sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR!   ·   s    

c         ` sÙ   ‡  ‡ f d †  } ‡ f d †  } ‡ f d †  } ‡ f d †  ‰  ˆ j  d j d | t j ƒ ˆ j  d j d | ƒ ˆ j  d j d | ƒ ˆ j  d	 j d | t j ƒ ˆ j  d	 j d | ƒ ˆ j  d	 j d | ƒ d  S(
   Nc         ` sO   | d j  | k rK | ˆ j | j ƒ  <ˆ  | d ƒ | d j d ˆ  ƒ n  d  S(   Nu	   orig_nameu   enabledu   value-changed(   R   R   t   get_pathR?   (   t   actionsRA   t   orig_action_dictt   builtin_actions(   t"   _update_rendering_of_image_previewR   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _after_add_actionÖ   s    c         ` s,   | j  ƒ  ˆ  j k r( ˆ  j | j  ƒ  =n  d  S(   N(   R`   R   (   Ra   RA   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _before_remove_actionÝ   s    c         ` sV   x6 |  D]. } | j  ƒ  ˆ  j k r ˆ  j | j  ƒ  =q q Wˆ  j sR ˆ  j j ƒ  n  d  S(   N(   R`   R   R   t   prepare_image_for_rendering(   Ra   RA   (   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   _before_clear_actionsá   s
    	c         ` sL   t  d „  ˆ  j j ƒ  Dƒ ƒ s/ ˆ  j j ƒ  n ˆ  j j d g d g ƒ d  S(   Nc         s` s   |  ] } | d  j  Vq d S(   u   enabledN(   R   (   R\   RA   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pys	   <genexpr>ê   s    u   after_process_item_contents(   R]   R   R^   R   Rg   (   t   action_enabled(   R   (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRd   é   s    	u   main/proceduresu   after-add-actionu   before-remove-actionu   before-clear-actionsu   main/constraints(   R   R?   R   t   BUILTIN_PROCEDURESR   t   BUILTIN_CONSTRAINTS(   R   Re   Rf   Rh   (    (   Rd   R   sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR"   Õ   s(    




c         C` s(   |  j  d j d d „  |  j  d ƒ d  S(   Nu"   gui/image_preview_automatic_updateu   value-changedc         S` s   | j  t ƒ S(   N(   RF   R   (   RK   t   update_if_below_setting(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRN   	  RO   u<   gui/image_preview_automatic_update_if_below_maximum_duration(   R   R?   (   R   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR#     s    c         C` sP   t  j j |  j ƒ p' t  j j |  j ƒ } | d  k	 rL | j d |  j ƒ n  d  S(   Nu   notify::is-active(   R0   t   guit   get_toplevel_windowR
   R   t   NoneR&   t   _on_toplevel_notify_is_active(   R   t   toplevel(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR$     s    c         C` s   |  j  ƒ  |  j ƒ  d  S(   N(   t   _update_selected_itemst   _update_image_preview(   R   t   preview(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR'     s    
c         C` sR   t  | t j ƒ rA |  j j t |  j ƒ |  j j t |  j ƒ n  |  j j ƒ  d  S(   N(	   t
   isinstanceR   t   ActionErrorR
   RH   R   RI   R   t   update_item(   R   Rt   t   error(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR(     s    c         C` s   |  j  ƒ  d  S(   N(   Rs   (   R   Rt   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR)     s    c         C` su   | j  ƒ  rq t j j |  j j ƒ t j j |  j j ƒ |  j j d t ƒ |  j sa |  j	 ƒ  qq |  j j ƒ  n  d  S(   Nt   reset_items(
   t	   is_activeR0   R1   R5   R
   R4   R   R   R   t/   _set_initial_selection_and_update_image_preview(   R   Rq   R8   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRp   !  s    	c         C` sM   | j  t | ƒ | j | j t ƒ t j j |  j | j	 ƒ | j
 t ƒ d  S(   N(   RH   R   t   add_function_at_updatet   set_sensitiveR   R0   R1   t   timeout_addR3   R4   RF   (   R   Rt   t   preview_sensitive_settingt   update_lock_key(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR.   -  s
    	c         C` s.   | j  t | ƒ | j t ƒ | j t ƒ d  S(   N(   RH   R   R}   R   RF   (   R   Rt   R   R€   (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR-   7  s    c         C` sÁ   |  j  d j |  j j } | s) d  } n t | ƒ d } | d  k r— |  j  d j |  j j r— |  j j d  k	 r— |  j j j } |  j j | g ƒ n |  j	 j
 | ƒ |  j	 j ƒ  t |  _ d  S(   Nu"   gui/image_preview_displayed_layersi    u   main/selected_layers(   R   R   R   RM   Ro   t   listt   active_layerR
   RP   R   Rw   R4   R   R   (   R   t   setting_valuet   raw_item_id_to_display(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR{   =  s    	c         C` s>   |  j  d j } |  j j | |  j j <|  j  d j | ƒ d  S(   Nu   main/selected_layers(   R   R   R
   t   selected_itemsR   RM   RF   (   R   t   selected_items_dict(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRr   Q  s    c         C` sÈ   |  j  j ƒ  } | d  k	 r‚ |  j j d  k sc | j j |  j j j j k sc | j |  j j j k rÄ | |  j _ |  j j ƒ  qÄ nB |  j  j	 ƒ  } | r· | d |  j _ |  j j ƒ  n |  j j
 ƒ  d  S(   Ni    (   R
   t   get_item_from_cursorRo   R   t   itemt   rawRM   t   typeR4   t   get_items_from_selected_rowsRQ   (   R   t   item_from_cursort   items_from_selected_rows(    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyRs   V  s    (   t   __name__t
   __module__RJ   R3   RI   R   R%   R*   R;   R=   R   R>   R   R   R    R!   R"   R#   R$   R'   R(   R)   Rp   R.   R-   R{   Rr   Rs   (    (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyR	      s4   				#	(								1							
			N(   t   __doc__t
   __future__R    R   R   R   t   future.builtinst   export_layersR   R0   R   R   R   t   objectR	   (    (    (    sO   /home/josie/.config/GIMP/2.10/plug-ins/export_layers/gui/previews_controller.pyt   <module>   s   "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  # -*- coding: utf-8 -*-

"""Progress indicator for processed items."""

from __future__ import absolute_import, division, print_function, unicode_literals
from future.builtins import *

import pygtk
pygtk.require('2.0')
import gtk

import gimp

from export_layers import pygimplib as pg


class ItemProgressIndicator(object):
  """
  This class controls a single progress bar to indicate the number of processed
  items and the status of the currently processed item.
  """
  
  def __init__(self, progress_bar, progress_updater):
    self._progress_bar = progress_bar
    self._progress_updater = progress_updater
    
    self._progress_callback = None
    self._progress_set_fraction_func = self._progress_set_fraction
  
  def install_progress_for_status(
        self, progress_set_value=None, progress_reset_value=None):
    """
    Initialize the progress bar for the current item status to update according
    to GIMP PDB calls.
    """
    if gimp.version >= (2, 9):
      return
    
    if progress_set_value is not None:
      self._progress_set_fraction_func = progress_set_value
    else:
      self._progress_set_fraction_func = self._progress_set_fraction
    
    if progress_reset_value is None:
      def progress_reset_value_default(*args):
        self._progress_set_fraction(0.0)
      
      progress_reset_value = progress_reset_value_default
    
    self._progress_callback = gimp.progress_install(
      progress_reset_value,
      progress_reset_value,
      pg.utils.empty_func,
      self._progress_set_value_for_status)
  
  def uninstall_progress_for_status(self):
    """
    Reset the progress bar for the current item status so that it no longer
    updates according to GIMP PDB calls.
    """
    if gimp.version >= (2, 9):
      return
    
    if self._progress_callback is not None:
      gimp.progress_uninstall(self._progress_callback)
      self._progress_callback = None
  
  def _progress_set_fraction(self, fraction):
    self._progress_bar.set_fraction(fraction)
    while gtk.events_pending():
      gtk.main_iteration()
  
  def _progress_set_value_for_status(self, fraction):
    relative_fraction = (
      (self._progress_updater.num_finished_tasks / self._progress_updater.num_total_tasks)
      + (fraction / self._progress_updater.num_total_tasks))
    
    self._progress_set_fraction_func(relative_fraction)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    