
    'jo                    2   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZmZ d dlmZmZ d d	lmZ d d
l m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 dgZ3dZ4ej5        j6        Z6ej5        7                    e6d          Z8 e9dej5        :                    e6d                    Z;ee<         Z=d&dZ>dZ?dZ@dZA G d  dejB                  ZCd'd#ZD G d$ d%ejE        e0          ZFdS )(    )annotations)OptionalSet)partial)PathN)	QtWidgetsQtGuiQActionQMessageBoxQFileDialogQInputDialogQtQModelIndex	QSettingsQFileSystemWatcherQSize)DXFStructureErrorDXFValueError)DXFTagis_pointer_code)Tags)get_reference_link   )DXFStructureModelDXFTagsModelDXFTagsRole)DXFDocumentget_row_from_line_numberdxfstrEntityHistorySearchIndex)StructureTreeDXFTagsTable)Ui_FindDialog)	BookmarksDXFStructureBrowserzDXF Structure BrowserTEXT_EDITOR   	ICON_SIZEdocr   search_sectionsSearchSectionsreturn
list[Tags]c                z    g }| j                                         D ]\  }}||v r|                    |           |S N)sectionsitemsextend)r*   r+   entitiesnamesection_entitiess        V/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/browser/browser.pysearchable_entitiesr8   8   sP     H"%,"4"4"6"6 . .?""OO,---O    i   i   gQ?c                      e Zd Zddd ed          fdV fdZd Zd Zd ZdddddWdZd Z	dXdZ
dYdZd ZdZdZd Zd  Zd[d!Zd" Zd# Zd$ Zd% Zd& Zd\d'Zd]d)Zd^d*Z	 d_d`d.Zdad/Zdbd2Zdcd4Zdcd5Zd6 Zddd8Zd^d9Z d: Z!ded<Z"d= Z#d> Z$d? Z%d@ Z&dfdBZ'dgdDZ(dbdEZ)dhdGZ*dH Z+dI Z,dJ Z-dK Z.didMZ/dN Z0djdPZ1dkdRZ2dS Z3dT Z4dU Z5 xZ6S )lr&    N.filenamestrlineOptional[int]handleOptional[str]resource_pathr   c                   t                                                       t                      | _        || _        t                      | _        t                      | _        d | _	        d | _
        t                      | _        |                                 | _        t                      | _        d| _        t%                      | _        t)                      | _        |                                  |                                  |                                  |r|                     |           n|                     t6                     |                     |                                            |                     t>          t@                     | !                                 |H	 tE          |          }| #                    |           n"# tH          $ r tK          d|            Y nw xY w|`	 tE          |d           | &                    |          stK          d| d           d S d S # tH          $ r tK          d|            Y d S w xY wd S )NTzInvalid line number: r(   Handle z not found.z!Given handle is not a hex value: )'super__init__r   r*   rC   r"   _structure_treer#   _dxf_tags_table_current_entity_active_searchset_search_sectionscreate_find_dialog_find_dialogr   _file_watcher_exclusive_reload_dialogr    historyr%   	bookmarkssetup_actions
