
    aiE              	          S r SSKrSSKJr  SSKJrJr  SSSSS.S jr	S/S	 jr
 S/S
 jrSSS.S jrS/S jrS rS rS rS rS rS r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rSSS .rS!S"S .rS0S#\S$\S%\S&\4S' jjrS(\S$\S)\4S* jrS+ r\" S\\S,9\" S!\\S,9\" S\\S,9\" S"\\S,94r \!S-:X  a  SS.K"J#r#  \  H  r$\#" \$5        M     gg)1)
add_closure_zoneadd_color_mix_node!add_foreach_geometry_element_zoneadd_node_typeadd_node_type_with_outputs"add_node_type_with_searchable_enum)add_node_type_with_searchable_enum_socketadd_repeat_zoneadd_simulation_zonedraw_node_group_add_menu    N)Menu)pgettext_ifacecontexts        Tlabelpollsearch_weight	translatec          	      2    [         R                  U UUUUUS9$ )zAdd a node type to a menu.r   )AddNodeMenunode_operator)layout	node_typer   r   r   r   s         [/home/wildlama/Downloads/blender-5.1.2-linux-x64/5.1/scripts/startup/bl_ui/node_add_menu.pyr   r      s,    $$# %      c                 0    [         R                  XX#U5      $ N)r   "node_operator_with_searchable_enum)contextr   node_idnameproperty_namer   s        r   r   r   '   s    99';gtuur   c                 0    [         R                  XX#XE5      $ r   )r   )node_operator_with_searchable_enum_socket)r    r   r!   socket_identifier
enum_namesr   s         r   r   r   +   s     @@ r   r   r   c          	      2    [         R                  U UUUUUS9$ )Nr'   )r   node_operator_with_outputs)r    r   r   subnamesr   r   s         r   r   r   8   s,    11# 2  r   c                 *    [         R                  XUS9$ )Nr   )r   color_mix_node)r    r   r   s      r   r   r   C   s    %%g]%SSr   c                 ,    [         R                  U 5      $ r   )r   new_empty_group)r   s    r   add_empty_groupr0   G   s    &&v..r   c                 ,    [         R                  X5      $ )z>Add items to the layout used for interacting with node groups.)r   draw_group_menu)r    r   s     r   r   r   K   s    &&w77r   c                 R    U R                  SU[        R                  S9nSUl        U$ )zAdd simulation zone to a menu.znode.add_simulation_zonetext	text_ctxtToperatori18n_contextsdefaultuse_transformr   r   propss      r   r
   r
   P   s*    OO6UmNcNcOdEELr   c                 R    U R                  SU[        R                  S9nSUl        U$ )Nznode.add_repeat_zoner4   Tr7   r<   s      r   r	   r	   W   s*    OO2-J_J_O`EELr   c                 R    U R                  SU[        R                  S9nSUl        U$ )Nz&node.add_foreach_geometry_element_zoner4   Tr7   r<   s      r   r   r   ]   s3    OO0''  E
 ELr   c                 R    U R                  SU[        R                  S9nSUl        U$ )Nznode.add_closure_zoner4   Tr7   r<   s      r   r   r   g   s3    OO''  E
 ELr   c                   p   \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   \\S'   \\\4   \S	'   \	S
 5       r
\	SSSSS.S j5       r\	SS j5       r\	 SS j5       r\	SSS.S j5       r\	SS j5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       rSrg)NodeMenuq   zJA base-class defining the shared methods for AddNodeMenu and SwapNodeMenu.draw_assetsr;   main_operator_idzone_operator_idnew_empty_group_operator_idroot_asset_menupathing_dictc                 4    UR                   R                  S:H  $ )NNODE_EDITOR)
space_datatype)clsr    s     r   r   NodeMenu.poll}   s    !!&&-77r   Nr   Tr   c                   [         R                  R                  R                  U5      nU(       d  U(       a  UR                  O
[        S5      nUSL d  Ucj  U(       a  UR                  O[        R                  nUR                  U R                  UUUUS9n	X)l        [        U	S5      (       a  U R                  U	l        U	$ g)zyThe main operator defined for the node menu.
        
(e.g. 'Add Node' for AddNodeMenu, or 'Swap Node' for SwapNodeMenu).UnknownTN)r5   r6   r   r   r;   )bpytypesNodebl_rna_get_subclassnameiface_translation_contextr9   r:   r8   rE   rM   hasattrr;   )
rN   r   r   r   r   r   r   bl_rnarX   r=   s
             r   r   NodeMenu.node_operator   s    
 33I>#)FKKvi/@E4<4<@F&"<"<MLaLaOO$$-#+ $ E #Juo..&)&7&7#Lr   c                    / nUR                  U R                  X#US95        [        USS5      (       Ga  [        [        R                  U5      nUR
                  R                  U   R                  nUR
                  R                  U   R                   H  n	U R                  UUSR                  [        UR
                  R                  5      [        U	R                  U5      5      SUS9n
U
R                  R                  5       nXKl        [        U	R                  5      Ul        UR                  U
5        M     U H'  n
[#        U
S5      (       d  M  U R$                  U
l        M)     U$ )z\Similar to `node_operator`, but with extra entries based on a enum property while in search.r,   is_menu_searchF   {:s} ▸ {:s}r   r   r   r;   )appendr   getattrrR   rS   rZ   
propertiesrX   enum_items_staticformatrW   rV   settingsaddrepr
identifiervaluerY   r;   )rN   r    r   r!   r"   r   	operatorsr   rX   itemr=   props               r   r   +NodeMenu.node_operator_with_searchable_enum   s@    	**6m*\]7,e44		;7I"+"2"2"="=m"L"`"`!((33MBTT)),33y//445tyy*=> $"/ * 	 ~~))+)	!$//2
  ' U  Euo..&)&7&7#  r   c                 z   / nUR                  U R                  X#US95        [        USS5      (       a  [        [        R                  U5      nU H  n	U R                  UUSR                  [        UR                  R                  5      [        U	5      5      SUS9n
