B
    b_T2                 @   s  d Z dZddlZddlZddlmZ ddlmZ ddlmZ ddlZddlm	Z	 ddl
Z
d	d
 ee
D ZdZdd
 ee
D Zyeedj W n ek
r   Y nX G dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )zdFilling is the gui tree control through which a user can navigate
the local namespace or any object.z(Patrick K. O'Brien <pobrien@orbtech.com>    N   )
dispatcher)
editwindow)images)
introspectc             C   s(   g | ] }| d s|dkrtt|qS )_)	ClassTypeInstanceType
ModuleType)
startswithgetattrtypes).0t r   ,lib/python3.7/site-packages/wx/py/filling.py
<listcomp>   s    
r   )BuiltinFunctionTypeBuiltinMethodTyper   FunctionTypeGeneratorTyper	   
LambdaType
MethodTyper
   ZUnboundMethodTypezmethod-wrapperc             C   s(   g | ] }| d s|tkrtt|qS )r   )r   DOCTYPESr   r   )r   r   r   r   r   r      s     c               @   s   e Zd ZdZdZdejejejddddfddZ	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd!ddZdd Zdd  ZdS )"FillingTreezFillingTree based on TreeCtrl.zFilling TreeNFc
             C   s   t j| ||||| || _ddl}
|dkr8|
j}d| _||
jkrN|dkrNd}|sVd}| |dd| | _| _| 	| j| 
| | jt j| j|  d | jt j| j|  d | jt j| j|  d | jt j| j|  d |	stj| jdd	 dS )
zCreate FillingTree instance.r   NTzlocals()ZIngredientsr   )idzInterpreter.push)receiversignal)wxTreeCtrl__init__rootIsNamespace__main____dict__ZAddRootitemrootSetItemHasChildrenobjHasChildrenBindZEVT_TREE_ITEM_EXPANDINGOnItemExpandingZGetIdZEVT_TREE_ITEM_COLLAPSEDOnItemCollapsedZEVT_TREE_SEL_CHANGEDOnSelChangedZEVT_TREE_ITEM_ACTIVATEDOnItemActivatedr   connectpush)selfparentr   possizestyle
rootObject	rootLabelr#   staticr$   r   r   r   r"   +   s$    zFillingTree.__init__c             C   s$   | st j| jdd dS |   dS )z%Receiver for Interpreter.push signal.zInterpreter.push)r   r   N)r   
disconnectr0   display)r1   commandmorer   r   r   r0   C   s    zFillingTree.pushc             C   s,   t  }| }| |rdS | | dS )zAdd children to the item.N)r    
BusyCursorGetItem
IsExpandedaddChildren)r1   eventbusyr&   r   r   r   r+   J   s
    
zFillingTree.OnItemExpandingc             C   s   t  }| }dS )z"Remove all children from the item.N)r    r=   r>   )r1   rA   rB   r&   r   r   r   r,   S   s    zFillingTree.OnItemCollapsedc             C   s   t  }| | _|   dS )z#Display information about the item.N)r    r=   r>   r&   r:   )r1   rA   rB   r   r   r   r-   [   s    
zFillingTree.OnSelChangedc             C   s:   |  }| |}| |}t| d||dd}|  dS )zLaunch a DirFrame.)iX  d   F)r2   r4   r6   r7   r#   N)r>   getFullNameGetItemDataFillingFrameShow)r1   rA   r&   textobjframer   r   r   r.   a   s    


zFillingTree.OnItemActivatedc             C   s   |  |rdS dS dS )z#Return true if object has children.TFN)objGetChildren)r1   rI   r   r   r   r)   j   s    
zFillingTree.objHasChildrenc          	   C   s   t  }t|}t|ts2dt|kr6t|dr6|S i }t|tt	fr|x2t
t|D ]"}dt| d }|| ||< qVW |tkrx:t|D ],}yt||||< W q tk
r   Y qX qW |S )z8Return dictionary with attributes or contents of object.BTreeskeys[])r    r=   type
isinstancedictsix	text_typehasattrlisttuplerangelenCOMMONTYPESr   ZgetAttributeNamesr   	Exception)r1   rI   rB   otypednkeyr   r   r   rK   q   s$    


zFillingTree.objGetChildrenc       	      C   s   |  | | |}| |}|s&d S t|dd d}xx|D ]p}t|}t|trt|tjr|| j	ksz|| j	kr| j
st|}|| }| j|||d}| || | q<W d S )Nc             S   s   t |  S )N)rS   rT   lower)xr   r   r   <lambda>       z)FillingTree.addChildren.<locals>.<lambda>)r_   )r2   rH   data)ZDeleteChildrenrE   rK   sortedrS   rT   rQ   rR   string_typesr'   r#   reprZ
AppendItemr(   r)   )	r1   r&   rI   ZchildrenrM   r_   ZitemtextZchildbranchr   r   r   r@      s     






zFillingTree.addChildrenc             C   s  | j }|sd S | |r"| | | d | |}tjdkrL|d krLd S | || | t	|}d}|| 
|7 }|dt| 7 }yt|}W n tk
r   d}Y nX t|tjrt|}|d| 7 }|tkry|dt|  d 7 }W n tk
r   Y nX t|tjrRy|dt|j 7 }W n tk
rN   Y nX n.y|dt| 7 }W n tk
r~   Y nX | | d S )	Nr   Z	__WXMSW__z

Type: z	

Value: z

Docstring:

"""z"""z

Class Definition:

z

Source Code:

)r&   r?   r@   setTextrE   r    ZPlatformr(   r)   rP   rD   rS   rT   r[   rQ   rf   rg   SIMPLETYPESinspectZgetdocstripZclass_typesZ	getsource	__class__)r1   r&   rI   r\   rH   valuer   r   r   r:      sP    






