ó
ÉÝ{Tc           @   sã   d  Z  d d l m Z m 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 Z d Z d Z d Z d Z d Z d Z d	 e j f d
 „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d S(   sy  
     qtgui/mgTreeView.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009-2011 University of York

     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ÿÿÿÿ(   t   QtCoret   QtGuiNié  iê  ië  iì  ií  t   AbstractMolDatac           B   sñ  e  Z i  Z e d  d d d d g d d ƒ e d <e d  d d d ƒ e d <e d  d	 d d
 ƒ e d
 <e d  d d d ƒ e d <e d  d d d d d d g d d ƒ e d <e d  d d d ƒ e d <e d  d d d d g d d ƒ e d <e d  d d d d d g d d ƒ e d <e d  d d d ƒ e d <d „  Z d i  d „ Z d „  Z d „  Z d „  Z d d  „ Z	 d d! „ Z
 g  d" „ Z d# „  Z d$ „  Z d% „  Z d& „  Z d' „  Z d( d( d) „ Z d/ d( d( d* „ Z d+ „  Z d, „  Z d- „  Z d. „  Z RS(0   t   labelt   Monomerst   treet   rest   atomt   selection_maskt   monomerss   Nucleic acidt   nucleict   Saccharidest
   saccharidet   Peptidet   peptides   Peptide - secondary structuret   chaint   secstrt
   amino_acidt   Solventt   solventt   Solutet   solutes
   Metal ionst   metals   Chain/residue/atomt   allc   
      C   s  t  j j |  ƒ d d  l } | j ƒ  } i  |  _ i  |  _ | |  _ | |  _ |  j	 ƒ  |  _
 |  j d t j j t j |  j j ƒ t j j ƒ |  j j t j d ƒ |  _ |  j d k rÔ |  j j t j d ƒ |  _ n  |  j j t j d ƒ |  _ |  j d k r|  j j t j d ƒ |  _ n  |  j j t j d ƒ |  _ |  j d k rd|  j j t j d ƒ |  _ n  |  j j d ƒ } x— t d | ƒ D]† } |  j j |  j d ƒ t j ƒ  } t j d ƒ } t  j! |  j d | | ƒ } x1 t d | d ƒ D] }	 |  j j |  j d ƒ qìWq†Wd  S(   Niÿÿÿÿi    t
   qt_chn_rowt   udr_res_rowt
   qt_res_rowi   ("   R   t   QStandardItemModelt   __init__t   timet   clockt   lookupt
   groupItemst   molHndt
   MolDataObjt   invisibleRootItemt
   parentItemt   setHeaderDataR    t   Qtt
   Horizontalt   QVariantt
   name_labelt   DisplayRolet   GetUDDHandlet   mmdbt	   UDR_CHAINt   udd_chn_chnt   RegisterUDIntegert   UDR_RESIDUEt   udd_chnt   udd_rest   GetNumberOfChainst   ranget	   PutUDDatat   newPPCResiduet
   pygl_coordt   intat   mmutt   GetResidueTable(
   t   selfR!   R"   R   t   startt   nChnt   ict   resTablet   nRest   ir(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR   B   s4    				1   t    c         K   s¬  d } x6 |  j  j ƒ  D]% \ } } | d | k r | } q q W| d k rO | S| j | ƒ | j d d ƒ } | s½ | j d d ƒ } | j d d ƒ }	 |  j | |	 ƒ } | d k  r½ d Sn  t |  j  ƒ d	 }
 | j d
 |  j j ƒ } t t	 j
 | ƒ |
 ƒ } |  j j | ƒ | j d d d d g ƒ } |  j |
 | | | ƒ |  j j | ƒ | j d d ƒ j ƒ  } | r¨| |  j | <i | d 6| d 6| d 6|	 d 6|  j  |
 <n  |
 S(   Ni    t	   groupNamet	   masterHndR   R   t   parent_selections   /1/iÿÿÿÿi   R   R   R   R   R   (   R   t   itemst   updatet   gett   getAtomSelectiont   lenR"   R)   t   MGStandardItemR    t   QStringR$   t	   appendRowt   addChildrenR!   t   DeleteSelectiont   childt   indexR    (   R;   RC   t
   definitiont   keywordst   datatypet   keyt   valueRD   R   RE   t	   groupCodeR   t   itemR   RP   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt	   loadGroupj   s<       c         C   s   |  j  j ƒ  S(   N(   R    t   keys(   R;   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt	   getGroups”   s    c         C   sG   d } x6 |  j  j ƒ  D]% \ } } | d | k r | } q q W| d S(   Ni    RC   i   (   R   RF   (   R;   t   groupt   rowRU   RV   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   getGroupRow˜   s
     c         C   s£   |  j  j d | ƒ } | d s/ | d d k r< d G| GHd S| d } |  j j | t j | t j ƒ |  j  j | ƒ } | d k r› |  j j | d ƒ d S| Sd  S(   Nt   commandi    i   s   ERROR selecting iÿÿÿÿ(	   R"   t   parse_selectionR!   t   SelectR,   t
   STYPE_ATOMt   SKEY_ANDt   nAtomsRO   (   R;   R   RE   t   rvt   atmHndRd   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyRI   Ÿ   s    	
i    c   %      C   sD  t  j ƒ  } t | ƒ d k rF | d d k s4 | rF |  j j ƒ  } n d } | d d k r|  j j ƒ  } |  j j | t j | t j ƒ t j	 ƒ  }	 t
 j |  j | | ƒ }	 | j ƒ  }
 xFt d |
 ƒ D]5} t j |	 | ƒ } |  j | ƒ } y- t | j d ƒ ƒ } d t | ƒ d } Wn n Xt t j | ƒ t ƒ } | j | ƒ | j |  j | d | j ƒ  ƒ | d k rÊ |  j j | t j | t j ƒ |  j j | t j d | j ƒ  t j d t j d d d d d t j ƒ |  j | | | | d | ƒ qÊ qÊ W|  j j  | ƒ n  | d d	 k rù|  j j ƒ  } |  j j | t j! | t j ƒ t j" ƒ  } t
 j# |  j | | ƒ } | j ƒ  } | d
 d k r�t$ } n t% } x@t d | ƒ D]/} t j& | | ƒ } |  j' | ƒ } t t j | ƒ | ƒ } | j | ƒ | j |  j( | j ƒ  ƒ | j |  j) | d | j ƒ  ƒ | d k r³|  j j | t j | t j ƒ | j* ƒ  } | j+ ƒ  } |  j j | t j | j, ƒ  | j- ƒ  | d | d d d d d t j ƒ |  j | | | | d | ƒ q³q³W|  j j  | ƒ n(| d d k rö|  j j ƒ  } |  j j | t j | t j ƒ t j. ƒ  } t
 j/ |  j | | ƒ } | j ƒ  } xy t d | ƒ D]h } t j0 | | ƒ } |  j1 | ƒ } t t j | ƒ t2 ƒ } | j | ƒ |  j3 t j4 d ƒ | | ƒ qwW|  j j  | ƒ n+| d d k r!d
 d  l5 } |  j j ƒ  } |  j j | t j! | t j ƒ t j" ƒ  } t
 j# |  j | | ƒ } | j ƒ  } | d k r!d d d d d d d g } d d d g }  d }! | t j& | d ƒ j6 }" d }# xP|# | k r|# | k  r| t j& | |# ƒ j6 }$ n d }$ |$ |" k r|" d k rì|  j7 t j& | |! ƒ t j& | |# d ƒ ƒ } t t j |  |" d | ƒ t8 ƒ } | j | ƒ | d k rì|  j j | t j | t j ƒ |  j j | t j | t j ƒ |  j | | | | d | ƒ qìn  | j9 |# ƒ }! | j9 |$ ƒ }" n  |# d }# qÎWq!n  | d k r@|  j j  | ƒ n  d  S(   Ni   R   i    R   t   /s   //i
   t   *R   iÿÿÿÿt	   addedAtomR   i   t   Lt   St   Hiç  t    (:   R7   t   intpRJ   R!   t   NewSelectionRa   R,   t   STYPE_CHAINt   SKEY_NEWt   newPPCChainR9   t   GetChainSelIndexRV   R4   t
   getPCChaint	   chainNamet   intt   rstript   strRK   R    RL   t	   CHAINTYPERM   R5   R.   R]   Rb   t
   GetChainIDt   ANY_RESRc   RN   RO   t   STYPE_RESIDUER6   t   GetResidueSelIndext	   RESTYPE_At   RESTYPEt   getPCResiduet   residueNameR2   R1   t	   GetSeqNumt
   GetInsCodet   GetModelNumt
   GetChainIdt
   newPPCAtomt   GetAtomSelIndext	   getPCAtomt   atomNamet   ATOMTYPEt   emitt   SIGNALt   copyt   SSEt   resRangeNamet
   SECSTRTYPEt   deepcopy(%   R;   RW   t   parent_itemRD   R   t	   loadAtomst	   selindexpt   nxtHndt   chnHndt   chnSelR=   R>   t   pChnt   namet   dumRX   t   resHndt   resSelR@   RT   RA   t   pRest   seqNumt   insCodeRf   t   atmSelt   nAtmt   iat   pAtmR�   t   selRest   maskt   outputt   first_it	   first_sect   it   sec(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyRN   ³   sº    (!F$	!F$ .$# c   %      C   sÂ  d d l  } | s2 | r" d d g Sd d d g Sn  | r; n |  j j ƒ  } g  } g  } d } xñ| t | ƒ k  rOd } |  j | | | ƒ \ }	 }
 } } | | } t | ƒ d k s» | rÄ d } n7t | ƒ d k r|	 t k  r| j d d d |  j |	 j d ƒ g ƒ nít	 t
 g j |	 ƒ rÁ| j ƒ  | j ƒ  f \ } } \ } } | d } | d d d !} t j | d ƒ d } | j | d | ƒ } t } t | ƒ d k rÃ| d d	 k rÃt } n  x” | rY| j ƒ  rY| j | ƒ rY| d } t | j | | ƒ j ƒ  j ƒ  ƒ } | j | j | | ƒ ƒ } t j ƒ  | | <| j | d | ƒ } qÆW| | k r¥| j d
 d | ƒ d | j d
 d t j | d ƒ d ƒ } n  | j d | | | g ƒ n:|	 t k r8i  } | d } | j d ƒ r| j d ƒ d | | j d ƒ d <n
 | | d <| d d d !} t j | d ƒ d } t j | d ƒ d } d } | j ƒ  j | d ƒ } xZ| j ƒ  rÔ| j | ƒ r¯| j | ƒ } | | k r¯t | | j ƒ  j ƒ  ƒ } | j d ƒ rQ| j d ƒ d } | j | ƒ r7| | d t j t j | d ƒ d d ƒ d | | <q™| j d ƒ d | | <nH d } | j | ƒ r�| | d t j | d ƒ d | | <n
 | | | <t j ƒ  | | <q¯n  | d } | j ƒ  j | d ƒ } q{Wx#| j ƒ  D]O \ } } | r| j d | | | d | g ƒ qâ| j d | | | g ƒ qâWnÃ|	 t k r¥| d d } | d d d !} t j t j | d ƒ d d ƒ d } | j d | | | g ƒ nV| d } t  |  j d ƒ rg|  j j! rgx+|  j" j ƒ  D]c \ } } | j d ƒ rÝ| d | d k rÝ| j d | d d !d d | d | d g ƒ PqÝqÝW| j d | d d !d | g ƒ n” g  |  j" j ƒ  D]5 \ }  }! |! j d ƒ rw|! d | d k rw|  ^ qw}" t |" ƒ d k rû| j d | d d !d d |" d d | d g ƒ n  | rB| rB|  j j# t$ | ƒ t$ t% j& ƒ t | ƒ t$ t% j' ƒ ƒ n  | d } q_ W| r˜| j( ƒ  | d d }# x- | d D] }$ |# d |$ d }# qyWn d }# | r®d |# g Sd |  j | g Sd S(   s¥   
    Convert a list of selected items (QModelIndex) to an mg selelction
    command or and MMDB selection handle
    Input:
    Index_list - list of QModelIndex
    iÿÿÿÿNi    RB   i   R   iþÿÿÿRg   R   s   \(.*\)t   -i   t   :iýÿÿÿt   ,t   duplicateChainIDSR   t   {s    and t   }i   s    or ()   t   reR!   Ro   RJ   t   interpretIndexRŠ   t   appendR   RH   R   R~   t   countR]   t   columnt   stringt   splitt   siblingt   Truet   Falset   isValidRx   t   datat   toStringRQ   R    t   QModelIndext   subt   parentRP   t   has_keyRF   R�   t   hasattrR®   t	   compositeRa   Rv   R,   Rb   t   SKEY_ORt   sort(%   R;   t
   Index_listt   returnCommandR±   t   selHndt   selected_listt   top_selected_listt   iiR™   RT   R\   t   stackt   parent_selectedRQ   RA   R>   R]   Rµ   t   chn_sortt   res_sortt   sibling_indext   doSiblingCheckt   last_res_namet   jjt   altloc_listst   ttt	   sib_indext   atm_namet   altRU   RV   t   valt   cnkeyt   cnvalt   compnamet	   comstringRX   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   interpretTreeSelection6  sÀ    	