setup_menusetup_toolbarload_dxfsetWindowTitleAPP_NAMEsetCentralWidgetbuild_central_widgetresizeBROWSER_WIDTHBROWSER_HEIGHTconnect_slotsint	goto_line
ValueErrorprintgoto_handle)selfr=   r?   rA   rC   	__class__s        r7   rG   zDXFStructureBrowser.__init__H   sY    	==*,+~~/359*-%%(,(?(?(A(A/11(,%$" 	*MM(####)))d7799:::M>222%4yy t$$$$  6 6 64d44555556 9FB ''// 97F777888889 9  D D DB&BBCCCCCCD s$   (G G,+G,2H. .IIc                |   t          j        t          j                  }|                    | j                   |                    | j                   t          t          t          z            }t          |z
  }|
                    ||g           |                    dd           |                    dd           |S )Nr   Fr   )r   	QSplitterr   
Horizontal	addWidgetrH   rI   r`   r]   TREE_WIDTH_FACTORsetSizessetCollapsible)re   	container
tree_widthtable_widths       r7   r[   z(DXFStructureBrowser.build_central_widgetx   s    '66	D0111D0111)::;;
#j0J4555  E***  E***r9   c                    | j         j                            | j                   | j        j                            | j                   | j        j                            | j                   d S r0   )	rH   	activatedconnectentity_activatedrI   tag_activatedrP   fileChangedask_for_reloadingre   s    r7   r_   z!DXFStructureBrowser.connect_slots   s_    &..t/DEEE&..t/ABBB&..t/EFFFFFr9   c                :   |                      d| j        d          | _        |                      d| j        d          | _        |                      d| j        dd	          | _        |                      d
| j        dd	          | _        |                      d| j	        d          | _
        |                      d| j        ddd          | _        |                      d| j        ddd          | _        |                      d| j        ddd          | _        |                      d| j        ddd          | _        |                      d| j        d d!d"          | _        |                      d#| j        d$d%d&          | _        |                      d'| j        d(d)d*          | _        |                      d+| j        d,          | _        |                      d-| j        d.d/d0          | _        |                      d1t;          | j        d23          d4          | _        |                      d5t;          | j        d63          d7          | _         |                      d8t;          | j        d93          d:          | _!        |                      d;t;          | j        d<3          d=          | _"        |                      d>| j#        d?d@	          | _$        |                      dA| j%        dBdC	          | _&        |                      dD| j'        dE          | _(        d S )FNz&Open DXF File...zCtrl+O)shortcutz&Export DXF Entity...zCtrl+Ez&Copy DXF Entity to ClipboardzShift+Ctrl+Czicon-copy-64px.png)rz   	icon_namez$&Copy selected DXF Tags to ClipboardzCtrl+Cz&QuitzCtrl+Qz&Go to Handle...zCtrl+Gzicon-goto-handle-64px.pngzGo to Entity Handlerz   r{   tipzGo to &Line...zCtrl+Lzicon-goto-line-64px.pngzGo to Line NumberzFind &Text...zCtrl+Fzicon-find-64px.pngzFind Text in Entitiesz&Previous Entityz	Ctrl+Leftzicon-prev-entity-64px.pngz#Go to Previous Entity in File Orderz&Next Entityz
Ctrl+Rightzicon-next-entity-64px.pngzGo to Next Entity in File OrderzEntity History &BackzAlt+Leftzicon-left-arrow-64px.pngz(Go to Previous Entity in Browser HistoryzEntity History &Forwardz	Alt+Rightzicon-right-arrow-64px.pngz$Go to Next Entity in Browser Historyz&Open in Text EditorzCtrl+TzShow Entity in Structure &Treez	Ctrl+Downzicon-show-in-tree-64px.pngz%Show Current Entity in Structure TreezGo to HEADER SectionHEADER)r5   zShift+HzGo to BLOCKS SectionBLOCKSzShift+BzGo to ENTITIES SectionENTITIESzShift+EzGo to OBJECTS SectionOBJECTSzShift+OzStore Bookmark...zShift+Ctrl+Bzicon-store-bookmark-64px.pngzGo to Bookmark...zCtrl+Bzicon-goto-bookmark-64px.pngzReload DXF FilezCtrl+R))make_actionopen_dxf_open_actionexport_entity_export_entity_actioncopy_entity_copy_entity_actioncopy_selected_tags_copy_selected_tags_actionclose_quit_actionask_for_handle_goto_handle_actionask_for_line_number_goto_line_action	find_text_find_text_actiongoto_previous_entity_goto_predecessor_entity_actiongoto_next_entity_goto_next_entity_actiongo_back_entity_history_entity_history_back_actiongo_forward_entity_history_entity_history_forward_actionopen_entity_in_text_editor"_open_entity_in_text_editor_action show_current_entity_in_tree_view _show_entity_in_tree_view_actionr   go_to_section_goto_header_action_goto_blocks_action_goto_entities_action_goto_objects_actionstore_bookmark_store_bookmarkgo_to_bookmark_go_to_bookmark
reload_dxf_reload_actionrx   s    r7   rT   z!DXFStructureBrowser.setup_actions   s    ,, - 
 
 &*%5%5#T%7( &6 &
 &
" $(#3#3+#*	 $4 $
 $
  +/*:*:2#*	 +; +
 +
' !,,TZ( - 
 
 $(#3#31% $4 $
 $
  "&!1!1$/# "2 "
 "
 "&!1!1N*' "2 "
 "
 04/?/?% 15 0@ 0
 0
, )-(8(8!!11 )9 )
 )
% ,0+;+;"'0: ,< ,
 ,
( /3.>.>%* 16 /? /
 /
+ 372B2B"+ 3C 3
 3
/
 150@0@,1 27 1A 1
 1
- $(#3#3"D&X666 $4 $
 $
 
 $(#3#3"D&X666 $4 $
 $
 
 &*%5%5$D&Z888 &6 &
 &
"
 %)$4$4#D&Y777 %5 %
 %
!
  $//#4	  0  
  
  $//3	  0  
  
 #..O / 
 
r9   r|   rz   r{   r}   r-   r
   c               6   t          ||           }|r|                    |           |r>t          j        t	          | j        |z                      }|                    |           |r|                    |           |j        	                    |           |S r0   )
r
   setShortcutr	   QIconr>   rC   setIcon
setToolTip	triggeredrs   )re   r5   slotrz   r{   r}   actionicons           r7   r   zDXFStructureBrowser.make_action  s     t$$ 	)x((( 	!;s4#5	#ABBCCDNN4    	#c"""  &&&r9   c                   |                                  }|                    d          }|                    | j                   |                    | j                   |                    | j                   |                                 |                    | j                   |                    | j                   |                    | j	                   |                                 |                    | j
                   |                    d          }|                    | j                   |                    | j                   |                    | j                   |                                 |                    | j                   |                    | j                   |                    | j                   |                                 |                    | j                   |                    | j                   |                                 |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    d          }|                    | j                   |                    | j                   d S )Nz&Filez	&Navigatez
&Bookmarks)menuBaraddMenu	addActionr   r   r   addSeparatorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )re   menu	file_menunavigate_menubookmarks_menus        r7   rU   zDXFStructureBrowser.setup_menu  s   ||~~LL))	D-...D/000DCDDD   D;<<<D4555D6777   D-...[11 8999 6777 6777""$$$ =>>> DEEE EFFF""$$$ @AAA CDDD""$$$ 8999 8999 :;;; 9:::l33  !5666  !566666r9   Nonec                   t          j        d          }|                    t          t          t                               |                    | j                   |                    | j                   |                    | j                   |                    | j	                   |                    | j
                   |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                     |           d S )NMainToolbar)r   QToolBarsetIconSizer   r)   r   r   r   r   r   r   r   r   r   r   r   r   
addToolBar)re   toolbars     r7   rV   z!DXFStructureBrowser.setup_toolbar<  sE   $]33E)Y77888$:;;;$=>>>$>???$7888$?@@@$0111$0111$2333$.///$.///$9:::     r9   'FindDialog'c                D   t                      }|                    d           |j        j                            | j                   |j        j                            | j                   |j                            d           |j                            d           |S )NTF3F4)	
FindDialogsetModalfind_forward_buttonclickedrs   find_forwardfind_backwards_buttonfind_backwardsr   re   dialogs     r7   rN   z&DXFStructureBrowser.create_find_dialogL  s    "*2243DEEE$,44T5HIII"..t444$00666r9   c                    t           j                            | dd          \  }}|r|                     |           d S d S )NzSelect DXF filezDXF Documents (*.dxf *.DXF)captionfilter)r   r   getOpenFileNamerW   )re   path_s      r7   r   zDXFStructureBrowser.open_dxfU  sX    '77%0 8 
 
a
  	 MM$	  	 r9   r   c                   	 |                      |           | j                                         |                                  |                                  d S # 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)NzLoading ErrorzDXF Structure ErrorzInvalid DXF file "z": )
_loadrR   clearview_header_sectionupdate_titleIOErrorr   criticalr>   r   )re   r   es      r7   rW   zDXFStructureBrowser.load_dxf^  s   	 JJt L   $$&&&  	@ 	@ 	@ A?????????  	 	 	 %6T66c!ff66        	s#   A 
C$#BC)C		Cc                D   | j         |                                 }|                                 }| j                                        }| j                            ||          }|                     | j        j                   |N| j        	                    |          }|2| 
                    ||           | j                            |           d S | j                            |          }| 
                    ||           | j                            |           d S d S r0   )rJ   get_current_entityget_current_entity_handlerI   first_selected_rowr*   get_line_numberr   r=   
get_entity set_current_entity_and_row_indexrH   expand_to_entityget_entity_at_line)re   entityrA   	first_rowline_numbers        r7   r   zDXFStructureBrowser.reload_dxfn  s   +,,..F3355F,??AAI(2269EEKJJtx()))!,,V44%99&)LLL(99&AAAFX00==F11&)DDD 11&99999! ,+r9   c                B   | j         j        r| j        rd| _        t          j        | dd| j                                          dt          j        t          j        z  t          j                  }|t          j        k    r|                                  d| _        d S d S d S )NFReload"z?"

This file has been modified by another program, reload file?)buttonsdefaultButtonT)	r*   r=   rQ   r   questionabsolute_filepathYesNor   )re   oks     r7   rw   z%DXFStructureBrowser.ask_for_reloading  s    8 	1!> 	1 -2D)%=DH..00 = = =#+.8)o  B [_$$!!!,0D)))	1 	1 	1 	1r9   c                   | j         j        r$| j                            | j         j                   | j                             |           t          | j         j        j        | j                   }| j        	                    |           | j
                                         | j                            | j         j                   d S r0   )r*   r=   rP   
removePathloadr   filepathr5   rH   set_structurerR   r   addPath)re   r=   models      r7   r   zDXFStructureBrowser._load  s    8 	=))$(*;<<<h!$("3"8$(CC**5111""48#455555r9   c                    | j         d S t          j        | dd          \  }}|rE| j                                         }|                                }|                     ||           d S d S )NzExport DXF EntityzText Files (*.txt *.TXT)r   )rI   r   getSaveFileNamer   compiled_tagsexport_tags)re   r   r   r   tagss        r7   r   z!DXFStructureBrowser.export_entity  s    'F-'-
 
 
a
  	)(..00E&&((DT4(((((	) 	)r9   c                    | j         d S | j                                         }|                                }t          |           d S r0   )rI   r   r   copy_dxf_to_clipboard)re   r   r   s      r7   r   zDXFStructureBrowser.copy_entity  sI    'F$**,,""$$d#####r9   c                    | j         d S | j                                        }| j                                        }|                                	 t          fd|D                       }n# t          $ r Y d S w xY wt          |           d S )Nc              3  (   K   | ]}|         V  d S r0    ).0rowr   s     r7   	<genexpr>z9DXFStructureBrowser.copy_selected_tags.<locals>.<genexpr>  s'      99StCy999999r9   )rJ   rI   selected_rowsr   r   r   
IndexErrorr  )re   rowsr   r   r   s       @r7   r   z&DXFStructureBrowser.copy_selected_tags  s    'F#1133$**,,""$$	9999D99999KK 	 	 	FF	k*****s   A. .
A<;A<c                    | j                             d          }|r|                     |d                    d S | j                             d          }|r|                     |d                    d S d S )Nr~   r   r   r   r*   get_sectionset_current_entity_with_history)re   headerr4   s      r7   r   z'DXFStructureBrowser.view_header_section  s    %%h// 	B00;;;;;x++J77H B44Xa[AAAAAB Br9   c                r    |                      t           d| j                                                    d S )Nz - )rX   rY   r*   r   rx   s    r7   r   z DXFStructureBrowser.update_title  s8    xJJDH,F,F,H,HJJKKKKKr9   c                |    |                                  }|r%	 |                                S # t          $ r Y nw xY wd S r0   )r   
get_handler   )re   active_entitys     r7   r   z-DXFStructureBrowser.get_current_entity_handle  sW    //11 	$//111    ts   , 
99Optional[Tags]c                    | j         S r0   )rJ   rx   s    r7   r   z&DXFStructureBrowser.get_current_entity  s    ##r9   c                l    | j                             |          }|r|                     |           d S d S r0   )r*   r   set_current_entityre   rA   r   s      r7   set_current_entity_by_handlez0DXFStructureBrowser.set_current_entity_by_handle  sC    $$V,, 	,##F+++++	, 	,r9   r   r   select_line_numberc                   |r|| _         | j                            |          }t          ||| j        j                  }| j                            |           |t          |                                ||          }| j        	                    |           | j        
                                                    |d          }| j                            |           d S d S d S Nr   )rJ   r*   r   r   entity_indexrI   setModelr   r   	selectRowr   indexscrollTo)re   r   r  start_line_numberr   r  r!  s          r7   r  z&DXFStructureBrowser.set_current_entity  s      	5#)D  $ 8 8 @ @ )48+@ E  ))%000!-.''))+<>P  $..s333,2244::3BB$--e44444	5 	5 .-r9   c                d    |                      |           | j                            |           d S r0   )r  rR   appendre   r   s     r7   r  z3DXFStructureBrowser.set_current_entity_with_history  s2    '''F#####r9   r!  r`   c                    | j                             ||          }|                     ||           | j                            |           d S )N)r  )r*   r   r  rR   r%  )re   r   r!  r?   s       r7   r   z4DXFStructureBrowser.set_current_entity_and_row_index  sN    x''664@@@F#####r9   r   c                    |                     t                    }t          |t          t          f          r$|                     t          |                     d S d S )Nrole)datar   
