ó
c›V]c           @   s   d  „  Z  d S(   c            sñ   d d l  m ‰  d d l m } m } d d d „  ƒ  Y‰ |  j ‰ ‡  ‡ ‡ f d †  } |  j ‰ ‡  ‡ ‡ f d †  } |  j ‰ | j ‡ ‡ f d † } |  j	 ‰ | j ‡ ‡ f d	 † } d
 „  } | |  _ | |  _ | |  _ | |  _	 | |  _
 d S(   s¦  
    In PySide, using Python objects as userData in QComboBox causes
    Segmentation faults under certain conditions. Even in cases where it
    doesn't, findData does not work correctly. Likewise, findData also does not
    work correctly with Python objects when using PyQt4. On the other hand,
    PyQt5 deals with this case correctly. We therefore patch QComboBox when
    using PyQt4 and PySide to avoid issues.
    i   (   t   QIcon(   t   Qtt   QObjectt   userDataWrapperc           B   s   e  Z d  Z d „  Z RS(   sÝ   
        This class is used to wrap any userData object. If we don't do this,
        then certain types of objects can cause segmentation faults or issues
        depending on whether/how __getitem__ is defined.
        c         S   s   | |  _  d  S(   N(   t   data(   t   selfR   (    (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   __init__6   s    (   t   __name__t
   __module__t   __doc__R   (    (    (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyR   0   s   c            s‹   t  | ƒ d k s8 t | d ˆ  ƒ rT t  | ƒ d k rT | d  | d } | d <n  d | k rw ˆ | d ƒ | d <n  ˆ |  | | Ž d  S(   Ni   i    i   iÿÿÿÿt   userData(   t   lent
   isinstance(   R   t   argst   kwargs(   R    t   _addItemR   (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   addItem;   s    &c            s‹   t  | ƒ d k s8 t | d ˆ  ƒ rT t  | ƒ d k rT | d  | d } | d <n  d | k rw ˆ | d ƒ | d <n  ˆ |  | | Ž d  S(   Ni   i   i   iÿÿÿÿR
   (   R   R   (   R   R   R   (   R    t   _insertItemR   (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt
   insertItemE   s    &c            s&   ˆ | ƒ } ˆ  |  | | d | ƒd  S(   Nt   role(    (   R   t   indext   valueR   (   t   _setItemDataR   (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   setItemDataO   s    c            s4   ˆ  |  | d | ƒ} t  | ˆ ƒ r0 | j } n  | S(   NR   (   R   R   (   R   R   R   R
   (   t	   _itemDataR   (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   itemDataU   s    c         S   s:   x3 t  |  j ƒ  ƒ D] } |  j | ƒ | k r | Sq Wd S(   Niÿÿÿÿ(   t   ranget   countR   (   R   R   t   i(    (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   findData[   s    N(    (   t   QtGuiR    t   QtCoreR   R   R   R   R   t   UserRoleR   R   (   t	   QComboBoxR   R   R   R   R   R   R   (    (   R    R   R   R   R   R   s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   patch_qcombobox#   s"    
										N(   R"   (    (    (    s4   lib/python2.7/site-packages/qtpy/_patch/qcombobox.pyt   <module>#   t    