
    n$Pj                        d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 dZ
ddZddZdd	Zdd
ZddZdddZddZedk(  r e        yy)a  Compact JavaFX state summary for live MCSJ AgentV4.

Avoids repeatedly loading multi-megabyte FXTREE output into an operator session.
Read-only: requests FXTREE and prints only visible panels, tabs, tables,
focused nodes, buttons, editable controls, and unique visible row text.
    )annotationsN)Path)Any)Button	TextField	MaskField
DatePickerComboBoxEditingCellTextEditingCellCheckBoxRadioButtonc                   t        j                  | |f|      5 }|j                  |       |j                  d       |j	                  t         j
                         g }	 |j                  d      }|sn|j                  |       &	 d d d        t        j                  dj                        j                  dd            S # 1 sw Y   >xY w)N)timeouts   FXTREE
i       utf-8replace)errors)socketcreate_connection
settimeoutsendallshutdownSHUT_WRrecvappendjsonloadsjoindecode)hostportr   sockchunksdatas         C:/MCSJAgent/mcsj-fx-summary.pyrequest_treer&      s    		!	!4,	@D [!fnn% 99U#DMM$	   
A ::chhv&--gi-HII 
A	@s   A+CCc              #     K   t        | t              r3|  | j                  dg       xs g D ]  }t        |      E d {     y t        | t              r| D ]  }t        |      E d {     y y 7 37 
w)Nchildren)
isinstancedictgetwalklist)nodechilds     r%   r,   r,   $   sp     $
XXj"-33EE{"" 4	D$	EE{""  
  # #s!   <A6A2*A6)A4*	A64A6c                v    dj                  t        | xs d      j                         j                               S )N  )r   strstripsplit)values    r%   
clean_textr7   .   s,    88C$**,22455r   c                   dt        | j                  dd            j                  d      d   i}dD ]4  \  }}| j                  |      }|dk(  rt        |      }|d ddg fvs0|||<   6 | j                  d      rI| d   D cg c]7  }t        |j                  d            st        |j                  d            9 c}|d<   |S c c}w )	Nclassr2   .))idr<   )textr=   )focusedr>   )disabledr?   )rowCountrows)columnsrB   )selectedTabTextselected_tabr=   Ftabs)r3   r+   r5   r7   )r.   outsourcetargetr6   ts         r%   
node_briefrJ   2   s    "C"(=$>$D$DS$I"$MNCX  Vu%Er5"--CKX xx:>v,d,Q*UVUZUZ[aUbJcz!%%-0,dFJ es   C!Cc                   | j                  d      xs i j                  d      xs i }g }g }g }g }t               }t        |      D ]  }|j                  d      du rt        |j                  dd            t	        |      }|j                  d      r|j                  |       dv rd	vrd
|v sd|v rg }	t               }
t        |j                  dg             D ]r  }|j                  d      du rt        |j                  d            }|s4||
vs9||j                  d      xs g vsQ|
j                  |       |	j                  |       t |}|	r|	d d |d<   |j                  |       dv r3|j                  d      s|j                  d      r|j                  |       t        fdt        D              sz|j                  d      |j                  d      |j                  d      |j                  d      |j                  d      f}||vs|j                  |       |j                  |        | j                  dd      j                  d      d   | j                  d      ||||dS )NscenerootvisibleFr9   r2   r>   TableCellr@   rB   r(   r=   (   visible_textTabPanerE   rC   c              3  &   K   | ]  }|v  
 y w)N ).0tokenclss     r%   	<genexpr>z"summarize_panel.<locals>.<genexpr>`   s     8u|s   r<   r?   
panelClassr:   r;   panelBounds)panelboundsr>   rE   tablescontrols)r+   setr,   r3   rJ   r   r7   addanyCONTROL_TOKENSr5   )r\   rM   r_   r^   rE   r>   seen_controlsr.   briefrow_text	seen_text
descendantr=   itemkeyrX   s                  @r%   summarize_panelrk   A   s@   YYw%2**628bD%'H#%F!#D$&G #MT
88I%'$((7B'(4 88INN5!c>fC/Z45G9X\K\"$H"%%I"488J#;<
>>),5!*.."89D	1d488ICVC\Z\6]MM$'OOD) = D'/}^$MM$&!1TXX>O5PKK88899W%uyy		&8I599U^K_afajajkuavwC-'!!#&&7 < <,2237;))M* r   c                    | j                  dg       xs g }|r|d d n|}| j                  dt        |            t        |      |D cg c]  }t        |       c}dS c c}w )Npanels   jfxPanelCount)jfx_panel_countpanels_returnedrm   )r+   lenrk   )treetop_onlyrm   selectedr\   s        r%   	summarizerv   p   sf    XXh#)rF%vbqz6H88OS[Ax=7?@xe?5)x@  As   Ac                    t        j                  d      } | j                  dd       | j                  dt        d       | j                  d	t        d
       | j                  dd       | j                  ddd       | j                  dd       | j                         }|j                  r8t        j                  t        |j                        j                  d            n*t        |j                  |j                  |j                        }t        t        j                   t#        ||j$                        |j&                  rdnd |j&                  rd nd             y )NzPrint compact MCSJ JavaFX state)descriptionz--hostz	127.0.0.1)defaultz--portiI&  )typery   z	--timeoutg      4@z--filez@Summarize a saved FXTREE JSON file instead of querying live MCSJ)helpz--top
store_truez&Return only the first/top JavaFX panel)actionr{   z--pretty)r}   r   )encoding)rt      ),:)indent
separators)argparseArgumentParseradd_argumentintfloat
parse_argsfiler   r   r   	read_textr&   r    r!   r   printdumpsrv   toppretty)parserargsrs   s      r%   mainr   z   s2   $$1RSF
+6
sD9
%>
'ij
;cd

<8DFJii4::d499o///ABUabfbkbkmqmvmvx|  yE  yE  VFD	$**Ytdhh7T[[VZosozozgk  AK  L  Mr   __main__)r    r3   r!   r   r   r   returndict[str, Any])r.   r   )r6   r   r   r3   )r.   r   r   r   )r\   r   r   r   )F)rs   r   rt   boolr   r   )r   None)__doc__
__future__r   r   r   r   pathlibr   typingr   rc   r&   r,   r7   rJ   rk   rv   r   __name__rU   r   r%   <module>r      s_    #     J#6,^M zF r   