isinstancer   listr  )re   r!  r   s      r7   rt   z$DXFStructureBrowser.entity_activated  sW    zz{z++ dT4L)) 	=00d<<<<<	= 	=r9   c                B   |                     t                    }t          |t                    rl|\  }}t	          |          r.|                     |          s|                     |           d S d S |dk    r&|                     t          |                     d S d S d S )Nr)  r   )	r+  r   r,  r   r   rd   show_error_handle_not_foundopen_web_browserr   )re   r!  tagcodevalues        r7   ru   z!DXFStructureBrowser.tag_activated  s    jjkj**c6"" 	AKD%t$$ A''.. <44U;;;;;< <%%&8&?&?@@@@@	A 	A
 r9   c                    t          j        | dd          \  }}|r,|                     |          s|                     |           d S d S d S )NGo tozGo to entity handle:)r   getTextrd   r/  )re   rA   r   s      r7   r   z"DXFStructureBrowser.ask_for_handle  so    !)"
 


  	9##F++ 90088888	9 	99 9r9   boolc                l    | j                             |          }|r|                     |           dS dS NTF)r*   r   r  r  s      r7   rd   zDXFStructureBrowser.goto_handle  s=    $$V,, 	008884ur9   c                :    t          j        | dd| d           d S )NErrorrE   z not found!)r   r   )re   rA   s     r7   r/  z/DXFStructureBrowser.show_error_handle_not_found  s)    T7,If,I,I,IJJJJJr9   c                    | j         j        }t          j        | dd| ddd|          \  }}|r|                     |           d S d S )Nr5  zGo to line number: (max. )r   )r*   max_line_numberr   getIntra   )re   r>  numberr   s       r7   r   z'DXFStructureBrowser.ask_for_line_number  sk    (2!(::::
 

  	#NN6"""""	# 	#r9   r@  c                    | j                             t          |                    }|r|                     ||           dS dS r9  )r*   r   r`   r  )re   r@  r   s      r7   ra   zDXFStructureBrowser.goto_line%  sE    ,,S[[99 	##FF3334ur9   c                    d | _         | j        }|                                 |                    d           |j                                         |                                 d S )Nz*F3 searches forward, F4 searches backwards)rK   rO   restore_geometryshow_messagefind_text_editsetFocusshowr   s     r7   r   zDXFStructureBrowser.find_text,  s_    ""!!!HIII&&(((r9   c                     fd} j          j        * |              j                             j                   n)                                }| j        k    r
 |                                  j                   d S )Nc                                                      _        t          j        j                  } t	          |           _        d S r0   )r+   rM   r8   r*   r!   rK   )r4   r   re   s    r7   setup_searchz7DXFStructureBrowser.update_search.<locals>.setup_search5  sA    $*$:$:$<$<D!*48T5JKKH"-h"7"7Dr9   )rO   rK   r  rJ   r+   rM   update_options)re   rJ  r+   r   s   `  @r7   update_searchz!DXFStructureBrowser.update_search4  s    	8 	8 	8 	8 	8 	8
 "&LNNN2243GHHHH$4466O$"777d122222r9   c                2    |                      d           d S )NFbackward_findrx   s    r7   r   z DXFStructureBrowser.find_forwardE  s    

