ó
ÉÝ{Tc           @   s”  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z m	 Z	 m
 Z
 m Z d d l Z d d l m Z m Z m Z d d l Z d d l Z d d l m Z m Z m Z y@ d d l Z d d l Z d d l Z d d l Z d d l Z Wn,e k
 r:e j ƒ  d  \ Z Z Z e e ƒ j  d ƒ d k r¥e j! j" e j! j# e j$ d ƒ d	 d
 ƒ Z% e	 j& j' d d d e% d e	 j& j) ƒ n… e j ƒ  d  \ Z Z Z e	 j& j' d d d e	 j& j) ƒ e j* j+ e e ƒ d ƒ e j* j+ e e ƒ d ƒ d d l, Z, e, j- e ƒ e j. d ƒ n Xd d „ Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d e
 j5 e f d „  ƒ  YZ6 d S(   s–  
     qtgui/MGGLWidget.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009-2011 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   QtCoret   QtGuit   QtOpenGLt   QtSvg(   t   PMt
   MAINWINDOWt   get_dispobj(   t   MGGLWidgetCoret   MGGLWidgetSimplet   MGGLWidgetGLi   s'   cannot restore segment prot after reloct   CCP4MGt   bins   fix-selinux-permss&   Failed to import some ccp4mg librariess7   SELINUX stoppped ccp4mg working.
Please run the script
s   
to fix this problem.sn   There was a problem with some of the program libraries. Please report this as a bug to ccp4mg@ysbl.york.ac.uk.s   
i   i   c         C   s|   |  } t  } t j ƒ  } | j d ƒ | j d ƒ | j d ƒ | j t ƒ t j	 d k rk | j
 d ƒ n  | j t ƒ | S(   Ni   t   linux2(   t   FalseR   t	   QGLFormatt   setRgbat   setDeptht   setAlphat
   setStencilt   Truet   syst   platformt   setSwapIntervalt   setSampleBuffers(   t   startt   numSampleBufferst   haveSampleBufferst   fmt(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   getMaxSampleBuffersFormat=   s    c          C   s’   y t  d ƒ j ƒ  }  t j j ƒ  } |  j d ƒ r~ | j d |  d ƒ x t ƒ  D] } | j ƒ  qQ Wd d  l	 } | j
 ƒ  n  Wn d GHn Xd  S(   Nt   miscell_prefst	   flip_textt   flip_labelsiÿÿÿÿs"   Error getting micellaneous options(   R   t	   getparamsR   t   QApplicationt   instancet   has_keyt   setPropertyR   t   set_redraw_textt   rebuildt   UpdateDisplay(   t   paramst   appt   dispobjR&   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   applyMiscPrefsJ   s     c          C   sQ   d d  l  }  y2 t d ƒ j ƒ  } |  j ƒ  } | j j | ƒ Wn d GHn Xd  S(   Niÿÿÿÿt   ambient_occlusion_prefss   Error getting SSAO options(   t   MGApplicationR   R    t   GetMainWindowt   glWidgett   setAmbientOcclusionPrefs(   R-   R(   t   mainwin(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   applyAOPrefsW   s    c          C   sL  d d  l  }  |  j d d d d d d d d	 d
 d d d g d t d i d d	 6d d
 6d d 6d d 6d d 6d i t d t d d d d d d d d ƒ d	 6t d t d d d d d d d d ƒ d
 6t d t d d d d  d d! d d ƒ d 6t d t d d" d d d# d$ d d% d d ƒ d 6t d t d d" d d d# d$ d d& d d ƒ d 6ƒ } | S('   Niÿÿÿÿt   nameR,   t   titles   Ambient occlusion optionst   helpt   _has_no_help_t   guit   ambocc_zneart   ambocc_zfart   ambocc_radiust   ambocc_scalet   ambocc_biast   apply_actiont   defaultg      Y@g     Àb@g      .@g333333Ó?g      ð?t
   definitiont   typet   mini    t   maxiX  t   labels   Ambient occlusion Near eyet   stylet   spinboxs   Ambient occlusion Far eyei–   s   Ambient occlusion radiusg        t   stepgš™™™™™¹?s   Ambient occlusion biass   Ambient occlusion scale(   t   servicest   ParamsManagerR2   t   dictt   float(   RG   t   pm(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   createAOParamsManagera   s(    	
(((.4c          C   s
  d d  l  }  |  j d d d d d d d d	 d
 t d d d d d d g d i d d 6d d 6d d 6d d 6d d 6d i t d t d d d d ƒ d 6t d t d d d d ƒ d 6t d t d d d d ƒ d 6t d t d d d d ƒ d 6t d t d d d d ƒ d 6ƒ } | S(   NiÿÿÿÿR3   R   R4   s   Miscellaneous graphics optionsR5   R6   t   c_accessi   R=   R7   t   text_label_backgroundt   text_label_background_colourt   fog_textt
   depth_textR   R>   i    t   whiteR?   R@   RC   s   Text label background colourRD   t   colourcombos   Text labels have backgroundt   checkboxs"   Apply depth-cue fog to text labelss(   Text labels can disappear behind objectss   Invert text display(   RG   RH   R+   RI   t   strt   int(   RG   RK   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   createMiscParamsManager{   s     	)"c       "   C   s*  d d  l  }  d d  l } d „  } |  j d d d d d d d	 d
 d | d d d | j ƒ  j d d d d g d i d d 6d d 6d d 6d i t d t d d d d d d d g d d d g d  | ƒ d 6t d d! d d" d# d$ d% d& d' d( d d) ƒ d 6t d d! d d* d# d+ d% d, d' d( d d) ƒ d 6ƒ 
} | S(-   Niÿÿÿÿc         S   sâ   |  j  t j d ƒ } |  j  t j d ƒ } |  j  t j d ƒ } | sT | sT | rX d  St | d ƒ sˆ t | d ƒ sˆ t | d ƒ rŒ d  S| j ƒ  | j d ƒ k rÄ | j t ƒ | j t ƒ n | j t ƒ | j t ƒ d  S(   Nt   stereo_modet	   shear_sept   rot_sept   currentTextt
   setEnabledt   Rotation(	   t	   findChildR   t   QWidgett   hasattrR[   t   trR\   R   R   (   t   pmgt   stereoModeWidgett   shearSepWidgett   rotSepWidget(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   onChange•   s    0R3   t   stereo_prefst   picture_definitioni   R4   s   Stereo preferencesR5   R6   t   onCreateRM   R=   R7   RX   RY   RZ   R>   gš™™™™™¹?g      @R?   R@   RC   s   Stereo modeRD   t   comboboxt   menut   ShearR]   t   aliasi    t   onchangeRJ   s   Shear separationRB   g      @RA   g      ÀRF   gš™™™™™©?RE   s   Rotation angleg      $@g      $À(   RG   R-   RH   R.   t   applyStereoPrefsRI   RV   (   RG   R-   Rf   RK   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   createStereoParamsManager�   s.    			

(.4t
   MGGLWidgetc           B   sà  e  Z d  „  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d	 „  Z	 d
 „  Z
 e j d d ƒ e e d „ Z e j d d ƒ e e d „ Z e j d d ƒ d „ Z e d e d „ Z d „  Z d „  Z e d „ Z d „  Z e d d „ Z e d d „ Z e d d „ Z e e e e e j d 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( e e d' „ Z) d( „  Z* d d) „ Z+ d d* „ Z, d d+ d, „ Z- d- „  Z. d d. „ Z/ d/ „  Z0 d0 „  Z1 d1 „  Z2 d2 „  Z3 d3 „  Z4 d4 „  Z5 d5 „  Z6 d6 „  Z7 d7 „  Z8 d8 „  Z9 d9 „  Z: d: „  Z; d; „  Z< d< „  Z= d= „  Z> d> „  Z? d? „  Z@ d@ „  ZA dA „  ZB dB „  ZC dC „  ZD d dD „ ZE dE „  ZF dF „  ZG d dG „ ZH i  dH „ ZI dI „  ZJ dJ „  ZK dK „  ZL dL „  ZM dM „  ZN dN „  ZO dO „  ZP dP „  ZQ dQ „  ZR dR „  ZS dS „  ZT dT „  ZU dU „  ZV dV „  ZW dW „  ZX dX „  ZY dY „  ZZ dZ „  Z[ d[ „  Z\ d\ „  Z] d] „  Z^ d^ „  Z_ e d d_ „ Z` d` „  Za da „  Zb RS(b   c         C   s   t  j j |  ƒ d  S(   N(   R   t	   QGLWidgett   updateGL(   t   self(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRs   ½   s    c         C   s   t  j j |  ƒ d  S(   N(   R   Rr   t   makeCurrent(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRu   À   s    c         C   së   t  j d k rØ t  j d k rØ t j d k rØ | j ƒ  t  j j k rØ |  j rˆ |  j	 rˆ |  j
 rˆ |  j	 j d ƒ } |  j	 j | d ƒ n  |  j rË |  j rË |  j
 rË |  j j d ƒ } |  j j | d ƒ n  |  j | ƒ St j j |  | ƒ S(   Ni  i  i 
 t   shadowQualityi    (   R    t
   QT_VERSIONt   PYQT_VERSIONt   sipt   SIP_VERSIONR@   t   QEventt   Gesturet
   shaders_ont   shadert   doShadowt   getUniformLocationt	   Uniform1it   circleShadert   gestureEventR   Rr   t   event(   Rt   t   eRv   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR„   Ã   s    Ec         C   sÚ   t  j d k  s- t  j d k  s- t j d k  r1 d  S| j t  j j ƒ } | j t  j j ƒ } | j t  j j	 ƒ } | ry n  | r‚ n  | rÖ |  j
 | d d | j ƒ  | j ƒ  ƒ |  j d d | j ƒ  | j ƒ  ƒ n  t S(   Ni  i  i 
 i    i2   (   R    Rw   Rx   Ry   Rz   t   gesturet   Qtt   PinchGesturet   SwipeGesturet
   PanGesturet
   handleZoomt   scaleFactort   lastScaleFactort   setRotationt   rotationAnglet   lastRotationAngleR   (   Rt   R…   t   pincht   swipet   pan(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRƒ   Î   s    - ''iÿ   c         C   sˆ   t  j | | | | ƒ |  _ |  j ƒ  |  j r; |  j ƒ  n  |  j |  j ƒ |  j ƒ  t j	 ƒ  j
 | d | d | d | d g ƒ d  S(   Ng     ào@(   R   t   QColort   bgcolourRu   t   use_pbuffert   BindOffScreenBuffert   qglClearColorRs   t   cprimt   RGBRepst   SetBackgroundColour(   Rt   t   rt   gt   bt   a(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setBackgroundÞ   s    
	
i   c            s¸  d d  l  } ˆ  j } | d | d | d f } | ret j ƒ  ˆ  _ ˆ  j r‹ ˆ  j r‹ ˆ  j r‹ ˆ  j j d ƒ } ˆ  j j | d ƒ n  ˆ  j rÎ ˆ  j	 rÎ ˆ  j rÎ ˆ  j	 j d ƒ } ˆ  j	 j | d ƒ n  ‡  f d †  } t
 ˆ  d ƒ rü ˆ  j j ƒ  n  t j ˆ  ƒ ˆ  _ ˆ  j ˆ  j t j d ƒ | j | | | ƒ ƒ ˆ  j j ƒ  ˆ  j t j d	 ƒ ˆ  ƒ nO | ˆ  _ ˆ  j t j d
 ƒ ˆ  ƒ ˆ  j ƒ  ˆ  j ƒ  ˆ  j t j d	 ƒ ˆ  ƒ d  S(   Niÿÿÿÿi    i   i   Rv   c            sS  t  j  ƒ  ˆ  j } t d | ƒ } d | } | |  d | | d | |  d | | d | |  d | | d g } | ˆ  _ ˆ  j t j d ƒ ˆ  ƒ ˆ  j ƒ  ˆ  j ƒ  | d k rOˆ  j	 rü ˆ  j
 rü ˆ  j rü ˆ  j
 j d ƒ } ˆ  j
 j | d ƒ n  ˆ  j	 r?ˆ  j r?ˆ  j r?ˆ  j j d ƒ } ˆ  j j | d ƒ n  ˆ  j j ƒ  n  d  S(   Ng      ð?i    i   i   t   PositionChangedRv   (   t   timet   glide_initial_timeRA   t   rpost   emitR    t   SIGNALt   SetupSymmetryRs   R}   R~   R   R€   R�   R‚   t   glide_timert   stop(   t   rpos_oldt   rpos_newt   elapsedt   fit   fipt   rpos_curRv   (   Rt   (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   glide_handler÷   s     
K	

R¨   s	   timeout()t   ViewChangedR¡   (   t	   functoolsR¤   R¢   R£   R}   R~   R   R€   R�   R‚   R`   R¨   R©   R    t   QTimert   connectR¦   t   partialR   R¥   R§   Rs   (   Rt   t   origint   glideR²   Rª   R«   Rv   R°   (    (   Rt   s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   centreOnç   s.    	.	

c         C   s>   |  j  ƒ  |  j r  |  j ƒ  n  |  j s- d  St j |  ƒ d  S(   N(   Ru   R–   R—   t	   show_axesR	   t   DrawAxes(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRº     s    
		 c         C   s>   |  j  ƒ  |  j r  |  j ƒ  n  |  j s- d  St j |  ƒ d  S(   N(   Ru   R–   R—   t
   show_scaleR	   t	   DrawScale(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR¼     s    
		 c         C   s   |  j  j ƒ  S(   N(   R•   t   alpha(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   getBackgroundAlpha%  s    iX  c   %      C   s8
  d d  l  } | j  ƒ  } d } d } d |  _ |  j ƒ  |  j ƒ  } }	 t |  d ƒ sî t j ƒ  }
 |  j ƒ  j ƒ  d k r• |
 j	 |  j ƒ  j ƒ  ƒ n  |
 j
 t j j ƒ t j t j | d |  j | d |  j ƒ |
 ƒ |  _ |  j |  _ n  |  j } | | j ƒ  k  s| | j ƒ  k  rÆ| j ƒ  | d | } | j ƒ  | d | } t j | | | | ƒ } t | j ƒ  ƒ | j ƒ  |  j |  _ t d ƒ | j ƒ  |  j |  _ |  j GH|  j d d ƒ n" | } |  j | j ƒ  | j ƒ  ƒ | |  _ t |  _ |  j r=|  j r=|  j r=|  j j d ƒ } |  j j | d ƒ n  |  j r€|  j r€|  j r€|  j j d ƒ } |  j j | d ƒ n  |  j ƒ  t |  _ d d  l  } | j! d	 ƒ } | j" d
 ƒ } t } | rçd G|  j# GHt |  _ t } n  t |  _$ t |  _ |  j% d d ƒ t |  _ |  j ƒ  |  j& } |  j' } |  j( } |  j) ƒ  d } | G| j ƒ  G| G| j ƒ  GH| | j ƒ  k rB| | j ƒ  k rBd |  _* | r³| j ƒ  t | ƒ |  _+ n	 d |  _+ t |  _' t |  _( d# |  _, |  j) ƒ  |  j j- ƒ  j. d | | j ƒ  d |  j | j ƒ  | j ƒ  ƒ } |  j) ƒ  | |  _' | |  _( nGt |  _' t |  _( d | j ƒ  |  j ƒ  } t/ j0 | | | | ƒ } | j1 t/ j2 d d d d ƒ ƒ | d | d | | d | d | f |  _, t3 t | j ƒ  ƒ | t | j ƒ  ƒ | ƒ |  _* | r8| j ƒ  t | ƒ |  _+ d G|  j+ GHn	 d |  _+ |  j4 } t/ j5 | ƒ } x{t6 | ƒ D]m} xdt6 | ƒ D]V} t rë| d k rët7 j8 | t |  j ƒ | d d | d |  j9 |  j d d |  j ƒ  d d ƒ } ný t rW| d k rWt7 j8 d | t |  j ƒ | d d | d |  j9 |  j d d |  j ƒ  d ƒ } n‘ t7 j8 | t |  j ƒ | d | d |  j9 |  j d d |  j ƒ  | t |  j ƒ | d | d |  j9 |  j d d |  j ƒ  d ƒ } g  } x| D]þ }  t |  d ƒ rõ|  j: d ƒ rõ|  j: d ƒ rõt; |  d ƒ d k rõ|  d }! t7 j8 |! d |! d |! d ƒ }" d }# |" j< ƒ  d k r¥|" j= ƒ  t7 j8 j> | |" ƒ }# n  i  }$ |  d |$ d <|! d |! d |! d |! d |# f |$ d <| j? |$ ƒ qõqõW|  j@ | ƒ |  jA jB ƒ  | } | d | jC ƒ  | d | jD ƒ  | d | jE ƒ  f |  _& |  j) ƒ  |  j j- ƒ  j. |  j |  j | | ƒ } | jF | | | | d | | ƒ d G| G| G| j  ƒ  | GHtG jH jI ƒ  qyWqfW| jJ ƒ  | j- ƒ  j. | j ƒ  | j ƒ  d | | | j ƒ  | j ƒ  | j ƒ  d | j ƒ  | j ƒ  ƒ } d G| j  ƒ  | GHtG jH jI ƒ  | |  _' | |  _( d$ |  _, | |  _4 | |  _ | |  _& |  jK | d | d | d  | ƒd! G| j  ƒ  | GHtG jH jI ƒ  d  |  _* d |  _+ t |  _ t |  _$ |  j jM ƒ  t |  _ d" G| j  ƒ  | GHtG jH jI ƒ  | S(%   Niÿÿÿÿi   i   t   pbufferi   i   i   Rv   R   RQ   sD   Not doing separate text, because of text depth. But should be scaledt   redrawi    g      ð?g      è?g       @g      Ð?s   LINE SCALINGg      à?g      N@g       @R#   t   visiblet   planei   g        i   s   time for images   time for accumulated imaget   doTextt
   theScalingt   scalebartexts   time for text and overlayss   time for release(   g      è?g      è?(   g      è?g      è?(N   R¢   t
   fbo_offsett   widtht   heightR`   R   t   QGLFramebufferObjectFormatt   formatt   samplest
   setSamplest   setAttachmentt   QGLFramebufferObjectt   DepthR    t   QSizeR¿   t   BindOffScreenBufferFBOR—   t   RADIUSRJ   t   resizet   req_pbuffer_sizeR   R–   R}   R~   R   R€   R�   R‚   R   t   drawTextt   global_definitionsR   t   gett   fontScalingt
   drawImagest   rebuildAllDisplayObjectsR¤   R¹   R»   Rs   t   axes_magt   line_scalingt   axes_positiont   toImaget   copyR   t   QPixmapt   fillR”   RB   t   customClipPlanest   QPaintert   ranget
   pygl_coordt	   Cartesiant   viewsizeR#   t   lent   lengtht	   normalizet
   DotProductt   appendt   setCustomClipPlanest   quatt   getInvMatrixt   get_xt   get_yt   get_zt	   drawImageR   t   stdoutt   flusht   endt   applyTextPBuffert   Nonet   release(%   Rt   t   sizeRÅ   t
   scaleLinesR¢   t   t1t
   fbo_heightt	   fbo_widtht   old_wt   old_hR   t   radiust   ntiles_xt   ntiles_yt   req_sizeRv   RÖ   t   miscoRQ   RÃ   R¤   R¹   R»   RÄ   t   imaget   pixRâ   t   paintert   it   jt   diffCartt	   planesNewt   plt   thePlanet   pl_bt   a1t   newPlane(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   screenshot_pbuffer_new(  s   	7	$& 		
						
			
$					
B
			12		ZZ‘C
#
*<
'# 
d 						 					 c         C   s   |  j  | | | ƒ S(   N(   R  (   Rt   Rú   RÅ   Rû   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   screenshot_pbufferÊ  s    c         C   sÝ  t  } t j j d ƒ r! t } n  | r6 t j ƒ  } n  |  j ƒ  \ } } } |  j ƒ  } t |  d ƒ sÚ t	 t
 ƒ  |  d |  j ƒ  d t d t j d d ƒ ƒ|  _ | r´ t j ƒ  } n  | rÚ d G| | GHt j j ƒ  qÚ n  | |  j _ t |  j _ t |  d ƒ r¯|  j j ƒ  \ }	 }
 } |  j j ƒ  } | | k sX| |	 k sX| |
 k sX| | k r¯|  j j | | | | ƒ | r†t j ƒ  } n  | r¬d G| | GHt j j ƒ  q¬q¯n  xE d	 d
 d d d d d d d g	 D]" } t |  j | t |  | ƒ ƒ qÑW| rt j ƒ  } n  | r/d G| | GHt j j ƒ  n  | rJ| G|  j j ƒ  GHn  | j ƒ  |  j j ƒ  k s€| j ƒ  |  j j ƒ  k rÚ|  j j | j ƒ  | j ƒ  ƒ | r´t j ƒ  } n  | rÚd G| | GHt j j ƒ  qÚn  |  j j d  ƒ | rÿt j ƒ  } n  | r"d G| | GHt j j ƒ  n  |  j j t
 ƒ  j ƒ | rMt j ƒ  } n  | rpd G| | GHt j j ƒ  n  |  j ƒ  } |  j j  | d | d ƒ |  j j! |  j" ƒ  ƒ | rÂt j ƒ  } n  | råd G| | GHt j j ƒ  n  |  j j# ƒ  | rt j ƒ  } n  | r*d G| | GHt j j ƒ  n  t  |  j _$ t  |  j _% |  j& r}|  j j' |  j& d ƒ | rvt j ƒ  } n  | r™d G| | GHt j j ƒ  n  t( j) j* d ƒ | r¾t j ƒ  } n  | rád G| | GHt j j ƒ  n  |  j j+ d d ƒ | r	t j ƒ  } n  | r,d G| | GHt j j ƒ  n  |  j j, |  j- d ƒ | rWt j ƒ  } n  | r}d G| | GHt j j ƒ  q}n  t  |  j _$ t  |  j _% |  j j# ƒ  | r·t j ƒ  } n  | rÚd G| | GHt j j ƒ  n  |  j j. j/ ƒ  j0 d | j ƒ  d  d | j ƒ  d  | j ƒ  | j ƒ  ƒ } |  j | j ƒ  | j ƒ  ƒ |  j# ƒ  |  j1 | ƒ | rnt j ƒ  } n  | r‘d! G| | GHt j j ƒ  n  | r¦t j ƒ  } n  | rÉd" G| | GHt j j ƒ  n  t( j) j* d ƒ | S(#   Nt   CCP4MG_DEBUG_PBUFFERt   pbuffer_glWidgetRÊ   R–   t   pbuffer_sizei   s!   Time for pbuffer construct widgets   Time for pbuffer set bgRÒ   Rî   t   fog_enabledt   fog_strengtht   fog_neart   fog_fart   slab_enabledt
   slab_widtht   slab_offsets   Time for pbuffer setattrs   Time for pbuffer resizes!   Time for pbuffer set extra matrixs   Time for pbuffer set lightsi    i   s   Time for pbuffer set shaderss   Time for pbuffer draw 1s   Time for pbuffer set objectss!   Time for pbuffer SetRenderQualityRÀ   s)   Time for pbuffer rebuildAllDisplayObjectss   Time for pbuffer SetOrigins   Time for pbuffer draw 2i   s!   Time for pbuffer convert to images   Time for pbuffer all(2   R   t   ost   environR#   R   R¢   t   getBackgroundR¾   R`   Rq   R   RÊ   R    RÐ   R  R   Rô   Rõ   RÔ   t   drawTextSeparatelyR    t   setattrt   getattrRú   RÇ   RÈ   t   resizeGLt   setExtraMatrixRø   t	   setLightst   lightst	   getShadert	   setShadert   setShaderStatet   getShaderStateRs   RÕ   RÙ   t   got   SetGOR™   t   RenderQualityt   SetRenderQualityRÚ   t	   SetOriginR¤   R¿   RÞ   Rß   R÷   (   Rt   Rú   t   debugRü   Rœ   R�   Rž   RŸ   t   t2t   rpt   gpt   bpt   apt   itemt   shadersR  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   screenshot_pbuffer_oldÍ  sî    	 9   0   (     6               	               L
      g      ð?c   e      C   s¥  t  } t j j d ƒ r! t } n  | j ƒ  } | j ƒ  } | } d }	 |  j j ƒ  d k r%|  j j	 ƒ  d k r%|  j j
 ƒ  d k r%|  j j ƒ  d k r%|  j j ƒ  d k r%|  j j	 ƒ  d k r%|  j j
 ƒ  d k r%|  j j ƒ  d k r%|  j j ƒ  d |  j j ƒ  d |  j j ƒ  d }
 n5 |  j j ƒ  d |  j j ƒ  d |  j j ƒ  d }
 t j |  j ƒ } | j |  j ƒ t j d ƒ } t j t j | ƒ t j | d | d ƒ d } t j | d | d ƒ d } | | j ƒ  | } | } | GHd	 d  l } t j ƒ  } | j | ƒ g  } xW|  j D]L} | j  j! d k r.| j  j" ƒ  } xì| D]ä} | rp| GHn  | j# ƒ  } | j$ ƒ  } | j% ƒ  } | j& ƒ  |  j' } | j( ƒ  |  j' } | j) ƒ  } t  } | d
 d k rùt* | ƒ d k rùyä | d } t+ j, t- | d ƒ ƒ } | j. ƒ  rÑ| j/ ƒ  | j0 ƒ  j ƒ  }  | j0 ƒ  j ƒ  d | j1 ƒ  | j2 ƒ  j ƒ  | }! t3 j4 |  |! | j2 ƒ  j ƒ  | | j2 ƒ  j ƒ  | ƒ }" i | d 6|" d 6} | j5 | ƒ t } n  Wqùd G| Gd GHt6 j7 j8 ƒ  qùXn  t j9 t- | d ƒ ƒ }# |# j: t; |# j ƒ  | ƒ t; |# j ƒ  | ƒ t3 j< j= t3 j< j> ƒ }# | r\t* | ƒ d k r\|# j? ƒ  r\| d k r\| d k r\| d } t; | j/ ƒ  | j0 ƒ  j ƒ  ƒ }$ t; | j0 ƒ  j ƒ  d | j1 ƒ  ƒ |# j ƒ  }% i | d 6|$ d 6|% d 6t; |# j ƒ  ƒ d 6t; |# j ƒ  ƒ d 6} | j5 | ƒ q\q\W| rR| GHn  x%| D]} t@ | d ƒ rY| j d ƒ r¿| j d ƒ r¿t+ j, t- | d d ƒ ƒ } | jA | | d ƒ n  | j d ƒ rs| j d ƒ rs| j d ƒ rs| j d ƒ rs| j d ƒ rst j9 t- | d d ƒ ƒ }# |# j: | d | d t3 j< j= t3 j< j> ƒ }# | jB | d | d |# ƒ qsqYqYWq.q.Wd	 d  lC }& |& jD d ƒ }' |' jE d ƒ }( d  }) |( r&|' jE d ƒ }* |* r&|* d k r|  j j ƒ  |  j j ƒ  |  j j ƒ  f }) q#tG jH jI |* jJ d d ƒ ƒ }) q&n  g  }+ x]|  j D]R} | r6| j  j! d k r6| j  jK ƒ  } x"| D]} | jL ƒ  | jM ƒ  | j# ƒ  d }, }- }. |. }/ |- s | jN ƒ  |. t jO |  jP ƒ }. |. j/ ƒ  |. j1 ƒ  |. jQ ƒ  }$ }% }0 |+ j5 i | d 6|0 d 6| d 6|$ d 6|% d 6ƒ n  g  }1 |- sjt@ | d  ƒ r¡| jR r¡| jR jS r¡t@ | jR j  d! ƒ r¡| jR jT r¡| jR j  jU ƒ  }2 t jV | jR j  jW ƒ }1 q¡n  t@ | d" ƒ rò| jS ròt@ | j  d! ƒ rò| j  jU ƒ  }2 t jV | j  jW ƒ }1 n  xŒ |1 D]� }3 | jN ƒ  |3 |/ t jO |  jP ƒ }4 |4 j/ ƒ  |4 j1 ƒ  |4 jQ ƒ  }5 }6 }7 |+ j5 i | d 6|7 d 6| d 6|5 d 6|6 d 6ƒ qùWqjqjWq6q6WtX |+ d# tY jZ d ƒ d$ t ƒ}+ x¡ |  j D]– } | r·	| j  j! d k r·	| j  jK ƒ  } xf | D][ } | jL ƒ  | jM ƒ  | j# ƒ  d }, }- }. |- rë	|+ j5 i | d 6d d 6| d 6ƒ që	që	Wq·	q·	Wxæ|+ D]Þ}8 |8 d } |8 d } | jL ƒ  | jM ƒ  | j# ƒ  d }, }- }. |. }/ t j[ | j\ ƒ  | j] ƒ  ƒ }9 | j^ ƒ  d% k sä