U
R                  R                  5       nSR                  [        R                  R                  U5      5      Ul        [        U	5      Ul        UR                  U
5        M     U H'  n
[        U
S5      (       d  M  U R                   U
l        M)     U$ )ZSimilar to `node_operator`, but with extra entries based on a enum socket while in search.r,   r]   Fr^   r_   zinputs["{:s}"].default_valuer;   )r`   r   ra   rR   rS   rd   rW   rZ   rV   re   rf   utilsescape_identifierrg   ri   rY   r;   )rN   r    r   r!   r%   r&   r   rj   r   	enum_namer=   rl   s               r   r$   2NodeMenu.node_operator_with_searchable_enum_socket   s    	**6m*\]7,e44		;7I'	)),33F9;K;K;P;P4QSYZcSde#"/ *  ~~))+<CCCIID_D_`qDrs	!)_
  ' ( Euo..&)&7&7#  r   r'   c                   [         R                  R                  R                  U5      nU(       d  U(       a  UR                  OSn/ nUR                  U R                  X#XVS95        [        USS5      (       aT  U HN  n	U R                  X#SR                  [        U5      [        U	5      5      USS9n
Xl
        UR                  U
5        MP     U H'  n[        US5      (       d  M  U R                  Ul        M)     U$ )ro   rQ   r'   r]   Fr^   )r   r   r   r;   )rR   rS   rT   rU   rV   r`   r   ra   rd   rW   visible_outputrY   r;   )rN   r    r   r   r*   r   r   rZ   rj   subname
item_propsr=   s               r   r)   #NodeMenu.node_operator_with_outputs   s     33I>#)FKKyE	**6E*gh7,e44# ..vHZHaHa5M6'?I4CP\a / c
,3)  ,	 $ Euo..&)&7&7#  r   c                    [        S5      n/ nU R                  USUSUS9nUR                  R                  5       nSUl        SUl        UR                  U5        [        USS5      (       Ga(  [        R                  R                  R                  R                  S   R                  n[        R                  R                  R                  R                  S   R                   H  n	U R                  USS	R                  U[        U	R                  U5      5      SUS9nUR                  R                  5       n
SU
l        SU
l        UR                  R                  5       n
SU
l        [!        U	R"                  5      U
l        UR                  U5        M     U H'  n[%        US
5      (       d  M  U R&                  Ul        M)     U$ )zOThe 'Mix Color' node, with its different blend modes available while in search.z	Mix ColorShaderNodeMixFr_   	data_typez'RGBA'r]   
blend_typer^   r;   )rW   r   re   rf   rV   ri   r`   ra   rR   rS   rz   rZ   rb   rX   rc   rd   rg   rh   rY   r;   )rN   r    r   r   r   rj   r=   opsrX   rk   rl   s              r   r-   NodeMenu.color_mix_node   s    {#	!!&/RWgt!unn  "	7,e44"%))"9"9"@"@"K"KL"Y"m"m		//66AA,Oaa))#,33tyy*=> $"/ * 	 ~~))+'	%
~~))+(	!$//2
  '# b& Euo..&)&7&7#  r   c                     UR                  U R                  S[        R                  SS9n[	        US5      (       a  U R
                  Ul        U$ )zFGroup Node with a newly created empty group as its assigned node-tree.z	New GroupADD)r5   r6   iconr;   )r8   rG   r9   r:   rY   r;   )rN   r   r=   s      r   r/   NodeMenu.new_empty_group  sQ     ++#++	   
 5/**"%"3"3Er   c                 V   UR                   nUR                  nUR                  R                  n/ nUR	                  U R                  U5      5        XER                  5       ;   a4  UR                  5         U R                  US5        U R                  US5        U(       Ga  SSK	J
n  [        R                  R                  nUR                  n	UR                  R                   V
s/ s Hb  n
U
R                  UR                  :X  d  M  U
R!                  U5      (       a  M7  U	(       d"  U
R"                  R%                  S5      (       a  M`  U
PMd     nn
U(       Ga   UR                  5         U GH	  n
U
R&                  (       a  SOSnU R                  UXzR                     U
R"                  US9nUR(                  R+                  5       nS	Ul        S
R-                  U
R"                  5      Ul        UR(                  R+                  5       nSUl        [1        U
R2                  5      Ul        UR(                  R+                  5       nSUl        [1        U
R"                  5      Ul        UR	                  U5        GM     U H'  n[5        US5      (       d  M  U R6                  Ul        M)     U$ s  sn
f )z5Show operators used for interacting with node groups.NodeGroupInputNodeGroupOutputr   )node_tree_group_type.g      r   r'   	node_treezbpy.data.node_groups[{!r}]widthrV   r;   )rL   	edit_tree
blend_datanode_groupsr`   r/   values	separatorr   nodeitems_builtinsr   rR   r    preferencesshow_hidden_ids	bl_idnamecontains_treerV   
startswithis_linked_packedre   rf   rd   ri   rg   default_group_node_widthrY   r;   )rN   r    r   
space_noder   all_node_groupsrj   r   prefsshow_hiddengroupgroupsr   r=   r}   s                  r   r2   NodeMenu.draw_group_menu)  s1    ''
((	!,,88	,,V45..00f&67f&78?KK++E//K $+#5#5#A#A#A%OOy':':: ++I6  !

(=(=c(B #A     "#E,1,B,BDM--,__=#jj&3	 . E  ..,,.C*CH < C CEJJ OCI..,,.C&CH $U%C%C DCI..,,.C%CH $UZZ 0CI$$U+# $& Euo..&)&7&7#  ?s   $J&J&%J&J&c                     U R                   c  [        SR                  U 5      5      eUR                  U R                   U   5        g)z
Takes the given menu path and draws the corresponding menu.
Menu paths are either explicitly defined, or based on bl_label if not.
Nz#`pathing_dict` was not set for {!s})rI   
ValueErrorrd   menu)rN   r   paths      r   	draw_menuNodeMenu.draw_menu_  s>     #BII#NOOC$$T*+r   c                     UR                  U R                  [        U5      SS9nSUl        SUl        SUl        [        US5      (       a  U R                  Ul        U$ )NFr5   r   GeometryNodeSimulationInputGeometryNodeSimulationOutputTr;   r8   rF   rW   input_node_typeoutput_node_typeadd_default_geometry_linkrY   r;   rN   r   r   r=   s       r   simulation_zoneNodeMenu.simulation_zonej  sY     4 46%=TYZ =!?*.'5/**"%"3"3Er   c                     UR                  U R                  [        U5      SS9nSUl        SUl        SUl        [        US5      (       a  U R                  Ul        U$ )NFr   GeometryNodeRepeatInputGeometryNodeRepeatOutputTr;   r   r   s       r   repeat_zoneNodeMenu.repeat_zonev  sY     4 46%=TYZ 9!;*.'5/**"%"3"3Er   c                     UR                  U R                  [        U5      SS9nSUl        SUl        SUl        [        US5      (       a  U R                  Ul        U$ )NFr   'GeometryNodeForeachGeometryElementInput(GeometryNodeForeachGeometryElementOutputr;   r   r   s       r   for_each_element_zoneNodeMenu.for_each_element_zone  sY     4 46%=TYZ I!K*/'5/**"%"3"3Er   c                     UR                  U R                  [        U5      SS9nSUl        SUl        SUl        [        US5      (       a  U R                  Ul        U$ )NFr   NodeClosureInputNodeClosureOutputr;   r   r   s       r   closure_zoneNodeMenu.closure_zone  sY     4 46%=TYZ 2!4*/'5/**"%"3"3Er   c                 ^    U R                   (       a  UR                  U R                  5        g g r   )rD   menu_contentsrH   )rN   r   s     r   draw_root_assetsNodeMenu.draw_root_assets  s"    ??  !4!45 r    r   )__name__
__module____qualname____firstlineno____doc__bool__annotations__strdictclassmethodr   r   r   r$   r)   r-   r/   r2   r   r   r   r   r   r   __static_attributes__r   r   r   rB   rB   q   sf   T!$$sCx. 8 8 7;$VYei  4  <   B W[kn  , $ $L   3 3j , , 	 	 	 	 	 	 	 	 6 6r   rB   c                   <    \ rS rSrSrSrSrSrSrSr	\
S 5       rSrg	)
r   i  Tznode.add_nodeznode.add_zoneznode.add_empty_groupNODE_MT_node_add_root_catalogsc                 H    U R                   (       a  UR                  USS9  g g )Nr   catalog_pathr8   rD   template_node_asset_menu_itemsrN   r   r   s      r   draw_assets_for_catalog#AddNodeMenu.draw_assets_for_catalog  s"    ??11|V[1\ r   r   N)r   r   r   r   rD   r;   rE   rF   rG   rH   r   r   r   r   r   r   r   r     s7    KM&&"86O] ]r   r   c                   8    \ rS rSrSrSrSrSrSr\	S 5       r
Srg	)
SwapNodeMenui  Tznode.swap_nodeznode.swap_zoneznode.swap_empty_groupNODE_MT_node_swap_root_catalogsc                 H    U R                   (       a  UR                  USS9  g g )NSWAPr   r   r   s      r   r   $SwapNodeMenu.draw_assets_for_catalog  s"    ??11|V\1] r   r   N)r   r   r   r   rD   rE   rF   rG   rH   r   r   r   r   r   r   r   r     s4    K ('"97O^ ^r   r   c                       \ rS rSrSrS rSrg)NODE_MT_group_basei  Groupc                 t    U R                   nU R                  X5        U R                  X R                  5        g r   )r   r2   r   bl_label)selfr    r   s      r   drawNODE_MT_group_base.draw  s+    W-$$V]];r   r   Nr   r   r   r   r   r   r   r   r   r   r   r     s    H<r   r   c                       \ rS rSrSrS rSrg)NODE_MT_layout_basei  Layoutc                     U R                   nU R                  USSS9  U R                  US5        U R                  X R                  5        g )N	NodeFramer,   NodeReroute)r   r   r   r   )r   _contextr   s      r   r   NODE_MT_layout_base.draw  sB    6;bA6=1$$V]];r   r   Nr   r   r   r   r   r     s    H<r   r   NODE_MT_group_addNODE_MT_category_layout)r   r   NODE_MT_group_swapNODE_MT_layout_swapr   templatelayout_baserI   c                 "    [        XU4XS.5      $ )N)r   rI   )rM   )r   r   r   rI   s       r   generate_menur     s    	k2)4jkkr   menus	base_dictc                    ^^ SS K nUR                  U5      m[        UU4S jU R                  5        5       5      n [        TU 5        U $ )Nr   c              3   D   >#    U  H  u  p[        UTUT5      v   M     g 7fr   )r   ).0r   r   rI   r   s      r   	<genexpr>!generate_menus.<locals>.<genexpr>  s)      &3"I 	i;EE&3s    )copytupleitemsgenerate_pathing_dict)r   r   r   r   rI   s    `  @r   generate_menusr    sB    99Y'L &+kkm E ,.Lr   c                     U H;  n[        US5      (       a  UR                  nOUR                  nUR                  X'   M=     g )N	menu_path)rY   r  r   r   )rI   r   r   r  s       r   r  r    s7    4%%II"&.. r   )r   r   __main__)register_classr   r   )%__all__rR   	bpy.typesr   bpy.app.translationsr   rW   r   r9   r   r   r   r   r   r0   r   r
   r	   r   r   rB   r   r   r   r   add_base_pathing_dictswap_base_pathing_dictr   r   r   r  r  classesr   	bpy.utilsr  rN   r   r   r   <module>r     s{  
   /3S\` 	v 
 OSbe T/8
l6t l6^	]( ] ^8 ^ < <<( < !'  "# lS lD lt lSW l$ $ 4 1 %I[\&K]^+kObc',L_`	 z(s  r   