E
"""""r9   c                2    |                      d           d S )NTrN  rP  rx   s    r7   r   z"DXFStructureBrowser.find_backwardsH  s    

D
!!!!!r9   Fc                   | j                                         r|                                  | j        }|j        r|                    |           |r|                                n|                                \  }}|r.|                     ||           | 	                    ||           d S |j        r| 
                    d           d S | 
                    d           d S d S )NrN  zNot found and end of file!z
Not found!)rO   	isVisiblerL  rK   is_end_of_indexreset_cursorr   r   r   show_entity_found_messagerD  )re   rO  searchr   r!  s        r7   rQ  zDXFStructureBrowser._findK  s   &&(( 	4   (F% 7##X#666 ,4N%%'''9L9L9N9N FE  455feDDD..vu=====) 4%%&BCCCCC%%l33333#	4 	4r9   msgc                :    | j                             |           d S r0   )rO   rD  re   rY  s     r7   rD  z DXFStructureBrowser.show_message_  s    &&s+++++r9   c                X   |                                 }|dk    r)d                    |                    d                    }n1	 |                                }d| d| d}n# t          $ r d}Y nw xY w| j                            ||          }|                     d| |            d S )	NSECTIONz @ {0} Section   z @ z(#r=  r;   zFound in Line: )dxftypeformatget_first_valuer  rb   r*   r   rD  )re   r   r!  r_  tailrA   r?   s          r7   rW  z-DXFStructureBrowser.show_entity_found_messageb  s    ..""i#**6+A+A!+D+DEEDD**,,1W11111   x''668D8$8899999s   A# #A21A2r   c                   	 t          |dd          5 }|                    t          |                     d d d            d S # 1 swxY w Y   d S # t          $ r.}t	          j        | dt          |                     Y d }~d S d }~ww xY w)Nwtutf8)encodingr   )openwriter   r   r   r   r>   )re   r=   r   fpr   s        r7   r   zDXFStructureBrowser.export_tagso  s    	:hv666 '"&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 	: 	: 	: y#a&&999999999	:s9   A #AA AA AA 
B	#BB	c                    | j         rI|                                 }|5| j                            |          }||                     |           d S d S d S d S r0   )rI   r   r*   next_entityr  )re   current_entityrk  s      r7   r   z$DXFStructureBrowser.goto_next_entityv  sr     	F!4466N)"h22>BB*88EEEEE	F 	F))**r9   c                    | j         rI|                                 }|5| j                            |          }||                     |           d S d S d S d S r0   )rI   r   r*   previous_entityr  )re   rl  prev_entitys      r7   r   z(DXFStructureBrowser.goto_previous_entity~  sr     	F!4466N)"h66~FF*88EEEEE	F 	F))**r9   c                j    | j                                         }||                     |           d S d S r0   )rR   backr  r&  s     r7   r   z*DXFStructureBrowser.go_back_entity_history  s=    ""$$##F+++++ r9   c                j    | j                                         }||                     |           d S d S r0   )rR   forwardr  r&  s     r7   r   z-DXFStructureBrowser.go_forward_entity_history  s=    %%''##F+++++ r9   r5   c                    | j                             |          }|r'|dk    rdnd}|                     ||                    d S d S )Nr~   r   r   r  )re   r5   sectionr!  s       r7   r   z!DXFStructureBrowser.go_to_section  s]    (&&t,, 	A))AAqE00@@@@@	A 	Ar9   c                   |                                  }| j                            |          }| j        r| j                                        }|rH| j                                        }|d                                         }|                    |          }|                     t          | j        
                                          |           d S d S r  )r   r*   r   rI   selectedIndexesr   r  r   _open_text_editorr>   r   )re   rl  r   indicesr   r  s         r7   r   z.DXFStructureBrowser.open_entity_in_text_editor  s    0022h..~>> 	*::<<G 5,2244ajnn&&#//44""DH..0011;    	 	r9   r   c                    t                               ||          }t          j        |          }	 t	          j        |           d S # t          $ r t          j        | dd|z              Y d S w xY w)N)r=   numzText EditorzError calling text editor:
)	r'   r`  shlexsplit
subprocessPopenFileNotFoundErrorr   r   )re   r=   r   cmdargss        r7   rx  z%DXFStructureBrowser._open_text_editor  s       ! 
 
 {3	T"""""  	 	 	 m%Cc%I     	s   A #A/.A/urlc                8    dd l }|                    |           d S r  )