| j^ ƒ  d& k rô
|9 j_ t ƒ n |9 j_ t  ƒ | j` ƒ  d' k r)|9 ja t j[ jb ƒ n  | jc ƒ  rE|9 jd t ƒ n |9 jd t  ƒ | je |, d( |  j' d) |9 ƒ}: d }; d }< |- rÍ|. j/ ƒ  |. j1 ƒ  }= }> |= | | t; |> | ƒ d }$ }% |: jf ƒ  }; nù | jN ƒ  |. t jO |  jP ƒ }. |8 d |8 d |8 d }$ }% }0 |' jE d* ƒ }? |? rt|  jg |  jh k rtd |0 |  jh |  jg |  jh }< ti |< d ƒ }< tj |< d+ ƒ }< n  |$ | d, |% | d, }= }> t; |= | | | d- ƒ | t; |> | ƒ d }$ }% |: jk ƒ  }@ t; d. |< ƒ }A |) rÃ| jl t jm jn |) d |) d |) d/ |< ƒ ƒ | jo t jp t jm jn |) d |) d |) d/ |< ƒ ƒ ƒ |- r‹| jq |$ |% |; |@ j ƒ  d0 |@ j ƒ  |@ j ƒ  ƒ qÃ| jq |$ |% |; |@ j ƒ  d1 |@ j ƒ  |@ j ƒ  ƒ n  |
 d, k  rñ| jl t jm d. d. d. |A ƒ ƒ n | jl t jm d d d |A ƒ ƒ | jr |: js ƒ  | |$ |% |; d) |9 ƒqX
Wt@ |  d2 ƒ rR|  jt rR|  ju rRtv | ƒ tv | ƒ }B d3 GH|
 d, k  r£t jw t jm d. d. d. ƒ ƒ }C n t jw t jm d d d ƒ ƒ }C |C jx d4 |  jy ƒ t j[ d5 d6 |  jt ƒ }9 | jl |C ƒ | jz |9 ƒ d7 Gt3 j{ d8 | d9 | ƒ GH| j| t3 j{ d8 | d9 | ƒ t3 j{ d9 | d9 | ƒ ƒ | j| t3 j{ d8 | d: | ƒ t3 j{ d8 | d; | ƒ ƒ | j| t3 j{ d9 | d: | ƒ t3 j{ d9 | d; | ƒ ƒ | rRd< |B |  j} d- |  j~ d= }D t3 j |D ƒ }E t j€ |9 ƒ }F |F j |E ƒ d, }G | j� t3 j{ d> | |G d? | ƒ |E ƒ qRn  t@ |  d2 ƒ r—|  jt r—|  j‚ r—t3 j{ | j ƒ  |  jƒ d d- d, | j ƒ  d |  jƒ d d- d, ƒ }H |
 d, k  rèt jw t jm d. d. d. ƒ ƒ }C n t jw t jm d d d ƒ ƒ }C |  j jN ƒ  t jO d d d ƒ }I |  j jN ƒ  t jO d d d ƒ }J |  j jN ƒ  t jO d d d ƒ }K t jO d d d ƒ }L |I }M |M j„ d ƒ |J }N |N j„ d ƒ |K }O |O j„ d ƒ t jO j… |M |L ƒ }P |P j† ƒ  t jO j… |N |L ƒ }Q |Q j† ƒ  t jO j… |O |L ƒ }R |R j† ƒ  |P d@ | j ƒ  }P |Q d@ | j ƒ  }Q |R d@ | j ƒ  }R |I dA | j ƒ  }I |J dA | j ƒ  }J |K dA | j ƒ  }K t3 j{ |P j/ ƒ  |P j1 ƒ  ƒ }S t3 j{ |Q j/ ƒ  |Q j1 ƒ  ƒ }T t3 j{ |R j/ ƒ  |R j1 ƒ  ƒ }U t3 j{ |I j/ ƒ  |I j1 ƒ  ƒ |H }V t3 j{ |J j/ ƒ  |J j1 ƒ  ƒ |H }W t3 j{ |K j/ ƒ  |K j1 ƒ  ƒ |H }X t3 j{ dB |I j/ ƒ  dC |I j1 ƒ  ƒ |H }Y t3 j{ dB |J j/ ƒ  dC |J j1 ƒ  ƒ |H }Z t3 j{ dB |K j/ ƒ  dC |K j1 ƒ  ƒ |H }[ t3 j{ dD |I j/ ƒ  dE |I j1 ƒ  ƒ |H }\ t3 j{ dD |J j/ ƒ  dE |J j1 ƒ  ƒ |H }] t3 j{ dD |K j/ ƒ  dE |K j1 ƒ  ƒ |H }^ |C jx d/ |  jt ƒ t j[ d5 d6 |  jt ƒ }9 | jl |C ƒ | jz |9 ƒ | j| |H |V ƒ | j| |H |W ƒ | j| |H |X ƒ |Y |S }_ |Y |S }` | j| |V |_ ƒ | j| |V |` ƒ |Z |T }a |Z |T }b | j| |W |a ƒ | j| |W |b ƒ |[ |U }c |[ |U }d | j| |X |c ƒ | j| |X |d ƒ | j� |\ d ƒ | j� |] d ƒ | j� |^ d ƒ n  | j‡ ƒ  d  S(F   Nt   CCP4MG_DEBUG_MEMORYi    g‰A`åÐ"Ó?gbX9´Èâ?gÉv¾Ÿ/½?i   i   i   iÿÿÿÿiýÿÿÿt   svgs   utf-8g      ð?t   filenamet   boundss   did not loads   as svgt   xt   yRÇ   RÈ   R#   R   RN   RO   R>   t   _t    t   primt   zR,  t   symmetry_dependentt   GetNumSymmetryMatricest   draw_symmetryt   keyt   reverset   oR	  t   boldRØ   t   defaultFontRP   g        g      à?g       @iÿ   i   gš™™™™™¹?gš™™™™™É?RÛ   s   Now draw scale on imageg      @t   Timesi   s   Scale positiongffffffæ?gffffffî?gìQ¸…ëí?gáz®Gáî?u   %.1f â„«g      N@gffffffê?gš™™™™™í?gü©ñÒMbp?g{®Gáz¤?gš™™™™™é?gš™™™™™é¿g333333ó?g333333ó¿(ˆ   R   R  R  R#   R   RÇ   RÈ   R•   R½   t   redt   greent   bluet	   fogcolourt   redFt   greenFt   blueFRå   t   QuatRî   t   postMultt
   extra_quatt   intat   openglt   glGetIntegervt   GL_VIEWPORTt   getxyzcRé   t   FontedPositionedStringsR   Rã   t   beginR,  t   objRÁ   t   GetImagePrimitivest   GetVerticest   GetImageWidtht   GetImageHeightt	   GetScaleWRØ   t	   GetScaleHt   GetFilenameRè   R   t   QSvgRenderert   unicodet   isValidRð   t   deviceRñ   t   defaultSizeR    t   QRectFRì   R   Rô   Rõ   t   QImaget   scaledRV   R‡   t   IgnoreAspectRatiot   SmoothTransformationt   isNullR`   t   renderRó   RÖ   R   R×   Rø   R™   Rš   t	   GetColourt   replacet   GetTextPrimitivest   GetTextt   IsBillBoardt	   getMatrixRæ   R¤   Rò   RD  RF  t   symmetry_labelsRE  t   MatrixVectort   symm_matt   sortedt   operatort
   itemgettert   QFontt   GetFontFamilyt   GetFontSizet   GetFontSlantt	   setItalict   GetFontWeightt	   setWeightt   Boldt   GetFontUnderlinet   setUnderlinet   FontedPositionedStringsFromTextt
   getDescentR  R  RA   RB   t   getBoundingRectt   setPenR”   t   fromRgbFt   setBrusht   QBrusht   drawRectt   drawFontedPositionedStringst
   getStringsRÛ   R»   RJ   t   QPent   setWidthRÜ   t   setFontt   QPointFt   drawLineRç   RÒ   t   QStringt   QFontMetricsRÕ   R¹   RÝ   t   set_zt   CrossProductRê   Rö   (e   Rt   R  RÃ   RÄ   RÅ   R1  RÇ   RÈ   t   theImageR	  t   bright_yRî   t   viewportt   tlt   blt   yscalet   scaleR\  R  t   imagesR,  t   primsRB  t   vertst
   imageWidtht   imageHeightt   scale_wt   scale_hR<  t   isSvgt   v0R;  t   x1t   y1R=  t   piccyR>  R?  RÖ   R  t   tlbt   bgcolRO   t   thePrimst   textt   isBillt   cartt   cartOrigRC  Rz  t   nsymt   matt   cartSymt   xSymt   ySymt   zSymt   _primt   fontt   st   descentt
   fog_factort   xfract   yfracRP   t   brectt	   fog_alphat   ratiot   pent   distt   dist_qt   fmt   x_shiftt   axes_post   xaxist   yaxist   zaxist   zrealt   xprojt   yprojt   zprojt   xprimet   yprimet   zprimet   xppost   yppost   zppost   xpost   ypost   zpost	   xposarrowt	   yposarrowt	   zposarrowt   xpostextt   ypostextt   zpostextt   xppt   xpmt   yppt   ypmt   zppt   zpm(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR÷     sÖ   	¨85 "
48D>
"0A K,,-$* '39*$&C!*0

*$#  5.788"*!!888 .!H!"""    
 
 
###******





c   /   
   C   s¡  t  j d k r$ |  j r$ t |  _ n  d d  l } | j d ƒ } | j d ƒ } t } |  j	 ƒ  |  j	 ƒ  t
 j ƒ  } | j ƒ  | r“t  j d k r“|  j r“d d  l } | j d ƒ } | j | d ƒ | j ƒ  } | j ƒ  }	 d }
 |  j j ƒ  d |  j j ƒ  d |  j j ƒ  d	 } t j |  j ƒ } | j |  j ƒ t j d
 ƒ } t
 j t
 j | ƒ t
 j | d | d ƒ d } t
 j | d | d ƒ d } | | j ƒ  } | } d d  l  } t! j" | d ƒ } t! j# ƒ  } | j$ | ƒ d d  l } | j d ƒ } | j d ƒ } d  } | r‘| j d ƒ } | r‘| d k rm|  j j ƒ  |  j j ƒ  |  j j ƒ  f } qŽt& j' j( | j) d d ƒ ƒ } q‘n  xŸ|  j* D]”} | j+ j, d k r›| j+ j- ƒ  } xj| D]_} | j. ƒ  | j/ ƒ  | j0 ƒ  d } } } | } t! j1 | j2 ƒ  | j3 ƒ  ƒ } | j4 ƒ  d k sA| j4 ƒ  d k rQ| j5 t ƒ n | j5 t ƒ | j6 ƒ  d k r†| j7 t! j1 j8 ƒ n  | j9 ƒ  r¢| j: t ƒ n | j: t ƒ | j; | d |  j< d | ƒ}  d }! | r$| j= ƒ  | j> ƒ  }" }# |" | |	 t? |# |	 ƒ d }$ }% |  j@ ƒ  }! n‹ | jA ƒ  | t jB |  jC ƒ } | j= ƒ  | j> ƒ  }$ }% |$ | d |% | d }" }# t? |" |	 | |	 d ƒ |	 t? |# |	 ƒ d }$ }% |  jD ƒ  }& | rJ| jE t! jF jG | d | d | d ƒ ƒ | jH t! jI t! jF jG | d | d | d ƒ ƒ ƒ | jJ |$ |% |! |& jK ƒ  |& jL ƒ  ƒ n  | d k  ru| jE t! jF d d d ƒ ƒ n | jE t! jF d d d ƒ ƒ | jM |  jN ƒ  | |$ |% |! d | ƒg  }' | sÉtO | d ƒ r8| jP r8| jP jQ r8tO | jP j+ d ƒ r8| jP jR r8| jP j+ jS ƒ  }( t jT | jP j+ jU ƒ }' q8n  tO | d ƒ r‰| jQ r‰tO | j+ d ƒ r‰| j+ jS ƒ  }( t jT | j+ jU ƒ }' n  xœ|' D]‘}) | jA ƒ  |) | t jB |  jC ƒ }* |* j= ƒ  |* j> ƒ  }+ }, |+ | d |, | d }- }. t? |- |	 | |	 d ƒ |	 t? |. |	 ƒ d }+ }, | r´| jE t! jF jG | d | d | d ƒ ƒ | jH t! jI t! jF jG | d | d | d ƒ ƒ ƒ | jJ |+ |, |! |& jK ƒ  |& jL ƒ  ƒ n  | d k  rß| jE t! jF d d d ƒ ƒ n | jE t! jF d d d ƒ ƒ | jM |  jN ƒ  | |+ |, |! d | ƒq�WqÉqÉWq›q›W| jV ƒ  | j d ƒ } | jW ƒ  jX | d ƒ tY jY | d ƒ } t |  _ tZ j[ | d ƒ n  |  j	 ƒ  | S(   Nt   win32iÿÿÿÿR   RP   s   .pngi    g‰A`åÐ"Ó?gbX9´Èâ?gÉv¾Ÿ/½?i   i   i   RN   RO   R>   R@  RA  RI  R	  RJ  RØ   RK  g      à?g       @i   iÿ   RD  RE  RF  (\   R   R   R!  R   RÕ   RÖ   R   R×   R   Rs   RX  t   get_pixdatat   invertt   tempfilet   mkstempt   writepngt	   get_widtht
   get_heightR•   RQ  RR  RS  Rå   RT  Rî   RU  RV  RW  RY  RZ  R[  Ré   R\  R   Rà   Rã   R]  Rø   R™   Rš   Rr  Rs  R,  R^  RÁ   Rt  Ru  Rv  R`  R~  R  R€  R�  R‚  Rƒ  R„  R…  R†  R‡  Rˆ  RØ   Rð   Rñ   RV   R‰  Rw  Ræ   R¤   RŠ  R‹  R”   RŒ  R�  RŽ  R�  RÇ   RÈ   R�  R‘  R`   RD  RF  Rx  RE  Ry  Rz  Rö   RÞ   t   savet
   image_infoR  t   close(/   Rt   RÖ   R  RP   RÃ   t   iinfoRê  t   fRÇ   RÈ   R	  Rœ  Rî   R�  Rž  RŸ  R   R¡  R\  t   pixmapR  R®  R¯  RO   R,  R£  RB  R±  R²  R³  R´  R¼  R½  R¾  RÀ  RÁ  R>  R?  RÂ  Rz  Rµ  R¶  R·  R¸  R¹  t   xfracSymt   yfracSym(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt
   screenshot&  sÐ    


5-$*$# 5+4*&9*$5+4*8
	
c         C   s‹  d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j	 <d |  j  t j j
 <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j <d |  j  t j j  <d |  j  t j j! <d |  j  t j j" <d |  j  t j j# <d |  j  t j j$ <d |  j  t j j% <d |  j  t j j& <d |  j  t j j' <d |  j  t j j( <d |  j  t j j) <d |  j  t j j* <d |  j  t j j+ <d |  j  t j j, <d |  j  t j j- <d |  j  t j j. <d |  j  t j j/ <d |  j  t j j0 <d |  j  t j j1 <d |  j  t j j2 <d |  j  t j j3 <d |  j  t j j4 <d |  j  t j j5 <d |  j  t j j6 <d |  j  t j j7 <d |  j  t j j8 <d |  j  t j j9 <d |  j  t j j: <d |  j  t j j; <d |  j  t j j< <d |  j  t j j= <d |  j  t j j> <d |  j  t j j? <d |  j  t j j@ <d |  j  t j jA <d |  j  t j jB <d |  j  t j jC <d |  j  t j jD <d |  j  t j jE <d |  j  t j jF <d |  j  t j jG <d |  j  t j jH <d |  j  t j jI <d |  j  t j jJ <d |  j  t j jK <d |  j  t j jL <d |  j  t j jM <d |  j  t j jN <d |  j  t j jO <d |  j  t j jP <d |  j  t j jQ <d |  j  t j jR <d |  j  t j jS <d |  j  t j jT <d |  j  t j jU <d |  j  t j jV <d |  j  t j jW <d |  j  t j jX <d |  j  t j jY <d |  j  t j jZ <d |  j  t j j[ <d |  j  t j j\ <d |  j  t j j] <d |  j  t j j^ <d |  j  t j j_ <d |  j  t j j` <d |  j  t j ja <d |  j  t j jb <d |  j  t j jc <d |  j  t j jd <d |  j  t j je <d |  j  t j jf <d |  j  t j jg <d |  j  t j jh <d |  j  t j ji <d |  j  t j jj <d |  j  t j jk <d |  j  t j jl <d |  j  t j jm <d |  j  t j jn <d |  j  t j jo <d |  j  t j jp <d |  j  t j jq <d |  j  t j jr <d |  j  t j js <d |  j  t j jt <d |  j  t j ju <d |  j  t j jv <d |  j  t j jw <d |  j  t j jx <d |  j  t j jy <d |  j  t j jz <d |  j  t j j{ <d |  j  t j j| <d |  j  t j j} <d |  j  t j j~ <d |  j  t j j <d |  j  t j j€ <d |  j  t j j� <d |  j  t j j‚ <d |  j  t j jƒ <d |  j  t j j„ <d |  j  t j j… <d |  j  t j j† <d |  j  t j j‡ <d |  j  t j jˆ <d |  j  t j j‰ <d |  j  t j jŠ <d |  j  t j j‹ <d |  j  t j jŒ <d |  j  t j j� <d |  j  t j jŽ <d |  j  t j j� <d |  j  t j j� <d |  j  t j j‘ <d |  j  t j j’ <d |  j  t j j“ <d |  j  t j j” <d |  j  t j j• <d |  j  t j j– <d |  j  t j j— <d |  j  t j j˜ <d |  j  t j j™ <d |  j  t j jš <d |  j  t j j› <d |  j  t j jœ <d |  j  t j j� <d |  j  t j jž <d |  j  t j jŸ <d |  j  t j j  <d |  j  t j j¡ <d |  j  t j j¢ <d |  j  t j j£ <d |  j  t j j¤ <d |  j  t j j¥ <d |  j  t j j¦ <d |  j  t j j§ <d |  j  t j j¨ <d |  j  t j j© <d |  j  t j jª <d |  j  t j j« <d |  j  t j j¬ <d |  j  t j j­ <d |  j  t j j® <d |  j  t j j¯ <d |  j  t j j° <d |  j  t j j± <d |  j  t j j² <d |  j  t j j³ <d |  j  t j j´ <d |  j  t j jµ <d |  j  t j j¶ <d |  j  t j j· <d |  j  t j j¸ <d |  j  t j j¹ <d |  j  t j jº <d |  j  t j j» <d |  j  t j j¼ <d |  j  t j j½ <d |  j  t j j¾ <d |  j  t j j¿ <d |  j  t j jÀ <d |  j  t j jÁ <d |  j  t j jÂ <d |  j  t j jÃ <d |  j  t j jÄ <d |  j  t j jÅ <d |  j  t j jÆ <d |  j  t j jÇ <d |  j  t j jÈ <d |  j  t j jÉ <d |  j  t j jÊ <d |  j  t j jË <d |  j  t j jÌ <d |  j  t j jÍ <d |  j  t j jÎ <d |  j  t j jÏ <d |  j  t j jÐ <d |  j  t j jÑ <d |  j  t j jÒ <d |  j  t j jÓ <d |  j  t j jÔ <d |  j  t j jÕ <d |  j  t j jÖ <d |  j  t j j× <d |  j  t j jØ <d |  j  t j jÙ <d |  j  t j jÚ <d |  j  t j jÛ <d |  j  t j jÜ <d |  j  t j jÝ <d |  j  t j jÞ <d |  j  t j jß <d |  j  t j jà <d |  j  t j já <d |  j  t j jâ <d |  j  t j jã <d |  j  t j jä <d |  j  t j jå <d |  j  t j jæ <d |  j  t j jç <d |  j  t j jè <d |  j  t j jé <d |  j  t j jê <d |  j  t j jë <d |  j  t j jì <d |  j  t j jí <d |  j  t j jî <d |  j  t j jï <d |  j  t j jð <d |  j  t j jñ <d |  j  t j jò <d |  j  t j jó <d |  j  t j jô <d |  j  t j jõ <d |  j  t j jö <d |  j  t j j÷ <d |  j  t j jø <d |  j  t j jù <d |  j  t j jú <d |  j  t j jû <d |  j  t j jü <d |  j  t j jý <d |  j  t j jþ <d |  j  t j jÿ <d |  j  t j j <d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j	<d |  j  t j j
<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j<d |  j  t j j <d |  j  t j j!<d |  j  t j j"<d |  j  t j j#<d |  j  t j j$<d |  j  t j j%<d |  j  t j j&<d |  j  t j j'<d |  j  t j j(<d |  j  t j j)<d |  j  t j j*<d |  j  t j j+<d |  j  t j j,<d |  j  t j j-<d |  j  t j j.<d |  j  t j j/<d |  j  t j j0<d |  j  t j j1<d |  j  t j j2<d |  j  t j j3<d |  j  t j j4<d |  j  t j j5<d |  j  t j j6<d |  j  t j j7<d |  j  t j j8<d |  j  t j j9<d |  j  t j j:<d |  j  t j j;<d |  j  t j j<<d |  j  t j j=<d |  j  t j j><d |  j  t j j?<d  S(   Ni    (@  t	   keys_downR    R‡   t
   Key_Escapet   Key_Tabt   Key_Backtabt   Key_Backspacet
   Key_Returnt	   Key_Entert
   Key_Insertt
   Key_Deletet	   Key_Pauset	   Key_Printt
   Key_SysReqt	   Key_Cleart   Key_Homet   Key_Endt   Key_Leftt   Key_Upt	   Key_Rightt   Key_Downt
   Key_PageUpt   Key_PageDownt	   Key_Shiftt   Key_Controlt   Key_Metat   Key_Altt	   Key_AltGrt   Key_CapsLockt   Key_NumLockt   Key_ScrollLockt   Key_F1t   Key_F2t   Key_F3t   Key_F4t   Key_F5t   Key_F6t   Key_F7t   Key_F8t   Key_F9t   Key_F10t   Key_F11t   Key_F12t   Key_F13t   Key_F14t   Key_F15t   Key_F16t   Key_F17t   Key_F18t   Key_F19t   Key_F20t   Key_F21t   Key_F22t   Key_F23t   Key_F24t   Key_F25t   Key_F26t   Key_F27t   Key_F28t   Key_F29t   Key_F30t   Key_F31t   Key_F32t   Key_F33t   Key_F34t   Key_F35t   Key_Super_Lt   Key_Super_Rt   Key_Menut   Key_Hyper_Lt   Key_Hyper_Rt   Key_Helpt   Key_Direction_Lt   Key_Direction_Rt	   Key_Spacet   Key_Anyt
   Key_Exclamt   Key_QuoteDblt   Key_NumberSignt
   Key_Dollart   Key_Percentt   Key_Ampersandt   Key_Apostrophet   Key_ParenLeftt   Key_ParenRightt   Key_Asteriskt   Key_Plust	   Key_Commat	   Key_Minust
   Key_Periodt	   Key_Slasht   Key_0t   Key_1t   Key_2t   Key_3t   Key_4t   Key_5t   Key_6t   Key_7t   Key_8t   Key_9t	   Key_Colont   Key_Semicolont   Key_Lesst	   Key_Equalt   Key_Greatert   Key_Questiont   Key_Att   Key_At   Key_Bt   Key_Ct   Key_Dt   Key_Et   Key_Ft   Key_Gt   Key_Ht   Key_It   Key_Jt   Key_Kt   Key_Lt   Key_Mt   Key_Nt   Key_Ot   Key_Pt   Key_Qt   Key_Rt   Key_St   Key_Tt   Key_Ut   Key_Vt   Key_Wt   Key_Xt   Key_Yt   Key_Zt   Key_BracketLeftt   Key_Backslasht   Key_BracketRightt   Key_AsciiCircumt   Key_Underscoret   Key_QuoteLeftt   Key_BraceLeftt   Key_Bart   Key_BraceRightt   Key_AsciiTildet   Key_nobreakspacet   Key_exclamdownt   Key_centt   Key_sterlingt   Key_currencyt   Key_yent   Key_brokenbart   Key_sectiont   Key_diaeresist   Key_copyrightt   Key_ordfemininet   Key_guillemotleftt   Key_notsignt
   Key_hyphent   Key_registeredt
   Key_macront
   Key_degreet   Key_plusminust   Key_twosuperiort   Key_threesuperiort	   Key_acutet   Key_mut   Key_paragrapht   Key_periodcenteredt   Key_cedillat   Key_onesuperiort   Key_masculinet   Key_guillemotrightt   Key_onequartert   Key_onehalft   Key_threequarterst   Key_questiondownt
   Key_Agravet
   Key_Aacutet   Key_Acircumflext
   Key_Atildet   Key_Adiaeresist	   Key_Aringt   Key_AEt   Key_Ccedillat
   Key_Egravet
   Key_Eacutet   Key_Ecircumflext   Key_Ediaeresist
   Key_Igravet
   Key_Iacutet   Key_Icircumflext   Key_Idiaeresist   Key_ETHt
   Key_Ntildet
   Key_Ogravet
   Key_Oacutet   Key_Ocircumflext
   Key_Otildet   Key_Odiaeresist   Key_multiplyt   Key_Oobliquet
   Key_Ugravet
   Key_Uacutet   Key_Ucircumflext   Key_Udiaeresist
   Key_Yacutet	   Key_THORNt
   Key_ssharpt   Key_divisiont   Key_ydiaeresist   Key_Multi_keyt   Key_Codeinputt   Key_SingleCandidatet   Key_MultipleCandidatet   Key_PreviousCandidatet   Key_Mode_switcht	   Key_Kanjit   Key_Muhenkant
   Key_Henkant
   Key_Romajit   Key_Hiraganat   Key_Katakanat   Key_Hiragana_Katakanat   Key_Zenkakut   Key_Hankakut   Key_Zenkaku_Hankakut   Key_Tourokut
   Key_Massyot   Key_Kana_Lockt   Key_Kana_Shiftt   Key_Eisu_Shiftt   Key_Eisu_togglet
   Key_Hangult   Key_Hangul_Startt   Key_Hangul_Endt   Key_Hangul_Hanjat   Key_Hangul_Jamot   Key_Hangul_Romajat   Key_Hangul_Jeonjat   Key_Hangul_Banjat   Key_Hangul_PreHanjat   Key_Hangul_PostHanjat   Key_Hangul_Specialt   Key_Dead_Gravet   Key_Dead_Acutet   Key_Dead_Circumflext   Key_Dead_Tildet   Key_Dead_Macront   Key_Dead_Brevet   Key_Dead_Abovedott   Key_Dead_Diaeresist   Key_Dead_Aboveringt   Key_Dead_Doubleacutet   Key_Dead_Caront   Key_Dead_Cedillat   Key_Dead_Ogonekt   Key_Dead_Iotat   Key_Dead_Voiced_Soundt   Key_Dead_Semivoiced_Soundt   Key_Dead_Belowdott   Key_Dead_Hookt   Key_Dead_Hornt   Key_Backt   Key_Forwardt   Key_Stopt   Key_Refresht   Key_VolumeDownt   Key_VolumeMutet   Key_VolumeUpt   Key_BassBoostt
   Key_BassUpt   Key_BassDownt   Key_TrebleUpt   Key_TrebleDownt   Key_MediaPlayt   Key_MediaStopt   Key_MediaPrevioust   Key_MediaNextt   Key_MediaRecordt   Key_HomePaget   Key_Favoritest
   Key_Searcht   Key_Standbyt   Key_OpenUrlt   Key_LaunchMailt   Key_LaunchMediat   Key_Launch0t   Key_Launch1t   Key_Launch2t   Key_Launch3t   Key_Launch4t   Key_Launch5t   Key_Launch6t   Key_Launch7t   Key_Launch8t   Key_Launch9t   Key_LaunchAt   Key_LaunchBt   Key_LaunchCt   Key_LaunchDt   Key_LaunchEt   Key_LaunchFt   Key_MediaLastt   Key_unknownt   Key_Callt   Key_Context1t   Key_Context2t   Key_Context3t   Key_Context4t   Key_Flipt
   Key_Hangupt   Key_Not
   Key_Selectt   Key_Yest   Key_Executet   Key_Printert   Key_Playt	   Key_Sleept   Key_Zoomt
   Key_Cancel(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   SetupKeyboard­  sz   c         C   s   d  S(   N(    (   Rt   R(   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   SetGOParamsì  s    c         C   sE   |  j  ƒ  |  j r  |  j ƒ  n  x |  j D] } | j j ƒ  q* Wd  S(   N(   Ru   R–   R—   R,  R^  t   reInitializeTextPrims(   Rt   R,  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR8  ï  s
    
	i    c         C   s7   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | | ƒ d  S(   N(   Ru   R–   R—   R	   t   rebuildDisplayObject(   Rt   R,  RÀ   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR9  ÷  s    
	c         C   s7   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | | ƒ d  S(   N(   Ru   R–   R—   R	   t   removeDisplayObject(   Rt   t   go_inRÀ   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR:  ý  s    
	c         C   s7   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | | ƒ d  S(   N(   Ru   R–   R—   R	   t   addDisplayObject(   Rt   R,  RÀ   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR<    s    
	c         C   s¢  | r" t  j j |  | | | ƒ n t  j j |  | | ƒ t j |  | | | ƒ |  j d ƒ | |  _ |  j r˜ t  j | |  j ƒ  |  ƒ |  _ |  j	 ƒ  n  d |  _
 |  j t j j ƒ |  j ƒ  t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _ |  j |  j t j d ƒ |  j ƒ t j |  ƒ |  _  |  j |  j  t j d ƒ |  j! ƒ t" j# |  j$ d ƒ ƒ |  _% |  j |  j% t j d ƒ |  j& ƒ |  j |  j% t j d ƒ |  j' ƒ t( |  _) |  j* |  _+ |  j, |  _- |  j. |  _/ d  |  _1 d d  l2 } | j2 ƒ  |  _3 |  j |  j3 t j d ƒ |  j4 ƒ t j5 j0 |  _6 |  j7 ƒ  |  j8 ƒ  t j9 d	 k rŒt j: d
 k rŒt; j< d k rŒ|  j= t j j> ƒ |  j= t j j? ƒ |  j= t j j@ ƒ n  t( |  _A d |  _B d  S(   Ni   iè  s	   timeout()t   Contexts   aboutToShow()s   aboutToHide()iÿÿÿÿs
   finished()i  i  i 
 t   0(C   R   Rr   t   __init__R	   t   setAcceptDropsR–   t   QGLPixelBufferRÊ   R¿   R—   t   stereo_shear_separationt   setFocusPolicyR    R‡   t   StrongFocusR6  R³   t
   qkey_timerR´   R¦   t   lrudqaopnmkey_handlert
   akey_timert
   okey_timert
   pkey_timert
   nkey_timert
   mkey_timert   leftkey_timert   rightkey_timert   upkey_timert   downkey_timert   pluskey_timert   pluskey_handlert   minuskey_timert   minuskey_handlerR   t   QMenuRa   t   context_menut   aboutToShowHandlert   aboutToHideHandlerR   t   showing_context_menut   defaultContextMenuHandlert   contextMenuHandlert   defaultDoubleClickHandlert   doubleClickHandlert   defaultLeftClickHandlert   leftClickHandlerRø   t   contextMenuPickEventt   UtilityThreadt   mtt   UtilityThreadFinishedR{   t   lastEventTypet   setDefaultMouseBindingst   setup_colour_pointersRw   Rx   Ry   Rz   t   grabGestureRŠ   Rˆ   R‰   t   show_fpst   current_fps_text(   Rt   t   parentt   shareRÊ   R–   R  R`  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR?  	  sp    			
""""""""""""""		"

-	c         C   s   d  S(   N(    (   Rt   t	   pickevent(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR]  d  s    c         C   s   d  S(   N(    (   Rt   Rk  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR[  g  s    c         C   s   d  S(   N(    (   Rt   Rk  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRY  j  s    c         C   sa   t  |  j ƒ d } |  j | } |  j | |  j | ƒ |  j ƒ  t ƒ  j ƒ  } | j d ƒ d  S(   Ni   t    (   Rè   R,  t	   buildlistt   listidsRs   R.   t	   statusBart   showMessage(   Rt   t   idR,  Ro  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRb  m  s    
c         C   s   t  j d d ƒ S(   Ni–   (   R    RÐ   (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   minimumSizeHintu  s    c         C   s   t  j d d ƒ S(   Ni   (   R    RÐ   (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   sizeHintx  s    c         C   s4   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | ƒ d  S(   N(   Ru   R–   R—   R	   R&  (   Rt   R'  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR&  {  s    
	c         C   s0   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | ƒ S(   N(   Ru   R–   R—   R	   t   getOpenGLLightParameters(   Rt   t   lightID(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRt  �  s    
	c         C   s-   |  j  ƒ  |  j r  |  j ƒ  n  t j |  ƒ S(   N(   Ru   R–   R—   R	   t	   getLights(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRv  ‡  s    
	c         C   sd  |  j  r |  j ƒ  n  |  j |  j ƒ t j |  ƒ t j j ƒ  r`d } d } t	 j
 d d ƒ |  _ t j j d ƒ s� t	 j
 | | ƒ |  _ n  t j ƒ  } | j t j j ƒ t j t j d d ƒ ƒ |  _ t j t j d d ƒ ƒ |  _ t j t j d d ƒ ƒ |  _ t j t j d d ƒ | ƒ |  _ t j j d ƒ r`t j t j d d ƒ | ƒ |  _ q`n  d  S(   Ni   i   t   CCP4MG_DEBUG_SHADOWS(   R–   R—   R˜   R•   R	   t   initializeGLR   RÎ   t   hasOpenGLFramebufferObjectsRX  t   MGDepthFramebufferObjectt   offScreenBufferDepthR  R  R#   t   offScreenBufferShadowRÉ   RÍ   t   CombinedDepthStencilR    RÐ   t   offScreenBufferSSAOt   offScreenBufferEdget   offScreenBufferBlurt   offScreenBufferNormal(   Rt   t   reqWt   reqHR   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRx  �  s$    	!c         C   s¨   | s | r d  S| |  j  k r4 | |  j k r4 d  SyG d d  l } | j | | ƒ |  _ | |  _  | |  _ |  j j t ƒ Wn& t j j	 d  d d t j j ƒ n Xd  S(   Niÿÿÿÿs   No shader supports4   This version of ccp4mg does not have shader support.(   t   vertexShadert   fragmentShadert	   glShaderst
   MGGLShaderR~   t   setShadowStateR   R   t   QMessageBoxt   criticalRø   t   Ok(   Rt   R„  R…  R†  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR)  «  s    		c         C   s'   |  j  r |  j ƒ  n  t j |  ƒ d  S(   N(   R–   R—   R	   t   setup_clipping(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRŒ  º  s    	c         C   s'   |  j  r |  j ƒ  n  t j |  ƒ d  S(   N(   R–   R—   R	   t	   setup_fog(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR�  ¿  s    	c         C   s7   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | | ƒ d  S(   N(   Ru   R–   R—   R	   t   setupModelview(   Rt   t   furtherQuatt   furtherMatrix(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRŽ  Ä  s    
	c   2   	   C   s&'  |  j  rÝ t |  d ƒ rÝ |  j rÝ |  j j d ƒ } |  j j | t ƒ |  j j d ƒ } |  j j | t ƒ |  j j d ƒ } |  j j | t ƒ |  j j d ƒ } |  j j | t ƒ |  j j d ƒ } |  j j | t ƒ n  |  j r|  j	 r|  j
 r|  j s|  j  rä|  j  r1t |  d ƒ r1|  j r1|  j j t ƒ |  j j t ƒ |  j j d ƒ } |  j j | d ƒ |  j j d ƒ } |  j j | d ƒ |  j j d ƒ } |  j j | d ƒ |  j j d ƒ } |  j j | d	 ƒ |  j j d ƒ } |  j j | d	 ƒ |  j j d ƒ } |  j j | d	 ƒ n  |  j rÖt j t j ƒ t j t j d
 ƒ t j t j ƒ t j t j d
 ƒ t j t j ƒ t j t j d
 ƒ t j t j ƒ t j t j ƒ t j t j ƒ n  |  j ƒ  d S|  j  }	 |  j }
 t |  _ t |  d ƒ r|  j j ƒ  n  |  j ƒ  |  j r|	 rt |  d ƒ r|  j rt |  _  |  j j ƒ  t |  d ƒ r„|  j j  ƒ  n  |  j j! ƒ  } |  j j" ƒ  } |  j! ƒ  |  j" ƒ  } } | d
 k rÐd } n  | d
 k råd } n  d | | } t# |  _$ |  j% | | | ƒ |  j ƒ  t |  _$ t |  d ƒ rA|  j j& ƒ  n  |  j j ƒ  |  j j' ƒ  } |  j( j ƒ  |  j( j! ƒ  } |  j( j" ƒ  } |  j! ƒ  |  j" ƒ  } } | d
 k r¶d } n  | d
 k rËd } n  d | | } t# |  _$ |  j% | | | ƒ |  j ƒ  t |  _$ |  j( j ƒ  |  j( j' ƒ  } |  j) j ƒ  |  j) j! ƒ  } |  j) j" ƒ  } |  j! ƒ  |  j" ƒ  } } | d
 k r}d } n  | d
 k r’d } n  d | | } |  j% | | | ƒ |  j* j d ƒ } |  j* j d ƒ } |  j* j d ƒ } |  j* j d ƒ } |  j* j | | ƒ |  j* j | | ƒ |  j* j | d ƒ |  j* j | d ƒ |  j* j  ƒ  t j t j ƒ t j+ t j ƒ t j t j | ƒ t j t j ƒ t j+ t j ƒ t j t j | ƒ t j t j ƒ t j+ t j ƒ t j t j d
 ƒ t j t j ƒ t j, t j- ƒ t j. |  j/ d
 |  j/ d |  j/ d ƒ t0 j1 |  j2 ƒ } | j3 ƒ  j4 ƒ  } t j5 | ƒ t j6 | ƒ t j7 d
 d
 d ƒ t j8 t j9 t j: Bƒ t j+ t j ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | | d | d ƒ t jD d d ƒ t jE d | | d | d ƒ t jD d d
 ƒ t jE d | | d | d ƒ t jD d
 d
 ƒ t jE d | | d | d ƒ t jF ƒ  |  j* j& ƒ  |  j) j ƒ  |  j) j' ƒ  } |  jG j ƒ  |  jH j  ƒ  t j8 t j9 t j: Bƒ t j t j d
 ƒ t j+ t j ƒ t j t j | ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | | d | d ƒ t jD d d ƒ t jE d | | d | d ƒ t jD d d
 ƒ t jE d | | d | d ƒ t jD d
 d
 ƒ t jE d | | d | d ƒ t jF ƒ  |  jH j& ƒ  |  jG j ƒ  |  jG j' ƒ  } |  j) j ƒ  |  jI j  ƒ  t j8 t j9 t j: Bƒ t j t j d
 ƒ t j+ t j ƒ t j t j | ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | | d | d ƒ t jD d d ƒ t jE d | | d | d ƒ t jD d d
 ƒ t jE d | | d | d ƒ t jD d
 d
 ƒ t jE d | | d | d ƒ t jF ƒ  |  jI j& ƒ  |  j) j ƒ  |  j% | | | ƒ |	 |  _  |	 rÝt |  d ƒ rÝ|  j rÝ|  j j  ƒ  |  j j | t# ƒ n  |  j! ƒ  |  j" ƒ  } } | d
 k rd } n  | d
 k r d } n  d | | } |  j j d ƒ } |  j j d ƒ } |  j j d ƒ } |  j j | d	 ƒ |  j j | t> |  j! ƒ  ƒ ƒ |  j j | t> |  j" ƒ  ƒ ƒ t j t j ƒ t j+ t j ƒ t j t j |  j) j' ƒ  ƒ |	 rDt |  d ƒ rD|  j rD|  j j  ƒ  |  j j d ƒ } |  j j | t# ƒ n  |  j j d ƒ } |  j j d ƒ } |  j j d ƒ } |  j j | d	 ƒ |  j j | t> |  j! ƒ  ƒ ƒ |  j j | t> |  j" ƒ  ƒ ƒ t j t j ƒ t j+ t j ƒ t j t j |  j) j' ƒ  ƒ |	 rZt |  d ƒ rZ|  j rZ|  j j  ƒ  |  j j d ƒ } |  j j | t# ƒ n  |  j j d ƒ } |  j j d ƒ } |  j j d ƒ } |  j j | d	 ƒ |  j j | t> |  j! ƒ  ƒ ƒ |  j j | t> |  j" ƒ  ƒ ƒ |	 rt |  d ƒ r|  j r|  j j  ƒ  qn  |  j
 r)|	 r)t |  d ƒ r)|  jJ r)t |  _  |  j( j ƒ  |  j( j! ƒ  } |  j( j" ƒ  } |  j! ƒ  |  j" ƒ  } } | d
 k r›d } n  | d
 k r°d } n  d | | } t# |  _$ |  j% | | | ƒ |  j ƒ  t |  _$ |  j( j ƒ  |  jK j ƒ  |  jK j! ƒ  } |  jK j" ƒ  } |  j! ƒ  |  j" ƒ  } } | d
 k rSd } n  | d
 k rhd } n  d | | } |  j% | | | ƒ |  jJ j d ƒ } |  jJ j d ƒ } |  jJ j d ƒ } |  jJ j d ƒ } |  jJ j | | ƒ |  jJ j | | ƒ |  jJ j | d ƒ |  jJ j | d ƒ |  jJ j d ƒ } |  jJ j d ƒ } |  jJ j d ƒ }  |  jJ j d  ƒ }! |  jJ j d! ƒ }" |  jJ j | |  jL |  j? d ƒ |  jJ j | |  jM |  j? d ƒ |  jJ j |  |  jN ƒ |  jJ j |! |  jO ƒ |  jJ j |" |  jP ƒ |  jJ j  ƒ  t j t j ƒ t j+ t j ƒ |  j( j' ƒ  } t j t j | ƒ t j t j ƒ t j+ t j ƒ t |  d ƒ sÀ|  j ƒ  tQ jR tS jT jU tS jV d" d# d$ ƒ ƒ }# |  jW |# ƒ |  _X n  t j t j |  jX ƒ t jY t j t jZ t j[ ƒ t jY t j t j\ t j[ ƒ t j t j ƒ t j+ t j ƒ t j t j d
 ƒ t j t j ƒ t j, t j- ƒ t j. |  j/ d
 |  j/ d |  j/ d ƒ t0 j1 |  j2 ƒ } t0 j1 |  j] ƒ }$ | j^ |$ ƒ | j3 ƒ  j4 ƒ  } t j5 | ƒ t j6 | ƒ t j7 d
 d
 d ƒ |  j( j' ƒ  } t j8 t j9 t j: Bƒ t j+ t j ƒ t j t j | ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | | d | d ƒ t jD d d ƒ t jE d | | d | d ƒ t jD d d
 ƒ t jE d | | d | d ƒ t jD d
 d
 ƒ t jE d | | d | d ƒ t jF ƒ  |  jJ j& ƒ  |  jK j ƒ  |  jK j' ƒ  } |  jG j ƒ  |  jH j  ƒ  t j8 t j9 t j: Bƒ t j t j d
 ƒ t j+ t j ƒ t j t j | ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | | d | d ƒ t jD d d ƒ t jE d | | d | d ƒ t jD d d
 ƒ t jE d | | d | d ƒ t jD d
 d
 ƒ t jE d | | d | d ƒ t jF ƒ  |  jH j& ƒ  |  jG j ƒ  |  jG j' ƒ  } |  jK j ƒ  |  jI j  ƒ  t j8 t j9 t j: Bƒ t j t j d
 ƒ t j+ t j ƒ t j t j | ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | | d | d ƒ t jD d d ƒ t jE d | | d | d ƒ t jD d d
 ƒ t jE d | | d | d ƒ t jD d
 d
 ƒ t jE d | | d | d ƒ t jF ƒ  |  jI j& ƒ  |  jK j ƒ  |  jK j' ƒ  } |	 rxt |  d ƒ rx|  j rx|  j j  ƒ  |  j j | t# ƒ |  j j | t# ƒ n  |  j! ƒ  |  j" ƒ  } } | d
 k r¦d } n  | d
 k r»d } n  d | | } |  j j d ƒ } |  j j d ƒ } |  j j d ƒ } |  j j | d ƒ |  j j | t> |  j! ƒ  ƒ ƒ |  j j | t> |  j" ƒ  ƒ ƒ |  j j d ƒ } |  j j d ƒ } |  j j d ƒ } |  j j | d ƒ |  j j | t> |  j! ƒ  ƒ ƒ |  j j | t> |  j" ƒ  ƒ ƒ t j t j ƒ t j+ t j ƒ t j t j | ƒ |  j% | | | ƒ |	 |  _  n  t# r8!|  j sA|  j	 r8!|  j	 rZ|  j_ j ƒ  n |  j rs|  j` j ƒ  n  |  j  }	 t |  _  |  j ræt0 j1 d d% d% d d& ƒ }% t0 j1 |  j2 ƒ }& t0 j1 |  j2 ƒ }' |' j^ |% ƒ |' |  _2 n  |	 r�|  j	 r�t |  _  t |  d ƒ r&|  j r&|  j j& ƒ  n  t0 j1 d d% d% d d% ƒ }% t0 j1 |  j] ƒ }$ t |  d' ƒ r5t0 ja |  jb d
 jc ƒ }( |( jd ƒ  |$ je ƒ  t0 ja d
 d
 d ƒ }) t0 ja jf |( |) ƒ }* tg jh |* ƒ d( tg ji }+ d |* d) k r5t0 ja jj |( |) ƒ }, |, jd ƒ  t0 j1 |, jk ƒ  |, jl ƒ  |, jm ƒ  d |+ ƒ }% q5n  t0 j1 |  j2 ƒ }& t0 j1 |  j2 ƒ }' |' j^ |$ ƒ |' j^ |% ƒ t jn t jo ƒ t# |  _p n  |  j	 r¹|  j_ j! ƒ  } |  j_ j" ƒ  } n* |  j rã|  j` j! ƒ  } |  j` j" ƒ  } n  |  j! ƒ  |  j" ƒ  } } | d
 k rd } n  | d
 k r&d } n  d | | } |  j% | | d ƒ t |  d* ƒ rf|  jq j  ƒ  n  |  j	 r. t |  d* ƒ r. |  j jr t js d
 d
 d+ |  jt d, |  ju |  jv d- d, ƒ t js d
 d
 d+ d. ƒ ƒ |  jq jr t js d
 d
 d+ |  jt d, |  ju |  jv d- d, ƒ t js d
 d
 d+ d. ƒ ƒ q. n  |  j	 rC |' |  _2 n  |  j ƒ  t |  d* ƒ rl |  jq j& ƒ  n  |	 rˆ |  j	 rˆ t jw ƒ  n  |  j	 r¡ |  j_ j ƒ  n |  j rº |  j` j ƒ  n  |  j sÒ |	 rÞ |  j	 rÞ |& |  _2 n  t |  _p |  j% | | | ƒ t jn t jx ƒ |	 |  _  t jy t jz t jz t jz t jz ƒ n  t# r5"|	 r5"|  j	 r5"tS jV j{ d/ ƒ rx!|  j_ j| ƒ  j} d0 ƒ n  |  j_ j' ƒ  } t j t j ƒ t j+ t j ƒ t j t j | ƒ t j t j ƒ t j+ t j ƒ t j t j d
 ƒ t j t j ƒ |  j  rj"|  j rj"|  j j t# ƒ |  j j t# ƒ qj"n5 |  j  rj"|  j rj"|  j j t ƒ |  j j t ƒ n  t# rˆ#|  j	 rˆ#|  j  rˆ#t |  d ƒ rˆ#|  j rˆ#|  j j  ƒ  |  j j d1 ƒ }- |  j j d2 ƒ }. |  j j d ƒ } |  j j |- d |  j_ j! ƒ  ƒ |  j j |. d |  j_ j" ƒ  ƒ |  j j | d ƒ t~ ƒ  }/ |/ rˆ#t |/ d3 ƒ rˆ#|/ j j€ ƒ  rˆ#|  j j d4 ƒ }0 |  j j |0 d
 ƒ qˆ#n  t# r¦$|  j	 r¦$|  j  r¦$t |  d ƒ r¦$|  j r¦$|  j j  ƒ  |  j j d1 ƒ }- |  j j d2 ƒ }. |  j j d ƒ } |  j j |- d |  j_ j! ƒ  ƒ |  j j |. d |  j_ j" ƒ  ƒ |  j j | d ƒ t~ ƒ  }/ |/ r¦$t |/ d3 ƒ r¦$|/ j j€ ƒ  r¦$|  j j d4 ƒ }0 |  j j |0 d
 ƒ q¦$n  |
 |  _ |  j ƒ  |  j r"'|  j r"'t j, t j- ƒ t j. |  j/ d
 |  j/ d |  j/ d ƒ t0 j1 |  j2 ƒ } | j3 ƒ  j4 ƒ  } t j5 | ƒ t j6 | ƒ t j7 d
 d
 d
 ƒ |  j� rË%t‚ jƒ j„ ƒ  rË%t… j† d
 d
 |  j` j! ƒ  |  j` j" ƒ  ƒ }1 t‚ jƒ j‡ |  j� |1 |  j` |1 ƒ |  j� j' ƒ  } n |  j` j' ƒ  } t j+ t j ƒ t j t j | ƒ t j; t j< ƒ t j+ t j= ƒ t> |  j? ƒ d } t j@ d d d ƒ t jA d d d d ƒ t jB t jC ƒ t jD d
 d ƒ t jE d | d | d ƒ t jD d d ƒ t jE d | d | d ƒ t jD d d
 ƒ t jE d | d5 | d ƒ t jD d
 d
 ƒ t jE d | d5 | d ƒ t jF ƒ  n  d S(6   s  
        # Testing
        opengl.glLoadIdentity();
        opengl.glTranslatef(0,0,-600);
        opengl.glScalef(60.0/float(self.RADIUS),60.0/float(self.RADIUS),60.0/float(self.RADIUS))
        glrotmat = self.quat.getInvMatrix().to_dp()
        opengl.glMultMatrixd(glrotmat)
        opengl.delcdp(glrotmat)

        self.qglClearColor(QtGui.QColor(QtCore.Qt.white))
        opengl.glClear(opengl.GL_COLOR_BUFFER_BIT | opengl.GL_DEPTH_BUFFER_BIT)
        opengl.glDisable(opengl.GL_LIGHTING);
        opengl.glEnableClientState(opengl.GL_VERTEX_ARRAY)
        opengl.glEnableClientState(opengl.GL_COLOR_ARRAY)

        if hasattr(self,"sillyobj") and hasattr(self.sillyobj,"draw") and callable(self.sillyobj.draw):
          self.sillyobj.draw()
          self.showFPS()
          return
        R~   t   ssaoOnt   edgeDetectOnt	   ShadowMapi   t   SSAOMapi   t   EdgeMapi   i    NR¿   t   normalAsColourShaderi   g      ð?t   depthMapt	   normalMapt   screenWidtht   screenHeightið   g      N@iôÿÿÿi8ÿÿÿi   R‚   t   circleShadowShadert
   ssaoShadert	   rotateMapt   zNeart   zFarR  t   attBiast   attScaleR
   R8  s
   rotate.pngg        g     €VÀR'  i´   g�íµ ÷Æ°>t   shadowShaderiÿÿÿÿg      à?g       @i<   Rw  s   vsm.pngt   xPixelOffsett   yPixelOffsett
   roll_timerRv   iþÿÿÿ(ˆ   R}   R`   R~   R€   t	   Uniform1fR   R‚   R›  t   doMirrorR   t	   doAmbientt	   doOutlineRˆ  R�   t   multiTextureAvailableRX  t   SetMyTextureUnitt   GL_TEXTURE2t   glBindTexturet   GL_TEXTURE_2Dt   GL_TEXTURE3t   GL_TEXTURE4t	   glDisablet   GL_TEXTURE0t   paintGL2R–   R¿   Rù   Ru   R–  R�  t   bindt   turnOnRÇ   RÈ   R   t	   inAmbientt   resizeGLMaint   turnOfft   textureR{  R  t   edgeDetectShadert   glEnablet   glMatrixModet   GL_MODELVIEWt   glTranslatedR¤   Rå   RT  Rî   Rw  t   to_dpt   glMultMatrixdt   delcdpt   glTranslateft   glCleart   GL_COLOR_BUFFER_BITt   GL_DEPTH_BUFFER_BITt   glDepthFunct   GL_LESSt   GL_DEPTH_TESTRJ   RÒ   t
   glNormal3ft	   glColor4ft   glBegint   GL_QUADSt   glTexCoord2ft
   glVertex3ft   glEndR€  t   blurXShadert   blurYShaderRœ  R~  t   ambientOcclusionZNeart   ambientOcclusionZFart   ambientOcclusionRadiust   ambientOcclusionBiast   ambientOcclusionScaleR   Rl  R  t   patht   joinR  t   bindTextureR�  t   glTexParameterft   GL_TEXTURE_WRAP_St	   GL_REPEATt   GL_TEXTURE_WRAP_TRV  RU  R|  t   offScreenBufferRæ   R'  t   positionRê   Rï   Rë   t   matht   acost   piRš  Rð   Rñ   Rò   t
   glCullFacet   GL_FRONTt   inShadowR¢  t   setClipPlanest   newfv4t   shadowExtentR  R  t   setTextureMatrixt   GL_BACKt   glColorMaskt   GL_TRUER#   RÞ   Rï  R   R¥  t   isActivet   offScreenBufferTextureR   RÎ   t   hasOpenGLFramebufferBlitR    t   QRectt   blitFramebuffer(2   Rt   t	   ssaoOnLoct   ssaoOnLocCirclet   edgeDetectOnLoct   edgeDetectOnCircleLoct   ShadowMapLoct
   SSAOMapLoct
   EdgeMapLoct   EdgeMapCircleLocR}   R–   R‚  Rƒ  t   wt   hRÄ  t   normalTexturet   depthTexturet   depthMapLoct   normalMapLoct   screenWidthLoct   screenHeightLocRî   t   glrotmatt   glslMultR¹  t   EdgeMapShadowLoct   screenWidthShadowLoct   screenHeightShadowLoct   rotateMapLoct   zNearLoct   zFarLoct	   radiusLoct
   attBiasLoct   attScaleLoct   imt	   extraQuatt   rotXt   oldQuatt   newQuatRÔ  t   zorigt   dpt   anglet   axist   xPixelOffsetLoct   yPixelOffsetLoct   mwRv   t   rect(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   paintGLÊ  s<   !2!	
			
'	 			
	 			
			+


			'				
			!!
(+


								

3					U[	
				%0  	$0  	$	
+*c         C   sv   t  | ƒ t k r! | \ } } n  | |  _ |  j ƒ  |  j ƒ  } } |  j | | ƒ |  j t j d ƒ |  | f ƒ d  S(   Nt   AmbientOcclusionStateChanged(	   R@   t   tupleR¨  RÇ   RÈ   R$  R¥   R    R¦   (   Rt   t   statet   dumRú  Rû  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setAmbientOcclusionStateo  s    	c         C   s6   | |  _  |  j ƒ  |  j ƒ  } } |  j | | ƒ d  S(   N(   R©  RÇ   RÈ   R$  (   Rt   R  Rú  Rû  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setOutlineStatew  s    	i   c         C   s  t  | ƒ t k r$ | \ } } } n  | |  _ |  j r} |  j r} |  j j t | ƒ ƒ |  j j d ƒ } |  j j | | ƒ n  |  j rÍ |  j	 rÍ |  j	 j t | ƒ ƒ |  j	 j d ƒ } |  j	 j | | ƒ n  |  j
 ƒ  |  j ƒ  } } |  j | | ƒ |  j t j d ƒ |  | | f ƒ d  S(   NRv   t   ShadowStateChanged(   R@   R  R   R}   R~   Rˆ  t   boolR€   R�   R‚   RÇ   RÈ   R$  R¥   R    R¦   (   Rt   R  t   qualityR  Rv   Rú  Rû  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRˆ  |  s    	c         C   sÕ  |  j  r |  j ƒ  n  d } y t d ƒ j ƒ  d } Wn n Xt |  d ƒ rƒ t |  j d ƒ rƒ t |  j j ƒ rƒ |  j j ƒ  n  |  j |  j	 ƒ  |  j
 ƒ  ƒ t j t j t j Bƒ |  j r¨|  j sÑ |  j r¨d d  l } | j ƒ  j } | d k rct j d d	 d d d
 | j ƒ  j ƒ |  _ t j d d	 d d d | j ƒ  j ƒ |  _ d  |  _ d  |  _ nî d  |  _ d  |  _ |  j | j ƒ  j k rQ| j ƒ  j |  _ t j d d d d d d d d d d |  j d d d d d d d g ƒ } t j d d d d d d d d d d |  j d d d d d d d g ƒ } | j ƒ  |  _ | j ƒ  |  _ n  |  j rŸt j  t j! ƒ t j" t j# d d ƒ t j$ t j% t j% t j% ƒ n  |  j s»t j& t j' ƒ n  t j t j t j Bƒ |  j( d |  j d |  j ƒ |  j) | ƒ |  j r9t j" t j# d d ƒ t j$ t j% t j% t j% ƒ n  |  j slt j& t j* ƒ t j t j t j Bƒ n  |  j( d |  j d |  j ƒ |  j) | ƒ t j+ t j! ƒ n) d  |  _, d  |  _- |  j( ƒ  |  j) | ƒ d  S(   Ni   t   render_qualityt   smooth_lineR~   R¸  iÿÿÿÿt   ROTATIONg        g      ð?g      à?g      à¿i   i    R�  R�  (.   R–   R—   R   R    R`   R~   t   callableR¸  t   setupZalmanStencilRÇ   RÈ   RX  RÃ  RÄ  RÅ  t   doStereot   stereoAvailablet   doZalmanStereoR-   R.   RX   Rå   RT  t   stereo_rotation_anglet	   left_quatt
   right_quatRø   t   left_furtherMatrixt   right_furtherMatrixRB  t   matrixR¿  R»  t   GL_STENCIL_TESTt   glStencilFunct   GL_EQUALt   glStencilOpt   GL_KEEPt   glDrawBuffert   GL_BACK_LEFTRŽ  t   paintGLMaint   GL_BACK_RIGHTR±  R�  R�  (   Rt   R%  R-   RX   t
   shear_plust   shear_minus(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR³  Œ  sp    	3 ++									
c         C   s4   |  j  r |  j ƒ  n  t j |  | ƒ |  j ƒ  d  S(   N(   R–   R—   R	   R9  t   showFPS(   Rt   R%  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR9  Û  s    	c         C   sÅ   d } |  j  r´ |  j d |  _ t j ƒ  } | |  j d k rœ |  j |  j t j ƒ  |  j } d | } |  j |  _ | |  _ | d | d } | |  _ q´ | d |  j d } n  |  j | ƒ d  S(   NRl  i   s   %4.0fs
   framerate:RA  (   Rg  t   nframesR¢   t   previous_timet   previous_framesRh  Rp  (   Rt   t   messaget   tt   fpst   fps_text(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR=  á  s    	!
	c         C   sº  |  j  r |  j ƒ  n  |  j r¶|  j r¶t j t j ƒ t j t j ƒ t j	 ƒ  t j
 ƒ  t j d | d | d d ƒ t j t j ƒ t j	 ƒ  t j
 ƒ  t j d d d ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j d ƒ t j d ƒ t j t t t t ƒ t j t ƒ t j t j  ƒ t j! t j ƒ t j" t j# d d ƒ t j$ t j% t j% t j& ƒ t j' d ƒ t j( t j) ƒ x: t* d | d	 ƒ D]& } t j+ d | ƒ t j+ | | ƒ qWt j, ƒ  t j t- t- t- t- ƒ t j t- ƒ t j t j ƒ t j. ƒ  t j t j ƒ t j. ƒ  t j/ ƒ  n  d  S(
   Ni    g      $Àg      $@g…ëQ¸Õ?g        i�€  i   g      ð?i   (0   R–   R—   R)  R+  RX  t   glPushAttribt   GL_ENABLE_BITR¼  t   GL_PROJECTIONt   glPushMatrixt   glLoadIdentityt   glOrthoR½  RÂ  R±  R2  t   GL_ALPHA_TESTt   GL_LIGHTINGt   GL_FOGt   GL_NORMALIZERÈ  t   GL_COLOR_MATERIALt   GL_LINE_SMOOTHt	   GL_DITHERt   GL_BLENDt   glShadeModelt	   GL_SMOOTHt   glClearStencilRë  R   t   glDepthMaskRÃ  t   GL_STENCIL_BUFFER_BITR»  R3  t	   GL_ALWAYSR5  R6  t
   GL_REPLACEt   glLineWidthRË  t   GL_LINESRä   t
   glVertex2iRÏ  R   t   glPopMatrixt   glPopAttrib(   Rt   Rú  Rû  R?  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR(  ò  sX    	






c         C   s—  t  j j ƒ  s$ t |  _ t |  _ n  t  j j ƒ  rW |  j rW |  j |  _ |  j	 |  _
 nT |  j si |  j r� |  j |  _ d  |  _
 n* |  j r¢ |  j |  _ d  |  _
 n	 d  |  _ |  j rÁ |  j ƒ  n  | d k rÖ d } n  | d k rë d } n  d | | } |  j s|  j | | ƒ n  |  j rA|  j s1|  j rA|  j j ƒ  n  |  j | | | ƒ |  j r“|  j sp|  j r“|  j j ƒ  |  j | | | ƒ n  d  S(   Ni    i   g      ð?(   R   RÎ   Ry  R   R§  R   Rï  t   offScreenBufferMirrorRÞ  t   offScreenBufferTextureMirrorRî  R¨  R©  R{  Rø   R|  R–   R—   R(  R´  R·  Rù   (   Rt   Rú  Rû  RÄ  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR$  '	  s8    							c         C   s¦  t  j t  j ƒ t  j ƒ  |  j r‹d GHt j j ƒ  |  j rƒ d GHt  j	 |  j
 d |  j
 d |  j
 d |  j
 d d |  j
 ƒ qc|  j rÆ d GHt  j	 |  j | |  j | |  j |  j d d ƒ qcd GHd	 |  j j ƒ  |  j j ƒ  } t  j d
 d
 |  j j ƒ  |  j j ƒ  ƒ t |  j j ƒ  d |  j ƒ |  j j ƒ  } t  j	 |  j | | |  j | | |  j | |  j | |  j |  j ƒ nØ t  j d
 d
 | | ƒ |  j rêt  j	 |  j
 d |  j
 d |  j
 d |  j
 d d |  j
 ƒ ny |  j r+t  j	 |  j | |  j | |  j |  j d |  j ƒ n8 t  j	 |  j | |  j | |  j |  j |  j |  j ƒ t  j t  j ƒ t j ƒ  j ƒ  |  j t j d ƒ |  j ƒ  ƒ d  S(   NR–   s   resizeGLMain shadowg       @g-Cëâ6?s   resizeGLMain ambientiÖ  i  s   resizeGLMain normalg      ð?i    i   t   SizeChanged(   RX  R¼  RG  RI  R–   R   Rô   Rõ   Rå  RJ  Rè  R¶  Rç   R¿   RÇ   RÈ   t
   glViewportRJ   RÆ   RÔ   t   NEARt   FARR½  R™   t   BillBoardTextt   SetMatricesR¥   R    R¦   Rú   (   Rt   Rú  Rû  RÄ  t   pbuffer_scale(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR·  L	  s2    
	 	@	5 (-K	@	88c         C   s¥   t  j d k r& d | j ƒ  d } n d | j ƒ  d } |  j | |  _ |  j d k  re d |  _ n  |  j t j d ƒ |  ƒ |  j ƒ  |  j t j d ƒ |  ƒ d  S(   Nt   darwing      ð?g     ˆ³@g     @@i   t   ZoomChangedR±   (   R   R   t   deltaRÒ   R¥   R    R¦   Rs   (   Rt   R„   t   factor(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt
   wheelEventl	  s     
c   	      C   su  d } d } d } |  j  j ƒ  r. | d 8} n  |  j j ƒ  rJ | d 7} n  |  j j ƒ  rf | d 8} n  |  j j ƒ  r‚ | d 7} n  |  j j ƒ  rž | d 8} n  |  j j ƒ  rº | d 7} n  |  j t j	 j
 sî | d 9} | d 9} | d 9} n  |  j j ƒ  t j | | | ƒ } | j ƒ  | j ƒ  | j ƒ  } } } t j | | | d ƒ } |  j j | ƒ d } d } d } |  j j ƒ  rŒ| d 7} n  |  j j ƒ  r¨| d 8} n  |  j j ƒ  rÄ| d 8} n  |  j j ƒ  rà| d 7} n  |  j t j	 j
 s
