
    'j%                        d dl mZ d dlmZmZmZ d dlZd dlmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZ dd	lmZmZmZ d
ZdZdZdZdZd Z G d dej                  Z ddZ!ddZ"dS )    )annotations)IteratorIterableOptionalN)	QtWidgetsQtGuiQActionQMessageBoxQFileDialogQtQModelIndex)Drawing)Body)DXFStructureError   )AcisDataBinaryAcisDataTextAcisDatazACIS Structure Browseri   i   g?
monospacedc                     t          j        t                    } |                     t           j        j                   | S N)r   QFontFONT_FAMILYsetStyleHint	Monospace)fonts    Z/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/acisbrowser/browser.py	make_fontr      s/    ;{##Dek+,,,K    c                       e Zd Z	 	 d*d+ fdZd Zd Zd Zd	 Zd
 Zdddd,dZ	d Z
d Zd-dZd.dZd/dZd Zd Zd Zd0dZd-dZd1d!Zd2d$Zd2d%Zd3d'Zd4d)Z xZS )5AcisStructureBrowser filenamestrhandlec                   t                                                       d | _        g | _        t	                      | _        |                                 | _        |                                 | _	        t          j        |           | _        |                                  |                                  |r|                     |           n|                     t"                     |                     | j                   |                     |                                            |                     t,          t.                     |                                  |r	 t3          |d           |                     |          s1d| d}| j                            |           t9          |           d S d S # t:          $ r3 d| d}| j                            |           t9          |           Y d S w xY wd S )N   zHandle 'z' not found.z"Given handle is not a hex value: '')super__init__docacis_entitiesr   current_acis_entitymake_entity_selectorentity_selectormake_content_vieweracis_content_viewerr   
QStatusBar	statusbarsetup_actions
setup_menuload_dxfsetWindowTitleAPP_NAMEsetStatusBarsetCentralWidgetmake_central_widgetresizeBROWSER_WIDTHBROWSER_HEIGHTconnect_slotsintgoto_handleshowMessageprint
ValueError)selfr#   r%   msg	__class__s       r   r*   zAcisStructureBrowser.__init__#   s   
 	&*-/#+:: #88::#'#;#;#=#= "-d33 	*MM(####)))$.)))d6688999M>222 	
FB ''// 9V999CN..s333#JJJJJ     D6DDD**3///c





	 	s    F8 89G54G5c                *    t          j        |           S r   )r   QListWidgetrE   s    r   r.   z)AcisStructureBrowser.make_entity_selectorH   s    $T***r   c                    t          j        |           }|                    d           |                    t           j        j                   |S )NT)r   QPlainTextEditsetReadOnlysetLineWrapModeNoWrap)rE   viewers     r   r0   z(AcisStructureBrowser.make_content_viewerK   sE    )$//4   y7>???r   c                |   t          j        t          j                  }|                    | j                   |                    | j                   t          t          t          z            }t          |z
  }|
                    ||g           |                    dd           |                    dd           |S )Nr   Fr   )r   	QSplitterr   
Horizontal	addWidgetr/   r1   r@   r=   SELECTOR_WIDTH_FACTORsetSizessetCollapsible)rE   	containerselector_widthentity_view_widths       r   r;   z(AcisStructureBrowser.make_central_widgetQ   s    '66	D0111D4555]-BBCC)N:N,=>???  E***  E***r   c                    | j         j                            | j                   | j         j                            | j                   d S r   )r/   clickedconnectacis_entity_activated	activatedrJ   s    r   r?   z"AcisStructureBrowser.connect_slots\   sB    $,,T-GHHH&..t/IJJJJJr   c                Z   |                      d| j        d          | _        |                      d| j        d          | _        |                      d| j        d          | _        |                      d| j        d	          | _        |                      d
| j	        d          | _
        d S )Nz&Open DXF File...zCtrl+O)shortcutzReload DXF FilezCtrl+Rz&Export Current Entity View...zCtrl+Ez&Export Raw SAT/SAB Data...zCtrl+Wz&QuitzCtrl+Q)make_actionopen_dxf_open_action
reload_dxf_reload_actionexport_entity_export_entity_actionexport_raw_entity_export_raw_data_actionclose_quit_actionrJ   s    r   r4   z"AcisStructureBrowser.setup_actionsa   s     ,, - 
 
 #..O / 
 

 &*%5%5, &6 &
 &