webbrowserrg  )re   r  r  s      r7   r0  z$DXFStructureBrowser.open_web_browser  s&    r9   c                j    |                                  }|r| j                            |           d S d S r0   )r   rH   r   r&  s     r7   r   z4DXFStructureBrowser.show_current_entity_in_tree_view  sB    ((** 	: 11&99999	: 	:r9   c                   | j         | j                                        }t          |          dk    rdg}t	          j        | dd|d          \  }}|ry| j         }| j                                        }|r|d                                         }nd}| j	        
                    |          }| j                            |||           d S d S d S )Nr   0zStore Bookmark	Bookmark:Teditable)rJ   rS   nameslenr   getItemrI   rw  r  r*   r  add)re   rS   r5   r   r   r  offsetrA   s           r7   r   z"DXFStructureBrowser.store_bookmark  s    +,,..I9~~"" E	#+   HD"  9-+;;== !!W[[]]FFF,,V44""488888' ,+9 9r9   c                   | j                                         }t          |          dk    rt          j        | dd           d S t          j        | dd| j                                         d          \  }}|r| j                             |          }||                     |j	                   | j
                            |j                   | j
                                        }t          |                    |j        d                    }| j
                            |           d S t"          j                            | dt'          |                     d S d S )	Nr   InfozNo Bookmarks defined!zGo to Bookmarkr  Fr  zBookmark not found!)rS   r  r  r   informationr   r  getr  rA   rI   r   r  r   r   r!  r"  r   r   r>   )re   rS   r5   r   bookmarkr   r!  s          r7   r   z"DXFStructureBrowser.go_to_bookmark  sZ   N((**	y>>Q#D&2IJJJF'N  ""
 
 