"
	,(
"	$
$?
'
9)

$ &
#0#K7:
 
c         C   sé   | j  ƒ  s d d g  d f Sg  } t |  j | ƒ j ƒ  ƒ } d } x‰ | j  ƒ  rÎ | j t | j ƒ  j ƒ  ƒ ƒ | j ƒ  j  ƒ  r¤ | j	 | j ƒ  ƒ r¿ d } q¿ n t |  j | ƒ j ƒ  ƒ } | j ƒ  } qF W| j
 ƒ  | | | | f S(   sà  
    Return details about a selected item from tree
    Input:
    index : QModelIndex
    Index_list=[] : List of indices other selected items
    Output datatype,group,stack,parent_selected
    datatype : int MGStandardItem.datatype() of the item
    group: int MGStandardItem.datatype() of the top level item
    stack: list of QStandardItem.data() for item, parent, grand-parent - in reverse order
    parent_selected: true if Index_list contains an ancestor of index    
    i    i   (   R»   Rv   t   itemFromIndexRT   R³   Rx   R¼   R½   RÀ   R´   t   reverse(   R;   RQ   RÆ   RÌ   RT   RÍ   R\   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR²   Ò  s      
c         C   s(   | | k r d S| | k  r  d Sd Sd  S(   Ni    iÿÿÿÿi   (    (   R;   t   i1t   i2(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   QModelIndexSortð  s
    c         C   s   |  j  S(   N(   R"   (   R;   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   MolDataø  s    c         C   sP   | j  ƒ  s% | j d d ƒ j  ƒ  r) d S|  j | ƒ j ƒ  t k rH d Sd Sd S(   si   
    Reimplement QStandardItemModel.canFetchMore() to return true when
    extra atoms can be loaded
    i    i   N(   R»   RP   Rß   RT   R~   (   R;   RQ   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   canFetchMoreü  s
    % c   	      C   s  | j  ƒ  s% | j d d ƒ j  ƒ  r) d S|  j | ƒ } | j ƒ  t k r|  j | ƒ \ } } } } t | j t j	 j
 ƒ j ƒ  ƒ } | d d !d k r¦ d | } n  |  j |  j | d | ƒ } | d k r|  j | | | d g d ƒ |  j j | ƒ |  j t j d	 ƒ | ƒ qn  d S(
   sF   
    Reimplement QStandardItemModel.fetchMore() to load atom data
    i    Ni   s   // /s   /1/R   R   i   t   moreFetched(   R»   RP   Rß   RT   R~   R²   Rx   R¼   R    R&   R*   R½   RI   R   RN   R!   RO   R‹   RŒ   (	   R;   RQ   RX   RT   RW   RÌ   RÍ   RE   Rf   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt	   fetchMore  s    % !c         C   sR   | j  ƒ  s d St |  j | ƒ j ƒ  ƒ } | t k r; d St j j |  | ƒ Sd S(   su   
    Reimplement QStandardItemModel.hasChildren() to return true
    for residues which could have atom children
    i   N(   R»   Rv   Rß   RT   R~   R   R   t   hasChildren(   R;   RQ   RT   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyRè   $  s     i   c         C   s^   t  j | j ƒ  ƒ } | j ƒ  } | r8 | d | } n  | rV |  j | | ƒ d | S| Sd  S(   NR¬   Rg   (   R¶   t   stript   GetAtomNamet	   GetAltLocR�   (   R;   t   pAtomt   inclRest   inclResNameR™   RØ   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR‰   4  s     c         C   s‰   | r( |  j  | ƒ t | j ƒ  ƒ } n t | j ƒ  ƒ } t | j ƒ  ƒ } | rc | d | } n  | sm | S| d | j ƒ  d } | S(   Nt   .t   (t   )(   Ru   Rx   R‚   Rƒ   t
   GetResName(   R;   Rì   Rî   t   inclChainNamet   resnamet   inscode(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR�   ?  s    "  c         C   s6   t  | j ƒ  ƒ } | s% | d k r. d } n  | d S(   NRm   s   // Rg   (   Rx   Rz   (   R;   Rì   t   chnid(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyRu   L  s     	c         C   s6   |  j  | d d ƒd |  j  | d d d d ƒ} | S(   NRî   i    R«   Ró   (   R�   (   R;   t   pRes1t   pRes2R™   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR�   S  s    c         C   sg  t  j d ƒ } t  j d ƒ } t j | | ƒ } | j |  j | ƒ } | j |  j | ƒ } | d } | d d } | d d }	 | d k r� d  S| |  j k sÌ d |  j | k sÌ |  j | d |  j	 k rÐ d  S|  j	 |  j | d }
 |  j | d d d k r|
 j
 | d ƒ j ƒ  S|  j | d d d !d d g k r_|
 j
 |	 d ƒ j
 | d ƒ j ƒ  Sd  Sd  S(	   Ni   i    i
   RC   R   R   i   R   (   R7   R8   R,   R€   t	   GetUDDataR2   R1   t   NoneR   R    RP   RQ   (   R;   R¤   RA   t   chn_rowt   res_rowt   pcresRe   t   resRowRW   t   chnRowt	   groupItem(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   getModelIndex]  s$    
 < $"c   	      C   s¼   t  j d ƒ } t j | | ƒ } | j |  j | ƒ } | d d } | d d } | d k rb d  S|  j |  j | d } |  j | d d d !d d g k r´ | j	 | d ƒ j
 ƒ  Sd  Sd  S(	   Ni   i    i
   RC   R   i   R   R   (   R7   R8   R,   Rt   Rù   R.   Rú   R    R   RP   RQ   (	   R;   t   selChnR>   Rû   t   pcchnRe   RW   Rÿ   R   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   getChainIndexu  s     $N(   t   __name__t
   __module__RÃ   t   dictR   RY   R[   R^   RI   RN   RÞ   R²   Rã   Rä   Rå   Rç   Rè   R‰   Rú   R�   Ru   R�   R  R  (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR   "   sT   	(*			ƒœ							
	t
   mgTreeViewc           B   sn   e  Z d d d  „ Z d „  Z d „  Z g  d „ Z d d „ Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   c         C   s  t  t |  ƒ j | ƒ |  j ƒ  j d ƒ |  j t j j ƒ |  j	 t j j
 ƒ |  j | ƒ |  j t j ƒ  d ƒ x3 | j j ƒ  D]" \ } } |  j | j ƒ  d ƒ q‚ Wd |  _ d |  _ |  j |  j ƒ  t j d ƒ |  j ƒ |  j |  j ƒ  t j d ƒ |  j ƒ d  S(   Ni    i   iÿÿÿÿRB   Ri   s/   selectionChanged(QItemSelection,QItemSelection)(   t   superR  R   t   headert
   setVisiblet   setSelectionModeR   t   QAbstractItemViewt   MultiSelectiont   setEditTriggerst   NoEditTriggerst   setModelt   setExpandedR    R¾   R    RF   RQ   t   loadedAtomSelHndt   lastSelectiont   connectt   modelRŒ   t   handleAddedAtomt   selectionModelt   changed(   R;   RÀ   t   abstractModelR\   RX   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR   Œ  s    		%c         C   s/   |  j  d k r+ |  j ƒ  j j |  j  ƒ n  d  S(   Ni    (   R  R  R!   RO   (   R;   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   __del__¡  s    c         C   s   |  j  t j d ƒ ƒ d  S(   NR  (   R‹   R    RŒ   (   R;   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR  §  s    c         C   sú   |  j  ƒ  j t ƒ x. | D]& } |  j ƒ  j | d t j | ƒq Wxœ |  j ƒ  j ƒ  D]ˆ } | j | ƒ sW |  j	 |  j ƒ  j
 | j ƒ  ƒ |  j ƒ  j | ƒ } | d k rß |  j | |  j ƒ  j
 | j ƒ  j ƒ  d ƒ qß qW qW W|  j  ƒ  j t ƒ d  S(   NRR   i    i   (   R  t   blockSignalsR¹   R  RY   R   RÃ   R[   R´   t   collapseR    RQ   R^   t   setRowHiddenRÀ   Rº   (   R;   t   groupsR\   R]   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt
   loadGroups­  s    $ 6R   c         C   s§  d d  l  } d } |  j ƒ  j ƒ  } |  j ƒ  j t ƒ | d k rŒ x= | D]5 } |  j ƒ  j |  j ƒ  j | j ƒ  t	 j
 j ƒ qJ Wd } n| j | ƒ rÓ |  j ƒ  j |  j ƒ  j | j ƒ  t	 j
 j ƒ d } n½ | j | d ƒ r�d } x; | j | d ƒ D]' } | j | j | ƒ ƒ sþ d } qþ qþ W| r�xR | j | d ƒ D]> } |  j ƒ  j |  j ƒ  j | j | ƒ j ƒ  t	 j
 j ƒ qBWd } q�n  |  j ƒ  j t ƒ | S(   Niÿÿÿÿi   R   i    s    or (   R¶   R  R[   R  R  R¹   t   selectR    RQ   R   t   QItemSelectionModelRa   R´   t   findR·   Ré   Rº   (   R;   R_   R¶   Re   t	   groupListR\   t   okRX   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   setGroupSelection¾  s2    "	"	 $c         C   s¿  |  j  ƒ  j t ƒ |  j ƒ  j } t j ƒ  } t j ƒ  } t j ƒ  } t	 j
 ƒ  } |  j d k  rs | j ƒ  |  _ n  | j |  j t j | t j ƒ | j |  j |  j ƒ  j j d t j d t j d d d d d t j ƒ t j | |  j | ƒ } | j ƒ  } | d k r|  j  ƒ  j t ƒ d S| j ƒ  } | j | d d t j d t j d d d d d t j ƒ | j ƒ  }	 | j |	 t j | t j ƒ | j ƒ  }
 | j |
 t j |	 t j ƒ | j ƒ  } | j ƒ  } | j ƒ  } | j | t j | t j ƒ | j | t j |  j t j ƒ | j | t j | t j ƒ | j | t j |
 t j ƒ t j ƒ  } t j | | | ƒ } | j ƒ  } xT t d | ƒ D]C } |  j ƒ  j | | ƒ } | r†|  j  ƒ  j | t j  j ƒ q†q†W| j | t j | t j ƒ | j | t j |  j t j ƒ | j | t j | t j ƒ | j | t j |	 t j ƒ | j | t j | t j! ƒ t j" | | | ƒ } | j ƒ  } xT t d | ƒ D]C } |  j ƒ  j# | | ƒ } | r�|  j  ƒ  j | t j  j ƒ q�q�W| j ƒ  } | j | t j |  j t j ƒ | j | t j | t j! ƒ t j" | | | ƒ } | j ƒ  } | d k r4t j ƒ  } t j
 ƒ  } xê t d | ƒ D]½ } |  j ƒ  j# | | ƒ } | rp|  j$ | ƒ rpt j% t j& | | ƒ | ƒ } xi t d | j ƒ  ƒ D]O } t j' | | ƒ j( |  j ƒ r×|  j  ƒ  j | j) | d ƒ t j  j ƒ q×q×WqpqpWn | j* |  j ƒ d |  _ | j* | ƒ | j* |	 ƒ | j* | ƒ | j* | ƒ | j* | ƒ | j* | ƒ | j* |
 ƒ |  j  ƒ  j t ƒ d  S(   Ni    Rh   i   iÿÿÿÿ(+   R  R  R¹   R  R!   R,   R†   R6   Rr   R7   Rn   R  Ro   Ra   Rb   Rq   t   SelectAtomsR"   t   first_nmr_modelR{   Rc   R9   R‡   RV   Rº   R|   Rp   t   SKEY_XORR4   R  R!  R   R"  t   SKEY_CLRR}   R  t
   isExpandedt   GetAtomTableR€   Rˆ   t   isInSelectionRP   RO   (   R;   RÈ   R!   t   selAtomsR¤   t	   selChainsR”   t   nselAtomt
   allAtomHndt	   allResHndt	   allChnHndt
   wrkAtomHndt	   wrkResHndt	   wrkChnHndR  t   nSelChnR>   RQ   t   nSelResRA   t
   someResHndt	   atomTablet   nAtomR¢   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   loadMMDBSelectionÞ  s”    ++##9	c         C   s;   |  j  ƒ  } |  j ƒ  j | ƒ } | d r/ d S| d Sd  S(   Ni    iÿÿÿÿi   (   t   selectedIndexesR  RÞ   (   R;   t   selectedt   ret(    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   getMMDBSelectioni  s
    
c         C   s+   |  j  ƒ  } |  j ƒ  j | d d ƒ} | S(   NRÇ   i   (   R=  R  RÞ   (   R;   R>  R?  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   getSelectionCommandu  s    c         C   sT   |  j  ƒ  j | ƒ } | j ƒ  t k s4 | j ƒ  r8 d  Sd } | j | d ƒ } d  S(   Ni    (   R  Rß   RT   R~   Rè   RP   (   R;   RQ   RX   RË   RP   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   handleExpanded}  s
     c         C   sS   |  j  d k rO | j |  j  ƒ rO |  j ƒ  j |  j ƒ  j | ƒ t j j ƒ n  d  S(   Ni    (	   R  R-  R  R!  R  t   indexFromItemR   R"  Ra   (   R;   RX   Rì   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR  ‡  s    N(   R  R  Rú   R   R  R  R   R&  R<  R@  RA  RB  R  (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR  ‰  s   		 	‹			
RK   c           B   s   e  Z d  d „ Z d „  Z RS(   ié  c         C   s#   t  t |  ƒ j | ƒ | |  _ d  S(   N(   R	  RK   R   t   mgtype(   R;   t   textRD  (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyR   œ  s    c         C   s   |  j  S(   N(   RD  (   R;   (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyRT   ¡  s    (   R  R  R   RT   (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyRK   ™  s   (   t   __doc__t   PyQt4R    R   R7   t   mmdb2R,   t   global_definitionst   guiUtilst   sysR¶   R9   RŠ   R   R~   Ry   R�   t   ALLTYPER   R   t	   QTreeViewR  t   QStandardItemRK   (    (    (    s=   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/mgTreeView.pyt   <module>   s$   ÿ ÿ iÿ 