zFillingTree.displayr   c             C   s   |  |}d}d}|| jkr0| |}| |}t|tsVdtt|krt	|dr|| jkrj|| jksz|| jkr| j
sd| d }|r|d dkr||7 }n|d| 7 }|| jkr|| jks|| jkr| j
s| j||d}|S )	z,Return a syntactically proper name for item.NrL   rM   rN   rO   r   .)partial)ZGetItemTextr'   ZGetItemParentrE   rQ   rR   rS   rT   rP   rU   r#   rD   )r1   r&   rp   namer2   rI   r   r   r   rD      s(    






zFillingTree.getFullNamec             C   s   t | dS )z0Display information about the current selection.N)print)r1   rH   r   r   r   ri      s    zFillingTree.setTextc             C   s   t | dS )zDisplay status information.N)rr   )r1   rH   r   r   r   setStatusText   s    zFillingTree.setStatusText)r   )__name__
__module____qualname____doc__rq   r    DefaultPositionDefaultSizeZTR_DEFAULT_STYLEr"   r0   r+   r,   r-   r.   r)   rK   r@   r:   rD   ri   rs   r   r   r   r   r   &   s$   		+
r   c               @   s>   e Zd ZdZdZdejejejdfddZ	dd Z
d	d
 ZdS )FillingTextz$FillingText based on StyledTextCtrl.zFilling Textr   Fc             C   sN   t j| ||||| | d | d | dd |sJtj| jdd dS )zCreate FillingText instance.Tr   r   zInterpreter.push)r   r   N)	r   
EditWindowr"   SetReadOnlyZSetWrapModeZSetMarginWidthr   r/   r0   )r1   r2   r   r3   r4   r5   r8   r   r   r   r"      s    

zFillingText.__init__c             C   s$   | st j| jdd dS |   dS )z%Receiver for Interpreter.push signal.zInterpreter.push)r   r   N)r   r9   r0   ZRefresh)r1   r;   r<   r   r   r   r0     s    zFillingText.pushc             O   s,   |  d tjj| f|| |  d d S )NFT)r|   r   r{   SetText)r1   argskwdsr   r   r   r}     s    
zFillingText.SetTextN)rt   ru   rv   rw   rq   r    rx   ry   ZCLIP_CHILDRENr"   r0   r}   r   r   r   r   rz      s   
rz   c            	   @   sT   e Zd ZdZd Zdejejejej	B dddddf	ddZ
dd	 Zd
d Zdd ZdS )Fillingz"Filling based on wxSplitterWindow.r   zFilling WindowNFc          	   C   s   t j| |||||| t| |||	|
d| _t| |
d| _t d| j| j| jd | 	d | jj
| j_| j| jj | j  | t j| j dS )zCreate a Filling instance.)r2   r6   r7   r#   r8   )r2   r8         r   N)r    SplitterWindowr"   r   treerz   rH   	CallLaterSplitVerticallyZSetMinimumPaneSizer}   ri   Z
SelectItemr'   r:   r*   ZEVT_SPLITTER_SASH_POS_CHANGED	OnChanged)r1   r2   r   r3   r4   r5   rq   r6   r7   r#   r8   r   r   r   r"     s    


zFilling.__init__c             C   s   d S )Nr   )r1   rA   r   r   r   r   2  s    zFilling.OnChangedc             C   sX   | dd}|  s$| | j| j td| j| | dd}|dkrT| j| d S )NzSash/FillingPosr      zView/Zoom/Fillingi)	ZReadIntZIsSplitr   r   rH   r    r   ZSetSashPositionZSetZoom)r1   configr3   Zzoomr   r   r   LoadSettings8  s    zFilling.LoadSettingsc             C   s&   | d|   | d| j  d S )NzSash/FillingPoszView/Zoom/Filling)ZWriteIntZGetSashPositionrH   ZGetZoom)r1   r   r   r   r   SaveSettingsA  s    zFilling.SaveSettings)rt   ru   rv   rw   rq   r    rx   ry   ZSP_3DZSP_LIVE_UPDATEr"   r   r   r   r   r   r   r   r     s   	r   c            
   @   s6   e Zd ZdZdZdddejdejddddf
dd	ZdS )
rF   z.Frame containing the namespace tree component.zFilling FrameNr   Z	PyFilling)iX  i  Fc          	   C   s`   t j| |||||| d}|   | | | t  t| |||	|
d| _	| j| j	j
_dS )zCreate FillingFrame instance.z,PyFilling - The Tastiest Namespace Inspector)r2   r6   r7   r#   r8   N)r    Framer"   ZCreateStatusBarZSetStatusTextZSetIconr   Z	getPyIconr   Zfillingr   rs   )r1   r2   r   titler3   r4   r5   r6   r7   r#   r8   Zintror   r   r   r"   L  s    

zFillingFrame.__init__)	rt   ru   rv   rw   rq   r    rx   ZDEFAULT_FRAME_STYLEr"   r   r   r   r   rF   G  s   rF   c               @   s   e Zd ZdZdd ZdS )Appz!PyFilling standalone application.c             C   s$   t  | _| jd | | j dS )NT)rF   ZfillingFramerG   ZSetTopWindow)r1   r   r   r   OnInita  s    z
App.OnInitN)rt   ru   rv   rw   r   r   r   r   r   r   ^  s   r   )rw   
__author__r    rS   r   r   r   r   rk   r   r   dirrZ   r   rj   appendrP   __repr__AttributeErrorr!   r   r{   rz   r   r   r   rF   r   r   r   r   r   <module>   s,    P4