b  	~))$//H#11(/BBB$..x???,2244#EKK$C$CDD$--e44444 %../T    	 	r9   )r=   r>   r?   r@   rA   rB   rC   r   )rz   r>   r{   r>   r}   r>   r-   r
   )r-   r   )r-   r   )r   r>   )r=   r>   )r-   rB   )r-   r  )rA   r>   r0   )r   r   r  r@   )r   r   )r   r   r!  r`   )r!  r   )rA   r>   r-   r7  )r@  r`   r-   r7  )FrY  r>   )r=   r>   r   r   )r5   r>   )r=   r>   r   r`   r-   r   )r  r>   )7__name__
__module____qualname__r   rG   r[   r_   rT   r   rU   rV   rN   r   rW   r   rw   r   r   r   r   r   r   r   r   r  r  r  r   rt   ru   r   rd   r/  r   ra   r   rL  r   r   rQ  rD  rW  r   r   r   r   r   r   r   rx  r0  r   r   r   __classcell__rf   s   @r7   r&   r&   G   s        " $"d3ii.9 .9 .9 .9 .9 .9 .9`	 	 	G G Gz
 z
 z
B      ( 7  7  7D! ! ! !                 : : :&1 1 1"6 6 6 6) ) )$ $ $
+ 
+ 
+B B BL L L   $ $ $ $, , , , AE5 5 5 5 5$$ $ $ $$ $ $ $
= = = =A A A A9 9 9   K K K K# # #     3 3 3"# # #" " "4 4 4 4(, , , ,: : : :: : : :F F FF F F, , ,
, , ,
A A A A        
: : :
9 9 9,      r9   r   r   c                    t           j                                        }	 |j        j        }n# t
          $ r
 |j        }Y nw xY w|                    t          |           |           d S )N)mode)r   QApplication	clipboardMode	ClipboardAttributeErrorsetTextr   )r   r  r  s      r7   r  r    ss    &0022I#~' # # #"#fTll.....s   - A Ac                  F     e Zd Z fdZd ZddZdd	Z fd