"
 (,'7'7)" (8 (
 (
$
 !,,TZ( - 
 
r   )ra   tipra   rm   returnr	   c                   t          ||           }|r|                    |           |r|                    |           |j                            |           |S r   )r	   setShortcut
setToolTip	triggeredr]   )rE   nameslotra   rm   actions         r   rb   z AcisStructureBrowser.make_actionx   sg     t$$ 	)x((( 	#c"""  &&&r   c                   |                                  }|                    d          }|                    | j                   |                    | j                   |                                 |                    | j                   |                    | j                   |                                 |                    | j                   d S )Nz&File)	menuBaraddMenu	addActionrd   rf   addSeparatorrh   rj   rl   )rE   menu	file_menus      r   r5   zAcisStructureBrowser.setup_menu   s    ||~~LL))	D-...D/000   D6777D8999   D-.....r   c                    t           j                            | dd          \  }}|r|                     |           d S d S )NzSelect DXF filezDXF Documents (*.dxf *.DXF))captionfilter)r   r   getOpenFileNamer6   )rE   path_s      r   rc   zAcisStructureBrowser.open_dxf   sX    '77%0 8 
 
a
  	 MM$	  	 r   r   c                l   	 t          j        |          }nw# t          $ r.}t          j        | dt          |                     Y d }~d S d }~wt          $ r4}t          j        | dd| dt          |                      Y d }~d S d }~ww xY wt          t          |                    }t          |          r_|| _
        |                     |           |                     |           | j                            |                                            d S d| d}t          j        | d|           d S )NzLoading ErrorzDXF Structure ErrorzInvalid DXF file "z": z
DXF file 'z' contains no ACIS data)ezdxfreadfileIOErrorr
   criticalr$   r   listget_acis_entitieslenr+   set_acis_entitiesupdate_titler3   rB   make_loading_messageinformation)rE   r   r+   eentitiesrF   s         r   r6   zAcisStructureBrowser.load_dxf   sa   	.&&CC 	 	 	 A???FFFFF  	 	 	 %6T66c!ff66  
 FFFFF	 )#..//x== 	@DH""8,,,d###N&&t'@'@'B'BCCCCC<t<<<C#D/3?????s     
B#A