| d 9} | d 9} n  |  j |  j | | d g ƒ |  _ |  j ƒ  |  j ƒ  |  j t j d ƒ |  ƒ |  j t j d ƒ |  ƒ d  S(   Ni    i   gš™™™™™¹?i   t   QuatChangedR¡   (   RE  Rí  RG  RH  RI  RK  RJ  Rø  R    R‡   R  RV  Rï   Rå   Ræ   Rð   Rñ   Rò   RT  Rî   RU  RM  RL  RN  RO  t   movexyzR¤   R§   Rs   R¥   R¦   (	   Rt   t   dxt   dyt   dzR³  t   rotQt   xshiftt   yshiftt   zshift(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRF  x	  sT    

"&
!

c         C   s!   |  j  d  d d ƒ |  j ƒ  d  S(   Ni    gš™™™™™Ù?(   R‹   Rø   Rs   (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRQ  §	  s    c         C   s!   |  j  d  d d ƒ |  j ƒ  d  S(   Ni    gš™™™™™Ù¿(   R‹   Rø   Rs   (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRS  ª	  s    c         C   sR   t  j |  j d |  j d |  j d |  j d ƒ } |  j j | ƒ |  j ƒ  d  S(   Ni    i   i   i   (   Rå   RT  t	   roll_quatRî   RU  Rs   (   Rt   Rr  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   roll_handlerÆ	  s    4c         C   st  | j  ƒ  r d  S|  j r] |  j r] |  j r] |  j j d ƒ } |  j j | d ƒ |  j ƒ  n  |  j rª |  j rª |  j rª |  j j d ƒ } |  j j | d ƒ |  j ƒ  n  d |  j | j	 ƒ  <| j	 ƒ  t
 j j k rt ƒ  j t j d ƒ } x, | D]! } | j t ƒ t ƒ  j ƒ  Pqô Wn  | j	 ƒ  t
 j j k rl|  j d |  j ƒ  ƒ |  j ƒ  |  j ƒ  |  j ƒ  n  | j	 ƒ  t
 j j k r—|  j j d ƒ n  | j	 ƒ  t
 j j k rÂ|  j j d ƒ n  | j	 ƒ  t
 j j k rí|  j j d ƒ n  | j	 ƒ  t
 j j  k r|  j! j d ƒ n  | j	 ƒ  t
 j j" k rC|  j# j d ƒ n  | j	 ƒ  t
 j j$ k rn|  j% j d ƒ n  | j	 ƒ  t
 j j& k r™|  j' j d ƒ n  | j	 ƒ  t
 j j( k rÄ|  j) j d ƒ n  | j	 ƒ  t
 j j* k rï|  j+ j d ƒ n  | j	 ƒ  t
 j j, k r|  j- j d ƒ n  | j	 ƒ  t
 j j. k rE|  j/ j d ƒ n  | j	 ƒ  t
 j j0 k rp|  j1 j d ƒ n  d  S(   NRv   i    i   t
   fullscreeni   (2   t   isAutoRepeatR}   R~   R   R€   R�   Rs   R‚   Rø  RG  R    R‡   Rù  R   t   findChildrenR   t   QActiont
   setCheckedR   t   toggleFullscreenRt  R*  R+  Ru   RÚ   Rr  RE  R   Rb  RG  Rp  RH  RN  RR  RL  RP  Rq  RI  Ro  RJ  Rn  RK  R  RL  R	  RM  R  RN  R
  RO  (   Rt   R„   Rv   t   childrent   child(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   keyPressEventË	  s\    

c         C   s¢  | j  ƒ  r d  St } |  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j	 k sˆ|  j
 j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k sˆ|  j j ƒ  | j ƒ  At j j k r‘t } n  | rÛ|  j rÛ|  j rÛ|  j rÛ|  j j d ƒ } |  j j | d ƒ n  | r/|  j r/|  j  r/|  j r/|  j  j d ƒ } |  j  j | d ƒ |  j! ƒ  n  d |  j" | j ƒ  <| j ƒ  t j j k rj|  j j# ƒ  n  | j ƒ  t j j	 k r’|  j j# ƒ  n  | j ƒ  t j j k rº|  j
 j# ƒ  n  | j ƒ  t j j$ k râ|  j% j# ƒ  n  | j ƒ  t j j& k r
|  j' j# ƒ  n  | j ƒ  t j j k r2|  j j# ƒ  n  | j ƒ  t j j k rZ|  j j# ƒ  n  | j ƒ  t j j k r‚|  j j# ƒ  n  | j ƒ  t j j k rª|  j j# ƒ  n  | j ƒ  t j j k rÒ|  j j# ƒ  n  | j ƒ  t j j k rú|  j j# ƒ  n  | j ƒ  t j j k r"|  j j# ƒ  n  | j ƒ  t j j( k rž| j ƒ  t j j) k rž| j ƒ  t j j* k rž| j ƒ  t j j+ k rž|  j, t j- d ƒ |  ƒ n  d  S(   NRv   i   i    R±   (.   Ry  R   RE  Rí  RG  R    R‡   Rr  RG  Rb  RH  Rp  RI  Rq  RJ  Ro  RK  Rn  RM  R	  RL  R  RN  R  RO  R
  R   R}   R‚   R   R€   R�   R~   Rs   Rø  R©   RL  RP  RN  RR  R  R  R  R  R¥   R¦   (   Rt   R„   t
   keysActiveRv   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   keyReleaseEventû	  s`    %%%%%%%%%%	""`c         C   s   |  j  j ƒ  d  S(   N(   R,  t   draw(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   DrawInThread-
  s    c         C   sH   | j  ƒ  |  _ |  j |  j |  j ƒ t j |  | ƒ } |  j | ƒ d  S(   N(   R@   Rc  RŽ  R�  R�  t   MGPickEventR\  (   Rt   R„   Rk  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   mouseDoubleClickEvent0
  s    c         C   s   t  |  _ d  S(   N(   R   RX  (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRW  6
  s    c         C   s`   |  j  t k r t |  _  n  |  j |  j |  j ƒ |  j r\ |  j |  j ƒ |  ` d  |  _ n  d  S(   N(	   RX  R   R   RŽ  R�  R�  R_  RZ  Rø   (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRV  9
  s    	c         C   s   |  j  S(   N(   R^  (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   getLeftClickHandlerF
  s    c         C   s   | |  _  d  S(   N(   R^  (   Rt   t   handler(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setLeftClickHandlerI
  s    c         C   s   |  j  S(   N(   R\  (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   getDoubleClickHandlerL
  s    c         C   s   | |  _  d  S(   N(   R\  (   Rt   Rˆ  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setDoubleClickHandlerO
  s    c         C   s   | |  _  d  S(   N(   RZ  (   Rt   Rˆ  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setContextMenuHandlerR
  s    c         C   s#   | j  ƒ  |  _ |  j | d ƒ d  S(   Ni   (   R@   Rc  t   mousePressEvent_main(   Rt   R„   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   mousePressEventU
  s    c         C   s4   t  j | j ƒ  ƒ |  _ t  j | j ƒ  ƒ |  _ d  S(   N(   R    t   QPointt   post   lastPost   mouseDownPos(   Rt   R„   t
   real_event(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR�  Z
  s    c         C   s˜   |  j  |  j |  j ƒ t |  d ƒ rŠ t j | j ƒ  ƒ |  _ t j |  | ƒ |  _	 |  j
 j |  j |  j ƒ ƒ |  `	 d  |  _	 | j ƒ  n
 | j ƒ  d  S(   NRU  (   RŽ  R�  R�  R`   R    R�  R�  R‘  R…  R_  RU  t   exec_t   mapToGlobalRø   t   acceptt   ignore(   Rt   R„   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   contextMenuEvent`
  s    	c         C   s®   |  j  rM |  j rM |  j rM |  j j d ƒ } |  j j | d ƒ |  j ƒ  n  |  j  rš |  j rš |  j rš |  j j d ƒ } |  j j | d ƒ |  j ƒ  n  |  j | d ƒ d  S(   NRv   i   i   (   R}   R~   R   R€   R�   Rs   R‚   t   mouseReleaseEvent_main(   Rt   R„   Rv   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   mouseReleaseEventl
  s    c         C   sF  |  j  t j j k r d  S|  j |  j |  j ƒ d } t j | j ƒ  ƒ } | j	 ƒ  t j
 j @o¢ | j ƒ  t j
 j @o¢ | j ƒ  t j
 j @o¢ | j ƒ  t j
 j @} | d  k rB| rBt |  j j ƒ  | j ƒ  ƒ d k st |  j j ƒ  | j ƒ  ƒ d k r|  j t j d ƒ |  ƒ qBt j |  | ƒ } |  j | ƒ ~ n  d  S(   NRl  i   R±   (   Rc  R    R{   t   MouseButtonDblClickRŽ  R�  R�  R�  R�  t   buttonsR‡   t
   LeftButtont	   modifierst   AltModifiert   ControlModifiert   MetaModifierRø   t   absR’  R>  R?  R¥   R¦   R…  R^  (   Rt   R„   R“  t   movedt   curPost   leftt	   pickEvent(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR™  x
  s     [%%c         C   sÆ  i
 |  j  d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d	 6|  j	 d
 6} i t
 j j d 6t
 j j d 6t
 j j d 6} i d d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d 6t
 j j d  6t
 j j  d! 6t
 j j! d" 6t
 j j" d# 6t
 j j# d$ 6t
 j j$ d% 6t
 j j% d& 6t
 j j& d' 6t
 j j' d( 6t
 j j( d) 6} i i  t
 j j 6i  t
 j j 6i  t
 j j 6|  _) x™| j* ƒ  D]‹\ } } |  j) | | d* } | j+ d+ d, ƒ rÕ| j+ d- d, ƒ rÆ| j+ d. d, ƒ r­t
 j j, t
 j j- Bt
 j j. B} n t
 j j, t
 j j- B} n t
 j j, } ny | j+ d- d, ƒ r!| j+ d. d, ƒ rt
 j j- t
 j j. B} n t
 j j- } n- | j+ d. d, ƒ rBt
 j j. } n t
 j j/ } | j0 | ƒ rki  | | <n  | | }	 | j+ | d/ d0 ƒ }
 |
 r¾| j0 | ƒ r±| | |	 |
 <n
 | |	 |
 <n  q3Wd  S(1   Ns	   rotate-xys   rotate-zs   translate-xys   translate-zs   object-rotate-xys   object-rotate-zs   object-translate-xys   object-translate-zt   zooms
   clip-widthR¥  t   middlet   rightt   no_keyRA  RŸ   Rž   t   ct   dR…   Ró  R�   Rû  R	  R
  t   kt   lt   mt   nRI  t   pt   qRœ   R½  RB  t   ut   vRú  R>  R?  RC  t   mouse_buttont   shifti    t   altt   ctrlRG  Rl  (1   t   handleRotateXYt   handleRotateZt   handleTranslateXYt   handleTranslateZt   handleRotateObjectXYt   handleRotateObjectZt   handleTranslateObjectXYt   handleTranslateObjectZR‹   t   handleClippingR    R‡   R�  t	   MidButtont   RightButtonRb  Rc  Rd  Re  Rf  Rg  Rh  Ri  Rj  Rk  Rl  Rm  Rn  Ro  Rp  Rq  Rr  Rs  Rt  Ru  Rv  Rw  Rx  Ry  Rz  R{  t   mouseMoveHandlerst   itemsR×   t   ShiftModifierRŸ  R   t
   NoModifierR#   (   Rt   t   bindingst   handlerst
   button_mapt   key_mapRˆ  t   defnt   h1t   modt   h2RG  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   setMouseBindings‰
  sV    








ÿ `# 
c         C   s   i  |  _  d  S(   N(   RÄ  (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   removeMouseBindingsÇ
  s    c         C   s    d d  l  } |  j | j ƒ d  S(   Niÿÿÿÿ(   t   MouseBindingsRÐ  t   DEFAULT(   Rt   RÒ  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRd  Ê
  s    c         C   s   |  j  S(   N(   t   transform_delta(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   transformDeltaÓ
  s    c         C   s   |  j  S(   N(   t   transform_delta_mode(   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   transformDeltaModeÖ
  s    c         C   se   t  |  j d ƒ |  j ƒ  j ƒ  t  |  j d ƒ |  j ƒ  j ƒ  t  |  j d ƒ |  j ƒ  j ƒ  f S(   Ni    i   i   (   RJ   RÔ  Rú   RÇ   RÈ   (   Rt   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   screenTransformÙ
  s     !c         C   so   |  j  d d ƒ } |  j  t |  j d ƒ t |  j d ƒ ƒ } | d | d } | j ƒ  | j ƒ  | j ƒ  f S(   Ni    i   (   t   getxyzRJ   RÔ  Rð   Rñ   Rò   (   Rt   t   cv1t   cv2t   diffxyz(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   worldTranslateÞ
  s    ,c         C   sO   |  j  d } |  j  d } |  j  d } t j | | | d ƒ } | j ƒ  } | S(   Ni    i   i   (   RÔ  Rå   RT  Rï   (   Rt   Ro  Rp  Rq  Rr  t   matx(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   worldRotateä
  s    c         C   s	   d GHd  S(   Ns   in handleTesting(    (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   handleTestingï
  s    c         C   sA   |  j  t | ƒ d |  _  |  j t j d ƒ |  ƒ |  j ƒ  d  S(   Ngš™™™™™¹?t   SlabChanged(   R  RJ   R¥   R    R¦   Rs   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRÁ  ò
  s    c         C   s8   d |  _  | | d f |  _ |  j t j d ƒ |  ƒ d  S(   Nt	   translatei    t   TransformObject(   RÖ  RÔ  R¥   R    R¦   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR¿  ø
  s    	c         C   s8   d |  _  d d | f |  _ |  j t j d ƒ |  ƒ d  S(   NRâ  i    Rã  (   RÖ  RÔ  R¥   R    R¦   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRÀ  ý
  s    	c         C   s8   d |  _  | | d f |  _ |  j t j d ƒ |  ƒ d  S(   Nt   rotatei    Rã  (   RÖ  RÔ  R¥   R    R¦   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR½    s    	c         C   s8   d |  _  d d | f |  _ |  j t j d ƒ |  ƒ d  S(   NRä  i    Rã  (   RÖ  RÔ  R¥   R    R¦   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR¾    s    	c         C   s   |  j  | | d ƒ d  S(   Ni    (   t   setRotationNoUpdate(   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR¹    s    c         C   sâ   |  j  ƒ  j ƒ  } |  j  ƒ  j ƒ  } | j ƒ  } | j ƒ  } | | d k  rb |  j d d | ƒ n+ | | d d k r� |  j d d | ƒ n  | | d k  r´ |  j d d | ƒ n* | | d d k rÞ |  j d d | ƒ n  d  S(   Ni   i    i   (   Rú   RÇ   RÈ   R>  R?  Rå  (   Rt   R„   Ro  Rp  t   win_wt   win_hR>  R?  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRº    s    c         C   sV   d | d } |  j  | |  _  |  j  d k  r9 d |  _  n  |  j t j d ƒ |  ƒ d  S(   Ng      ð?g      I@i   Ri  (   RÒ   R¥   R    R¦   (   Rt   R„   Ro  Rp  Rk  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR‹     s
     c         C   sH   |  j  |  j d d | g ƒ |  _ |  j t j d ƒ |  ƒ |  j ƒ  d  S(   Ni    R¡   (   Rn  R¤   R¥   R    R¦   R§   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR¼  $  s    !c         C   sÄ   | d t  |  j ƒ t  |  j ƒ  j ƒ  ƒ t  |  j ƒ d } | d t  |  j ƒ t  |  j ƒ  j ƒ  ƒ t  |  j ƒ d } |  j |  j | | d g ƒ |  _ |  j t j	 d ƒ |  ƒ |  j
 ƒ  d  S(   Ng      $@g      N@i    R¡   (   RJ   Rç   Rú   RÈ   RÒ   Rn  R¤   R¥   R    R¦   R§   (   Rt   R„   Ro  Rp  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR»  )  s
    >>!c         C   sÄ  t  j d k r¡ | j ƒ  d k r¡ | j ƒ  t j j @t j j k rž | j ƒ  } | t j j N} t j t j	 j
 | j ƒ  t j j t j j | ƒ } | } qž q¡ n  |  j j t | j ƒ  ƒ i  ƒ } | sÌ d  S| j t | j ƒ  ƒ i  ƒ } | sô d  Sd } t | t j ƒ rjx= | j ƒ  D]/ \ } } | d k r|  j | r| } PqqW| sp| j d d ƒ } qpn | } | szd  St j | j ƒ  ƒ |  j }	 | j ƒ  |  j j ƒ  }
 | j ƒ  |  j j ƒ  } |
 d k ræt | ƒ d k  st | ƒ d k  r|
 d k rd  S| | |
 | ƒ |  j r[|  j r[|  j r[|  j j d ƒ } |  j j | d ƒ n  |  j rž|  j  rž|  j rž|  j  j d ƒ } |  j  j | d ƒ n  |  j! ƒ  t j | j ƒ  ƒ |  _ d  S(   NRh  i    Rl  Rª  i   Rv   ("   R   R   t   buttonRž  R    R‡   RŸ  R   t   QMouseEventR{   t	   MouseMoveR�  RÂ  RÄ  R×   RV   Rœ  t
   isinstancet   typest   DictTypeRÅ  Rø  R�  R‘  R>  R?  R¢  R}   R~   R   R€   R�   R‚   Rs   (   Rt   R„   t   modst   newEventRÍ  RÏ  Rˆ  RG  t   h3t   diffRo  Rp  Rv   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   mouseMoveEvent0  sL    "3!    < 
c         C   sm   |  j  | d | d | d ƒ \ } } } | d } | d } | d } | d | | d | | d | f S(   Ni    i   i   g      @(   t	   getdxdydz(   Rt   Rœ   t   drRo  Rp  Rq  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRn  f  s
    *


c      
   C   s†  t  j d ƒ } t  j d ƒ } t  j d ƒ } t  j ƒ  } t  j ƒ  } t  j ƒ  } |  j rg |  j ƒ  n  t j t j | ƒ t j	 t j
 | ƒ t j	 t j | ƒ | d | d }	 t j | |	 d | | | | | | ƒ	 t  j | j ƒ  | j ƒ  | j ƒ  ƒ }
 t j | |	 d | | | | | | ƒ	 t  j | j ƒ  | j ƒ  | j ƒ  ƒ } t  j ƒ  } | j |
 ƒ | j | ƒ ~ ~ ~ ~ ~ ~ | S(   sG   
        Work out world x,y,z at near and far clipping planes.
        i   i   i   i   g        g      ð?(   Rå   RW  t   doubleat   doublepR–   R—   RX  RY  RZ  t   glGetDoublevt   GL_PROJECTION_MATRIXt   GL_MODELVIEW_MATRIXt   gluUnProjectRæ   t   valuet   CartesianVectorRì   (   Rt   R>  R?  R�  t   mvmatrixt
   projmatrixt   wxt   wyt   wzt   realyt   cart1t   cart2t   cv(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRÙ  m  s4    	%'%'c   
      C   sY  |  j  |  j |  j } } } g  } | j | | j ƒ  ƒ | j | | j ƒ  ƒ | j | | j ƒ  ƒ g  } | j | | j ƒ  ƒ | j | | j ƒ  ƒ | j | | j ƒ  ƒ g  }	 |	 j | | j ƒ  ƒ |	 j | | j ƒ  ƒ |	 j | | j ƒ  ƒ | d | d |	 d } | d | d |	 d } | d | d |	 d } | | | g S(   si   
        Calculate movement in real coordinates
        corresponding to one in eye coordinates.
        i    i   i   (   RË  RÌ  RÍ  Rì   Rð   Rñ   Rò   (
   Rt   Ro  Rp  Rq  RË  RÌ  RÍ  Rô  t   dut   df(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRó  �  s"    c         C   s7   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | | ƒ d  S(   N(   Ru   R–   R—   R	   R-  (   Rt   R;  RÀ   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyR-  ¬  s    
	c         C   s7   |  j  ƒ  |  j r  |  j ƒ  n  t j |  | | ƒ d  S(   N(   Ru   R–   R—   R	   Rm  (   Rt   R,  t   listid(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRm  ²  s    
	c         C   s)   | d k r% t  ƒ  j ƒ  j | ƒ n  d  S(   NRl  (   R   Ro  Rp  (   Rt   RA  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRp  ¸  s    (c   t   __name__t
   __module__Rs   Ru   R„   Rƒ   R    R¸   Rº   R¼   R¾   R    RÐ   R   R   R  R  R9  R÷   R÷  R6  Rø   R7  R8  R9  R:  R<  R?  R]  R[  RY  Rb  Rr  Rs  R&  Rt  Rv  Rx  R)  RŒ  R�  RŽ  R  R  R   Rˆ  R³  R9  R=  R(  R$  R·  Rl  RF  RQ  RS  Rw  R€  R‚  R„  R†  RW  RV  R‡  R‰  RŠ  R‹  RŒ  RŽ  R�  R˜  Rš  R™  RÐ  RÑ  Rd  RÕ  R×  RØ  RÝ  Rß  Rà  RÁ  R¿  RÀ  R½  R¾  R¹  Rº  R‹   R¼  R»  Rò  Rn  RÙ  Ró  R-  Rm  Rp  (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyRq   »   sÀ   					/			¢Lÿ 	‡	ÿ @	$[														ÿ ÿ §	O		5	%	 		/				0	2												>																				6		#		(7   t   __doc__R   R  R¢   Rì  Rà  R|  t   PyQt4R    R   R   R   Ry   RÖ   R   R   R   R…  RX  R   R   R	   Rå   R™   t   surfaceRð  t   ImportErrort   exc_infot   exc_typet	   exc_valuet   exc_tbRU   t   findR×  RØ  t   normpathR  t   fixpermsR‰  RŠ  Rø   R‹  t   stderrt   writet	   tracebackt   print_tbt   exitR   R+   R2   RL   RW   Rp   Rr   Rq   (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidget.pyt   <module>   sJ   "+*		
			+