ZddZ xZ	S )r   c                     t                                                                                         j        j                             fd           t          dd           _        d S )Nc                 ,                                      S r0   )r   rx   s   r7   <lambda>z%FindDialog.__init__.<locals>.<lambda>  s    $**,, r9   ezdxf
DXFBrowser)rF   rG   setupUiclose_buttonr   rs   r   settings)re   rf   s   `r7   rG   zFindDialog.__init__  se    T!))*>*>*>*>???!'<88r9   c                l    | j                             d          }||                     |           d S d S Nzfind.dialog.geometry)r  r3  restoreGeometry)re   geometrys     r7   rC  zFindDialog.restore_geometry  s@    =&&'=>>  *****  r9   r-   r,   c                J   t                      }| j                                        r|                    d           | j                                        r|                    d           | j                                        r|                    d           | j                                        r|                    d           | j                                        r|                    d           | j                                        r|                    d           |S )Nr~   CLASSESTABLESr   r   r   )	rL   header_check_box	isCheckedr  classes_check_boxtables_check_boxblocks_check_boxentities_check_boxobjects_check_box)re   r1   s     r7   r+   zFindDialog.search_sections  s   55 **,, 	#LL"""!++-- 	$LL### **,, 	#LL""" **,, 	#LL"""",,.. 	%LL$$$!++-- 	$LL###r9   rX  r!   r   c                   |                     | j                                                   | j                                         |_        | j                                        |_        | j                                        |_	        d S r0   )
reset_search_termrE  textmatch_case_check_boxr  case_insensitivewhole_words_check_boxwhole_wordsnumber_tags_check_boxnumbers)re   rX  s     r7   rK  zFindDialog.update_options  sp      !4!9!9!;!;<<<&*&?&I&I&K&K"K!7AACC3==??r9   c                    | j                             d|                                            t                                          |           d S r  )r  setValuesaveGeometryrF   
closeEvent)re   eventrf   s     r7   r  zFindDialog.closeEvent  sF    5t7H7H7J7JKKK5!!!!!r9   rY  r>   c                :    | j                             |           d S r0   )messager  r[  s     r7   rD  zFindDialog.show_message  s    S!!!!!r9   )r-   r,   )rX  r!   r-   r   r  )
r  r  r  rG   rC  r+   rK  r  rD  r  r  s   @r7   r   r     s        9 9 9 9 9+ + +
    @ @ @ @" " " " "" " " " " " " "r9   r   )r*   r   r+   r,   r-   r.   )r   r   )G
__future__r   typingr   r   	functoolsr   pathlibr   r~  r|  ezdxf.addons.xqtr   r	   r
   r   r   r   r   r   r   r   r   r  ezdxf.lldxf.constr   r   ezdxf.lldxf.typesr   r   ezdxf.lldxf.tagsr   ezdxf.addons.browser.reflinksr   r   r   r   r   r+  r   r   r   r    r!   viewsr"   r#   find_dialogr$   rS   r%   __all__rY   optionsBROWSE_COMMANDr  r'   maxget_intr)   r>   r,   r8   r]   r^   rk   QMainWindowr&   r  QDialogr   r  r9   r7   <module>r     s   # " " " " "                                                            > > > > > > > > 5 5 5 5 5 5 5 5 ! ! ! ! ! ! < < < < < <         
              / . . . . . . . & & & & & &             
!"-m>>CEM)).+FFGG	S     b
 b
 b
 b
 b
)/ b
 b
 b
J/ / / /'" '" '" '" '""M '" '" '" '" '"r9   