???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................ó
ż^c           @   sE   d  Z  d d l Z d d l m Z d d l Z d d d     YZ d S(   s˝  Switchboard class.

This class is used to coordinate updates among all Viewers.  Every Viewer must
conform to the following interface:

    - it must include a method called update_yourself() which takes three
      arguments; the red, green, and blue values of the selected color.

    - When a Viewer selects a color and wishes to update all other Views, it
      should call update_views() on the Switchboard object.  Note that the
      Viewer typically does *not* update itself before calling update_views(),
      since this would cause it to get updated twice.

Optionally, Viewers can also implement:

    - save_options() which takes an optiondb (a dictionary).  Store into this
      dictionary any values the Viewer wants to save in the persistent
      ~/.pynche file.  This dictionary is saved using marshal.  The namespace
      for the keys is ad-hoc; make sure you don't clobber some other Viewer's
      keys!

    - withdraw() which takes no arguments.  This is called when Pynche is
      unmapped.  All Viewers should implement this.

    - colordb_changed() which takes a single argument, an instance of
      ColorDB.  This is called whenever the color name database is changed and
      gives a chance for the Viewers to do something on those events.  See
      ListViewer for details.

External Viewers are found dynamically.  Viewer modules should have names such
as FooViewer.py.  If such a named module has a module global variable called
ADDTOVIEW and this variable is true, the Viewer will be added dynamically to
the `View' menu.  ADDTOVIEW contains a string which is used as the menu item
to display the Viewer (one kludge: if the string contains a `%', this is used
to indicate that the next character will get an underline in the menu,
otherwise the first character is underlined).

FooViewer.py should contain a class called FooViewer, and its constructor
should take two arguments, an instance of Switchboard, and optionally a Tk
master window.

i˙˙˙˙N(   t   DictTypet   Switchboardc           B   sw   e  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 RS(   c         C   sć   | |  _  d  |  _ i  |  _ g  |  _ d |  _ d |  _ d |  _ d |  _ d  } | râ zt yS t	 |  } t
 j |  |  _ t |  j t  sŠ t j d I| IJi  |  _ n  Wn t t t f k
 rĆ n XWd  | rŢ | j   n  Xn  d  S(   Ni    s"   Problem reading options from file:(   t   _Switchboard__initfilet   Nonet   _Switchboard__colordbt   _Switchboard__optiondbt   _Switchboard__viewst   _Switchboard__redt   _Switchboard__greent   _Switchboard__bluet   _Switchboard__canceledt   opent   marshalt   loadt
   isinstanceR    t   syst   stderrt   IOErrort   EOFErrort
   ValueErrort   close(   t   selft   initfilet   fp(    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   __init__3   s,    								c         C   s   |  j  j |  d  S(   N(   R   t   append(   R   t   view(    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   add_viewM   s    c         C   sF   | |  _  | |  _ | |  _ x$ |  j D] } | j | | |  q% Wd  S(   N(   R   R   R	   R   t   update_yourself(   R   t   redt   greent   bluet   v(    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   update_viewsP   s
    			c         C   s    |  j  |  j |  j |  j  d  S(   N(   R!   R   R   R	   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   update_views_currentW   s    c         C   s   |  j  |  j |  j f S(   N(   R   R   R	   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   current_rgbZ   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   colordb]   s    c         C   sJ   | |  _  x0 |  j D]% } t | d  r | j |  q q W|  j   d  S(   Nt   colordb_changed(   R   R   t   hasattrR%   R"   (   R   R$   R    (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   set_colordb`   s
    	c         C   s   |  j  S(   N(   R   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   optiondbg   s    c         C   sô   |  j  |  j d <|  j |  j d <|  j |  j d <x3 |  j D]( } t | d  r: | j |  j  q: q: W|  j j   |  j d <d  } zW y t
 |  j d  } Wn' t k
 rÄ t j d I|  j IJn Xt j |  j |  Wd  | rď | j   n  Xd  S(   Nt   REDt   GREENt   BLUEt   save_optionst   DBFILEt   ws   Cannot write options to file:(   R   R   R   R	   R   R&   R,   R   t   filenameR   R   R   R   R   R   R   t   dumpR   (   R   R    R   (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt
   save_viewsj   s"    c         C   s4   x- |  j  D]" } t | d  r
 | j   q
 q
 Wd  S(   Nt   withdraw(   R   R&   R2   (   R   R    (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   withdraw_views   s    i   c         C   s   | |  _  d  S(   N(   R
   (   R   t   flag(    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   canceled   s    c         C   s   |  j  S(   N(   R
   (   R   (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt
   canceled_p   s    (   t   __name__t
   __module__R   R   R!   R"   R#   R$   R'   R(   R1   R3   R5   R6   (    (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyR   2   s   										(    (   t   __doc__R   t   typesR    R   R   (    (    (    s8   /usr/lib64/python2.7/site-packages/pynche/Switchboard.pyt   <module>*   s   