ó
ÉÝ{Tc           @   sK   d  Z  d d l Z d d l Z d d l Z d d l Td d d „  ƒ  YZ d S(   s‘  
     python/ui/COLOUR.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009 University of York
     Copyright (C) 2012 STFC

     This library is free software: you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public License
     version 3, modified in accordance with the provisions of the 
     license to address the requirements of UK law.
 
     You should have received a copy of the modified GNU Lesser General 
     Public License along with this library.  If not, copies may be 
     downloaded from http://www.ccp4.ac.uk/ccp4license.php
 
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU Lesser General Public License for more details.
iÿÿÿÿN(   t   *t   COLOURc           B   sg  e  Z d  Z d „  Z d „  Z d  g  d" d „ Z d d „ Z d d „ Z d „  Z	 d „  Z
 d	 „  Z g  d
 „ Z d „  Z d d d „ Z d „  Z d „  Z d „  Z d „  Z d  g  d „ Z d „  Z d „  Z d „  Z d d d „ Z g  d „ Z d" d" d „ Z d „  Z d" d" d d  d „ Z d" d „ Z d" d „ Z d" d  d „ Z d" d  d  „ Z d  d  d d! „ Z  RS(#   t    c         C   s]   |  t  _ t } d |  _ g  |  _ d |  _ |  j ƒ  d d  l } | j ƒ  |  _ |  j	 ƒ  d  S(   Ni   i    iÿÿÿÿ(
   R   t   instst   Falset   new_name_numbert   rgbrepst   n_standard_rgbrepst   load_defaultt   cprimt   RGBRepst   initialiseRGBReps(   t   selft   usingOldColoursR	   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   __init__+   s    				
c         C   sZ   d } xM |  j  D]B \ } } |  j j | | d | d | d | d ƒ | d } q Wd  S(   Ni    i   i   i   (   R   R
   t	   AddColour(   R   t   iit   namet   rep(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR   9   s    ,c         C   sŒ  | sq d t  |  j ƒ } xB |  j | d d ƒd k r] |  j d |  _ d t  |  j ƒ } q W|  j d |  _ n` | d d !d k rÑ d d  l } | j | d d ƒ } | d k rÑ t |  j | d ƒ |  _ qÑ n  | sì d d d d g } n" t | ƒ d	 k r| j d ƒ n  x5 |  j D]* } | | d k r|  j	 | | ƒ | SqW|  j j | | g ƒ |  j
 j | | d | d | d
 | d	 ƒ | S(   Nt   user_t   safei    i   i   iÿÿÿÿg      à?g      ð?i   i   (   t   strR   t   indext   utilst   safeIntt   maxt   lent   appendR   t   resetR
   R   (   R   t   newnamet   newrgbR   R   t   nnt   rgbrep(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   newC   s,     ,i   c         C   sJ   d } x/ |  j  D]$ } | d } | | d k r | Sq W| rB d Sd Sd  S(   Niÿÿÿÿi   i    (   R   (   R   R   R   t   iR    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR   a   s    
c         C   sJ   d } x/ |  j  D]$ } | d } | | d k r | Sq W| rB d Sd Sd  S(   Niÿÿÿÿi   i    (   R   (   R   R   R   R"   R    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   colour_indexs   s    
c         C   s…   |  j  | d d ƒ} | d k  rv | d k rm |  j j | ƒ } g  } x! | D] } | j t | ƒ ƒ qL W| Sd } n  |  j | d S(   NR   i    t
   complementi   (   R   R
   t	   GetColourR   t   intR   (   R   R   R"   t   colt   colvt   item(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   RGB…   s     	c         C   sF   |  j  | ƒ } t | d d ƒ t | d d ƒ t | d d ƒ g S(   Ni    g     ào@i   i   (   R*   R&   (   R   R   t   rgb(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   RGB255™   s    c         C   sH  d d  l  } d d d d d d d d	 d
 d d d d d d d g } |  j | d d ƒ} | d k  r¸ | d k r¯ |  j j | ƒ } g  } x! | D] } | j t | ƒ ƒ qŽ W| Sd } n  d } xƒ |  j | d d d !D]i } | j t | d ƒ d ƒ \ }	 }
 | | t |
 ƒ } | j |	 d ƒ \ }	 }
 | | t |
 ƒ } q× W| S(   Niÿÿÿÿt   0t   1t   2t   3t   4t   5t   6t   7t   8t   9t   at   bt   ct   dt   et   fR   i    R$   R   i   i   gŽuqàï?g      0@(	   t   mathR   R
   R%   R   R&   R   t   modft   min(   R   R   R=   t   convR"   R'   R(   R)   t   rett   ffR   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   hexadecimalŸ   s$    6 	"c         C   sÝ   d } d } | r` t  j d d | ƒ } x6 |  j d D]$ } | d } | | d k r5 Pq5 q5 Wn  xk | d k rÍ | | } d } | t |  j ƒ k r¡ d | } qc | j |  j | d ƒ d k rc d } qc qc W|  j | d S(   Ni    i   t   _t    (   t   ret   subR   R   t   count(   R   R   t   excludeR"   t   incrt   nmR    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   next¾   s     

 c         C   sB   g  } x5 |  j  D]* } | d d  k r | j | d ƒ q q W| S(   Ni    (   R   t   NoneR   (   R   t   lR    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt
   colourlist×   s
    i    c         C   s°   | r d g } d g } n g  } g  } xY |  j  d D]J } | d d  k r5 | j | d ƒ | j t j d d | d ƒ ƒ q5 q5 W| r¦ | j d ƒ | j d ƒ n  | | g S(   NR$   i   i    RE   RD   t   Interactivet   interactive(   R   RM   R   RF   RG   (   R   R$   RQ   t   mmR   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   colour_menuâ   s    	'c         C   sQ   g  } xD |  j  D]9 } | d d  k r | j t j d d | d ƒ ƒ q q W| S(   Ni    RE   RD   (   R   RM   R   RF   RG   (   R   RN   R    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt
   colourkeysõ   s
    'c         C   sg   |  j  | d d ƒ} | d k r_ |  j | d } |  j j | ƒ |  j j | d  | g ƒ d Sd Sd  S(   NR   i    i   (   R   R   t   popt   insertRM   (   R   R   R"   R+   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   delete  s    c         C   s;   x4 t  |  j t |  j ƒ ƒ D] } d  |  j | d <q Wd  S(   Ni    (   t   rangeR   R   R   RM   (   R   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   clear_custom_colours  s    "c         C   sg   |  j  | d d ƒ} | d k r_ |  j | d } |  j j | ƒ |  j j | | | g ƒ d Sd Sd  S(   NR   i    i   (   R   R   RU   RV   (   R   R   R   R"   R+   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   rename  s    c         C   sÕ   | sX xÈ |  j  D]A \ } } | r |  j j | | d | d | d | d ƒ q q Wny |  j | d d ƒ} | d k rÑ |  j  j | ƒ |  j  j | | | g ƒ |  j j | | d | d | d | d ƒ n  d  S(   Ni    i   i   i   R   (   R   R
   R   R   RU   RV   (   R   R   R   RK   R+   R"   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR   (  s    6c         C   sG   g  } x+ |  j  D]  } | d r | j | ƒ q q W|  j } | | g S(   Ni    (   R   R   R   (   R   R   R   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt	   getparams7  s    
 	c         C   s¢   g  } x• t  d |  j ƒ D]� } |  j | d d k r |  j | d g } x= t  d d ƒ D], } | j t |  j | d | d ƒ ƒ qZ W| j | ƒ q q W| S(   Ni    t   defaulti   i   g     ào@(   RX   R   R   R   R&   (   R   t   colst   nR'   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   get_standard_colours@  s    *c         C   s¶   g  } x© t  |  j t |  j ƒ ƒ D]Œ } |  j | d r" |  j | d } |  j | d g } x= t  d d ƒ D], } | j t |  j | d | d ƒ ƒ qn W| j | ƒ q" q" W| S(   Ni    i   i   g     ào@(   RX   R   R   R   R   R&   (   R   R]   R^   R   R'   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   get_custom_coloursL  s    "*t   methodc         C   s.  d d  l  } d d  l } d } | d k r9 d } d } n d } |  j d } i  }	 x0 |  j D]% }
 |
 d r\ |
 d	 |	 |
 d <q\ q\ W| d
 } xn |  j D]c }
 |
 d r™ | d |
 d d } x& |
 d	 D] } | t | ƒ d } qÊ W| d d !d } q™ q™ W| d d !d } | d d !d | d } | S(   Niÿÿÿÿi   Ra   t   )s
   Colours ( t   }s    = {i    i   s   colour_definitions = {
s             's   ' : [t   ,s   ],
iþÿÿÿs     } 
s   
      s   

(   R   RF   R   R   R   (   R   t   pretty_printt   stylet   allR   RF   t   indentt   b_endt   streamt   repsR)   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   save_picture_definitionY  s*    	
 

 c         C   sg   t  | ƒ d k rc | \ } } |  j d k r9 | |  _ n  x' | D] \ } } |  j | | ƒ q@ Wn  d  S(   Ni   i    (   R   R   R!   (   R   t   paramsR   R   R   R+   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt	   setparams  s     c         C   s®   i  } i  } i  } x$ | d D] } | d | | d <q Wxh | d D]\ } | j  | d ƒ rD | | d | d k rD | d | | d <| | d | | d <qD qD W| | g S(   Ni    i   (   t   has_key(   R   t   initial_statust   final_statust   finalt   initial_changedt   final_changedR)   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   compare_objectsŠ  s     +c         C   s\   t  | ƒ d k rX | \ } } x* | D]" \ } } |  j d | d | ƒ q% W|  j ƒ  n  d  S(   Ni   R   R   (   R   R   t   handle_colour_change(   R   t   statusR   t   nrgbrepsR   R+   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   update_data_statusš  s
    g        c   
      K   s—   x† | j  ƒ  D]x \ } } g  } x@ d d d g D]/ }	 | j d | | |	 | | | |	 ƒ q/ W| j d ƒ |  j d | d | ƒ q W|  j ƒ  d  S(   Ni    i   i   iÿ   R   R   (   t   itemsR   R   Rv   (
   R   Rp   Rq   t   fractiont   stept   keywordst   keyt   valueR+   R"   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   movie_interpolation¥  s    -c         C   s¡   g  } x+ |  j  D]  } | d r | j | ƒ q q W|  j } | sb d d  l } | j ƒ  d } n  t | d ƒ } t j | ƒ } | j | | g ƒ | j	 ƒ  d  S(   Ni    iÿÿÿÿs   /.CCP4MG/mg_colours.pklt   w(
   R   R   R   R   t   get_HOMEt   opent   picklet   Picklert   dumpt   close(   R   t   filenameR   R   R   R   R<   t   p(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR†   ³  s    
 	c         C   s´   | s% d d  l  } | j ƒ  d } n  t j j | ƒ r¦ yD t | d ƒ } t j | ƒ } | j ƒ  \ |  _	 |  _
 | j ƒ  Wq° | j ƒ  |  j ƒ  d G| GHd SXn
 |  j ƒ  d  S(   Niÿÿÿÿs   /.CCP4MG/mg_colours.pklt   rs$   Error loading colour data from file:i    (   R   R‚   t   ost   patht   existsRƒ   R„   t	   Unpicklert   loadR   R   R‡   R   (   R   Rˆ   R   R<   R‰   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR�   Ä  s     

	
c         C   s6   t  j j t  j d d d d ƒ } |  j | | ƒ d  S(   Nt   CCP4MGt   pythont   etcs   colour_252.py(   R‹   RŒ   t   joint   environR   (   R   Rˆ   t   colour(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   load_old_defaultí  s    "c   	      C   sM  | s+ t  j j t  j d d d d ƒ } n  i  } i  } t | | | ƒ | r¬ d } xó | d D]G } | d } | | d k r^ |  j j | ƒ |  j j | | ƒ d  Sq^ Wn� x{ | d D]o \ } } |  j | d	 d ƒ} | d k r|  j j | ƒ |  j j | | | g ƒ q· |  j j	 | | g ƒ q· W|  j
 sIt | d ƒ |  _
 n  d  S(
   NR�   R‘   R’   s	   colour.pyiÿÿÿÿR   i   i    R   (   R‹   RŒ   R“   R”   t   execfileR   RU   RV   R   R   R   R   (	   R   Rˆ   R•   t   globalst   localsR"   R+   t   defnR   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR   ò  s,    
	c         C   s×   d d  l  } | rB x- | j ƒ  D] } | j d | d | ƒ q Wn  | rx xˆ | j ƒ  D] } | j d | d | ƒ qU Wn[ d } | s� |  j | ƒ |  j k r¦ d } n  x* | j ƒ  D] } | j d | d | ƒ q³ Wd  S(   NiÿÿÿÿR   RW   RZ   i   i    t   standard(   t   dataobjt   get_dispobjRv   R   R   (   R   R   RZ   RW   Rœ   t   objR›   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyRv     s     	N(!   t   __name__t
   __module__R   R   R   RM   R!   R   R#   R*   R,   RC   RL   RO   RS   RT   RW   RY   RZ   R   R[   R_   R`   Rl   Rn   Ru   Ry   R€   R†   R�   R–   R   Rv   (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyR   '   s>   		
												&	)'(    (   t   __doc__R„   R‹   RF   t   global_definitionsR   (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/COLOUR.pyt   <module>   s
   