B)BBc                l    | j         J | j         j        }|dk    rdnd}d| j         j         d| d| dS )NAC1027SABSATzLoaded DXF file has version /z and contains z data)r+   
dxfversionacad_release)rE   r   	acis_types      r   r   z)AcisStructureBrowser.make_loading_message   sf    x###X(
'833EE	1dh.C 1 1j 1 1 )1 1 1 	1r   r   list[AcisData]c                t    || _         |                     |           |                     |d                    d S Nr   )r,   update_entity_selectorset_current_acis_entity)rE   r   s     r   r   z&AcisStructureBrowser.set_acis_entities   s<    %##H---$$Xa[11111r   c                    	 | j                             | j                  }n# t          $ r d}Y nw xY w|                     | j        j                   |dk    r"|                     | j         |                    d S d S )Nr   )r,   indexr-   
IndexErrorr6   r+   r#   r   rE   r   s     r   re   zAcisStructureBrowser.reload_dxf   s    	&,,T-EFFEE 	 	 	EEE	dh'(((199(();E)BCCCCC 9s   " 11c                    |                                  }|d S t          j        | d|                                 d|j        j         dd          \  }}|rt          | j        |           d S d S )NzExport Current Entity View-z.txtzText Files (*.txt *.TXT)r~   dirr   )get_current_dxf_entityr   getSaveFileNamedxftypedxfr%   
write_datar-   )rE   
dxf_entityr   r   s       r   rg   z"AcisStructureBrowser.export_entity   s    0022
F-0%%''EE*.*?EEE-	
 
 
a  	7t/66666	7 	7r   c                $   |                                  }|d S |                                 d|j        j         }|j        }|rd}|dz  }nd}|dz  }t          j        | d||          \  }}|r|rEt          |d          5 }|                    |j	                   d d d            d S # 1 swxY w Y   d S t          |d	          5 }|                    d

                    |j                             d d d            d S # 1 swxY w Y   d S d S )Nr   z(Standard ACIS Binary Files (*.sab *.SAB)z.sabz&Standard ACIS Text Files (*.sat *.SAT)z.satzExport ACIS Raw Datar   wbwt
)r   r   r   r%   has_binary_datar   r   openwritesabjoinsat)rE   r   r#   r   filter_r   r   fps           r   ri   z&AcisStructureBrowser.export_raw_entity   s   0022
F ((**DDZ^-BDD( 	@GHH>GH-*	
 
 
a  	8 8$%% -HHZ^,,,- - - - - - - - - - - - - - - - - - $%% 8HHTYYz~667778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s$   B++B/2B/.DD
DOptional[Body]c                x    | j         }|j        r| j        d S | j        j                            |j                  S r   )r-   r%   r+   entitydbget)rE   currents     r   r   z+AcisStructureBrowser.get_current_dxf_entity   s;    *~ 	!14x $$W^444r   c                D    |                      t           d|            d S )Nz - )r7   r8   )rE   r   s     r   r   z!AcisStructureBrowser.update_title   s*    x22D2233333r   r   r   c                   t          | j                  dk    rd S 	 |                     | j        |                                                    d S # t          $ r$ |                     | j        d                    Y d S w xY wr   )r   r,   r   rowr   r   s     r   r^   z*AcisStructureBrowser.acis_entity_activated   s    t!""a''F	@(();EIIKK)HIIIII 	@ 	@ 	@(();A)>??????	@s   2A *A>=A>entityr   c                F    |r|| _         |                     |           d S d S r   )r-   update_acis_content_viewer)rE   r   s     r   r   z,AcisStructureBrowser.set_current_acis_entity  s6     	4'-D$++F33333	4 	4r   c                    | j         }|                                 |                    d                    |j                             d S )Nr   )r1   clearsetPlainTextr   lines)rE   r   rP   s      r   r   z/AcisStructureBrowser.update_acis_content_viewer  s?    )DIIfl3344444r   Iterable[AcisData]c                z    | j         }|                                 |                    d |D                        d S )Nc                    g | ]	}|j         
S  )rs   ).0r   s     r   
<listcomp>z?AcisStructureBrowser.update_entity_selector.<locals>.<listcomp>  s    222A222r   )r/   r   addItems)rE   r   rP   s      r   r   z+AcisStructureBrowser.update_entity_selector  s>    %2222233333r   boolc                `    | j         D ]%}|j        |k    r|                     |            dS &dS )NTF)r,   r%   r   )rE   r%   r   s      r   rA   z AcisStructureBrowser.goto_handle  sH    ( 	 	F}&&,,V444tt ' ur   )r"   r"   )r#   r$   r%   r$   )ra   r$   rm   r$   rn   r	   )r   r$   )rn   r$   )r   r   )rn   r   )r   r   )r   r   )r   r   )r%   r$   rn   r   )__name__
__module____qualname__r*   r.   r0   r;   r?   r4   rb   r5   rc   r6   r   r   re   rg   ri   r   r   r^   r   r   r   rA   __classcell__)rG   s   @r   r!   r!   "   s        # # # # # # #J+ + +  	 	 	K K K

 
 
8       	/ 	/ 	/     @ @ @ @.1 1 1 12 2 2 2
D D D7 7 78 8 865 5 5 54 4 4 4@ @ @ @4 4 4 4
5 5 5 5
4 4 4 4
       r   r!   r+   r   rn   Iterator[AcisData]c              #  (  K   | j                                         D ]u}t          |t                    r^|j        j        }d| d|                                 }|j        rt          |j	        ||          V  ]t          |j        ||          V  vd S )N<z> )r   values
isinstancer   r   r%   r   r   r   r   r   r   )r+   r   r%   rs   s       r   r   r     s      \  "" 8 8a 	8U\F.v....D  8$QUD&999999"15$777778 8r   r   r   r   r$   c                    	 t          |d          5 }|                    d                    | j                             d d d            d S # 1 swxY w Y   d S # t          $ r Y d S w xY w)Nr   r   )r   r   r   r   r   )r   r   r   s      r   r   r   #  s    $ 	.HHTYYv|,,---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.   s4   A .A A AA AA 
A('A()r+   r   rn   r   )r   r   r   r$   )#
__future__r   typingr   r   r   r   ezdxf.addons.xqtr   r   r	   r
   r   r   r   ezdxf.documentr   ezdxf.entitiesr   ezdxf.lldxf.constr   datar   r   r   r8   r=   r>   rU   r   r   QMainWindowr!   r   r   r   r   r   <module>r      s   # " " " " " / / / / / / / / / /                   # " " " " "       / / / / / / 8 8 8 8 8 8 8 8 8 8 $   s s s s s90 s s sl8 8 8 8     r   