+
    Ki(8  c                   s&   ^ RI H t  ^ RIHt ^ RIHtHtHtHtHt ^ RI	H
t
Ht ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHtHt ^ RIHt ^ RIHtH t  ^ RI!H"t"H#t#H$t$ ]! R4      t% ! R R]PL                  4      t' ! R R]4      t(R# )    )copy)gettext)CallableDictListOptionalTuple)GObjectGtk)runnersservices)
categories)games)saved_searchesSavedSearch)InvalidSearchTermError)QuestionDialogSavableModelessDialog)has_stock_icon)
FLAG_TEXTS
GameSearch)AndPredicateSearchPredicateformat_flagzNew Saved Searchc                   s8  a a ] tR t^t oRtR]P                  R]33/tRV3R lV 3R lllt	RV3R lR llt
R tR	 tR
 tV3R lR ltV3R lR ltR tR tR tR tV3R lR ltR tR tR t]R 4       t]P4                  R 4       tV3R lR ltRtVtV ;t# )SearchFiltersBoxz#A widget to edit dynamic categoriessavedNc                sD   < V ^8  d   QhRS[ RS[P                  RS[RR/# )   saved_searchsearch_entrycan_savereturnN)r   r	   ZSearchEntryboolZformat__classdict__   "H/usr/lib/python3.14/site-packages/lutris/gui/config/edit_saved_search.py__annotate__SearchFiltersBox.__annotate__   s/     6 6[ 6 6bf 6rv 6    c                s  < \         SV `  \        P                  P                  R 7       \        V4      V n        \        V4      V n        V P                  P                  '       g   \        V P                  n        V P                  P                  V n
        V P                  R4       V P                  ^4       V P                  ^4       V P                  ^4       V P                  ^4       V P!                  ^
4       T P#                  \%        R4      V P                  P                  V'       d   . ROMRV P&                  4      V n        T;'       g&    V P#                  \%        R4      V P                  4      V n        V P*                  P-                  RV P.                  4       / V n        RV n        \        P4                  ! \        P                  P6                  ^R7      p\        P8                  ! ^^R7      V n        V P=                  4        \        P>                  ! RR	7      pVPA                  \        PB                  PD                  \        PB                  PD                  4       \        PF                  ! RR	7      pVPI                  4       PK                  R
4       VPM                  V4       \        P4                  ! \        P                  P                  R 7      V n'        VPM                  V PN                  4       \        P4                  ! \        P                  P                  ^R7      pVPQ                  \        PR                  ! \%        R4      \        PT                  PV                  R7      RR^ 4       VPQ                  VRR^ 4       V PY                  4        V P[                  4        VPQ                  V P:                  RR^ 4       VPQ                  VRR^ 4       V PQ                  VRR^ 4       V P]                  4        R# ))orientationFZNameNZSearchchangedr)   Zspacing)Zrow_spacingZcolumn_spacingT)Zvisiblez
info-frameZ
Categories)labelhalign)ztag-symbolicz
poi-markerzfavorite-symbolic)/super__init__r	   OrientationZVERTICALr   r   original_searchnameDEFAULT_NEW_SEARCH_NAMEsearchset_homogeneousZset_margin_topZset_margin_bottomZset_margin_startZset_margin_endset_spacing_add_entry_box_on_save
name_entryr   connecton_search_entry_changedpredicate_widget_functionsupdating_predicate_widgetsBox
HORIZONTALZGrid
flags_grid_add_flag_widgetsZScrolledWindowZ
set_policyZ
PolicyTypeZ	AUTOMATICZFrameget_style_context	add_classaddcategories_box
pack_startLabelAlignSTART_add_category_widgetsupdate_predicate_widgetsZshow_all)	selfr   r   r   Zpredicates_boxZcategories_scrolled_windowZcategories_frameZcategories_frame_box	__class__s	   &&&&    r%   r/   ZSearchFiltersBox.__init__   s   S__%=%=> .#L1  %%%%<D"''..U#Br"b!B--fI""CK?QULL	
 )YYD,?,?(T[[,Y!!)T-I-IJXZ'*/'S__-G-GQRS((qC %(%7%7%E""--cnn.F.FH`H`a99T2**,66|D78!gg#//2J2JK"&&t':':;"ww3??3K3KUVW''		,PSPYPYP_P_(`bginpqr''(8$aH""$%%'!!$//5%C!!"6dAFdA6r(   c          
      s|   < V ^8  d   QhRS[ RS[ RS[S[S[ ,          ,          RS[S[,          RS[P
                  /# )r   r,   textbutton_icon_namesclickedr    )strr   r   r   r	   Entryr"   r$   r%   r&   r'   U   sH       #8@c8K]efn]o	r(   c                s*   \         P                  ! \         P                  P                  ^R7      p\         P                  ! VR7      pVP                  ^ R4       VP                  ^xR4       \         P                  ! 4       pVP                  V4       VP                  VRR^ 4       VP                  VRR^ 4       V'       d   V Uu. uF  p\        V4      '       g   K  VNK  	  ppV'       d   \         P                  P                  V^ ,          \         P                  P                  4      p	V	P                  4       P!                  R4       V'       d   V	P#                  RV4       VP%                  V	RR^ 4       V P                  VRR^ 4       V# u upi )	i   r+   )r,         ?FTZcircularrQ   )r	   r?   r0   r@   rH   set_alignmentset_size_requestrS   set_textrG   r   ButtonZnew_from_icon_nameZIconSizeZBUTTONrC   rD   r;   Zpack_end)
rM   r,   rO   rP   rQ   ZhboxZentry_labelZentryr2   buttons
   &&&&&     r%   r7   ZSearchFiltersBox._add_entry_boxU   s+    ww3??#=#=qIiie,!!!S)$$S"-		tUE15tT1-2C \2C$~VZG[2C \ 667H7KS\\M`M`a((*44Z@NN9g6feUA6eUA. !]s   FFc                s&    V P                  4        R # N)rL   )rM   _widget   &&r%   r<   Z(SearchFiltersBox.on_search_entry_changedm   s    %%'r(   c                s`   V P                   '       g    R V n         V P                  P                  4       V n        \	        V P                  4      P                  4       pV P                  P                  4        F  w  r#V! V4       K  	  RV n         R# R#   \         d     Li ; i  RT n         i ; i)TFN)	r>   r   get_textr4   r   get_predicater=   itemsr   )rM   	predicateZ_controlZfuncs   &   r%   rL   Z)SearchFiltersBox.update_predicate_widgetsp   s    ...
826/"//88:&t{{3AAC	&*&E&E&K&K&MNHO 'N
 38/ / *  38/s$   A4B B!B$  B!!B$ $	B-c                sL   V P                  ^ 4       V P                  ^4       V P                  ^4       V P                  ^\	        R4      R4       V P                  ^\	        R4      R4       V P                  ^\	        R4      R4       V P                  ^\	        R4      R4       R	# )
r    Z	InstalledZ	installedZFavoriteZfavoriteZHiddenZhiddenZCategorizedZcategorizedN)_add_service_widget_add_runner_widget_add_platform_widget_add_flag_widgetr8   )rM   s   &r%   rB   Z"SearchFiltersBox._add_flag_widgets~   s      #"!!!$a;=a:
;a8h7a=!1=Ar(   c                s6   < V ^8  d   QhRS[ RS[S[,          /# )r   tagflag)rR   r   r!   r"   r$   r%   r&   r'      s     4 4s 4(4. 4r(   c                sB   \        V P                  4      pVP                  W4      pV'       dq   VP                  4       P	                  V4      p\        WT.4      P                  4       p\        V4      V n        V P                  P                  V P                  4       R # R # r[   )
r   r4   Zget_flag_predicater_   without_flagr   simplifyrR   r   rX   )rM   rf   rg   game_searchZflag_predicatera   s   &&&   r%   _change_search_flagZ$SearchFiltersBox._change_search_flag   sz     -$77B#113@@EI$i%@AJJLIi.DK&&t{{3	 r(   c                s    < V ^8  d   QhRS[ /# )r   rf   )rR   r"   r$   r%   r&   r'      s     0 0s 0r(   c                s    \        V P                  4      P                  4       P                  V4      p\	        V4      V n        V P
                  P                  V P                  4       R # r[   )r   r4   r_   rh   rR   r   rX   )rM   rf   ra      && r%   _remove_search_flagZ$SearchFiltersBox._remove_search_flag   sG    t{{+99;HHM	)n""4;;/r(   c                s0  a aa VV V3R  lpVV3R lp\         P                  ! V\         P                  P                  \         P                  P                  R7      pVP                  ^ R4       VP                  ^xR4       S P                  P                  V^ V^^4       \        R4      R3\        R4      R3\        R4      R	3.pS P                  V4      oVS P                  S&   S P                  P                  S^V^^4       SP                  R
V4       R# )c                 s   < SP                   '       gJ   SP                  4       pVR 8X  d   SP                  S4       R# SP                  S\        V,          4       R# R#  N)r>   get_active_idrm   rk   r   )r\   	active_idcomboboxrM   rf   s   & r%   on_combobox_changeZ=SearchFiltersBox._add_flag_widget.<locals>.on_combobox_change   sL    222$224	?,,S1,,S*Y2GH 3r(   c                 s   < V P                  S4      '       d,   SP                  \        V P                  S4      4      4       R# SP                  R 4       R# rn   )Zhas_flagset_active_idr   Zget_flag)ra   rr   rf   s   &r%   populate_widgetZ:SearchFiltersBox._add_flag_widget.<locals>.populate_widget   s@    !!#&&&&{93E3Ec3J'KL&&r*r(   )r-   valignrT   -ro   ZYesZyesZNoZnor*   NrU   )r	   rH   rI   rJ   CENTERrV   rW   rA   attachr8   _create_comboboxr=   r;   )	rM   rowcaptionrf   rs   ru   r,   optionsrr   s	   f&&f    @r%   re   Z!SearchFiltersBox._add_flag_widget   s    	I	+ 		'#))//#))BRBRSAs#sB'uaa3 sVRLuXutWdO
 ((14C''1xCA6$67r(   c                s   \         P                  ! 4       P                  4        Uu. uF#  q"^,          ! 4       P                  V^ ,          3NK%  	  ppVP	                  R4       V P                  V\        R4      RVR R7       R# u upi )i   ZSourceZsourcec                 $    V P                  V4      # r[   )Zget_service_predicatesZvr]   r%   <lambda>Z6SearchFiltersBox._add_service_widget.<locals>.<lambda>   s    PQPgPghiPjr(   predicate_factoryN(none)Znone)r   Zget_enabled_servicesr`   r2   append_add_match_widgetr8   )rM   r{   r   r}      &&  r%   rb   Z$SearchFiltersBox._add_service_widget   sq    080M0M0O0U0U0WX0W1aDFKK1&0WX)*8hCj 	 	
 Ys   )Bc                s    \         P                  ! 4        Uu. uF  q"P                  VP                  3NK  	  ppVP	                  R4       V P                  V\        R4      RVR R7       R# u upi )r   ZRunnerZrunnerc                 r~   r[   )Zget_runner_predicater   r]   r%   r   Z5SearchFiltersBox._add_runner_widget.<locals>.<lambda>   s    PQPfPfghPir(   r   Nr   )r
   Zget_installedZ
human_namer2   r   r   r8   )rM   r{   Zrr}   r   r%   rc   Z#SearchFiltersBox._add_runner_widget   sb    3:3H3H3JK3JaLL!&&)3JK)*8hCi 	 	
 Ls    A-c                s    \         P                  ! 4        Uu. uF  q"V3NK  	  ppVP                  R4       V P                  V\	        R4      RVR R7       R# u upi )r   ZPlatformZplatformc                 r~   r[   )Zget_platform_predicater   r]   r%   r   Z7SearchFiltersBox._add_platform_widget.<locals>.<lambda>   s    TUTlTlmnTor(   r   Nr   )games_dbZget_used_platformsr   r   r8   )rM   r{   pr}   r   r%   rd   Z%SearchFiltersBox._add_platform_widget   sY    #+#>#>#@A#@aq6#@A)*:
GGo 	 	
 Bs   Ac                sX   < V ^8  d   QhRS[ RS[RS[RS[S[S[S[3,          ,          /# )r   r{   r|   rf   r}   )ZintrR   r   r   r"   r$   r%   r&   r'      s;     8 8S 83 8S 84PUVY[^V^P_K` 8r(   c                s  a aaa	 V	VV V3R  lpV	V3R lp\         P                  ! V\         P                  P                  \         P                  P                  R7      pS P
                  P                  V^ V^^4       \        R4      R3.V,           pS P                  V4      o	VS P                  S	&   S P
                  P                  S	^V^^4       S	P                  RV4       R# )c                 sv  < SP                   '       g   \        SP                  4      pVP                  4       P	                  S4      pSP                  4       pV'       d#   S! W4      p\        W$.4      P                  4       p\        V4      Sn        SP                  P                  SP                  4       R # R # r[   )r>   r   r4   r_   without_matchrp   r   ri   rR   r   rX   )	r\   rj   ra   rq   r   rr   r   rM   rf   s	   &    r%   rs   Z>SearchFiltersBox._add_match_widget.<locals>.on_combobox_change   s    222(5'557EEcJ	$224	)+AA ,i^ < E E GI!)n!!**4;;7 3r(   c                 s   < V P                  S4      pV'       d   SP                  V^ ,          4       R# SP                  R4       R# )r    ro   N)get_matchesrt   )ra   Zmatchesrr   rf      & r%   ru   Z;SearchFiltersBox._add_match_widget.<locals>.populate_widget   s6    ++C0G&&wqz2&&r*r(   )r,   r-   rv   rw   ro   r*   N)r	   rH   rI   rJ   rx   rA   ry   r8   rz   r=   r;   )
rM   r{   r|   rf   r}   r   rs   ru   r,   rr   s
   f&&f&f   @r%   r   Z"SearchFiltersBox._add_match_widget   s    		8 		8	+ 						HXHXYuaa3cFB<.7*((14C''1xCA6$67r(   c                s    \         P                  ! 4        F;  pVR ,          p\         P                  ! V4      '       d   K*  V P                  W"4       K=  	  R# )r2   N)categories_dbZget_categoriesZis_reserved_category_add_category_widget)rM   categorycategory_names   &  r%   rK   Z&SearchFiltersBox._add_category_widgets   s>    %446H$V,M 55mDD))-G 7r(   c                s   a aa \         P                  ! V4      oVVV 3R  lpVV3R lpVS P                  S&   S P                  P	                  SRR^ 4       SP                  RV4       R# )c                 s  < SP                   '       g   \        SP                  4      pVP                  4       P	                  R S4      pSP                  4       '       d,   VP                  S4      p\        W#.4      P                  4       p\        V4      Sn        SP                  P                  SP                  4       R# R# r   N)r>   r   r4   r_   r   Z
get_activeZget_category_predicater   ri   rR   r   rX   )r\   rj   ra   Zcategory_predicater   checkboxrM   s   &   r%   on_checkbox_toggledZBSearchFiltersBox._add_category_widget.<locals>.on_checkbox_toggled   s    222(5'557EEjR_`	&&(()4)K)KM)Z& ,i-L M V V XI!)n!!**4;;7 3r(   c                 sR   < SV P                  R 4      9   pSP                  V4       R# r   )r   Z
set_active)ra   Zmatchedr   r   r   r%   ru   Z>SearchFiltersBox._add_category_widget.<locals>.populate_widget   s&    #y'<'<Z'HHG(r(   FZtoggledN)r	   ZCheckButtonr=   rF   rG   r;   )rM   r|   r   r   ru   r   s   f&f  @r%   r   Z%SearchFiltersBox._add_category_widget   sY    ??7+	8	) 5D''1&&xqA$78r(   c                s6   \         P                  ! \        \        4      pV F  pVP                  V4       K  	  \         P                  P                  V4      pVP                  ^ 4       VP                  ^4       VP                  \         P                  P                  4       VP                  \         P                  P                  4       VP                  ^R4       \         P                  ! 4       pVP                  VR4       VP!                  VR^ 4       V# )r    TrO   rU   )r	   Z	ListStorerR   r   ZComboBoxZnew_with_modelZset_entry_text_columnZset_id_columnZ
set_halignrI   rJ   Z
set_valignrx   rW   ZCellRendererTextrG   Zadd_attribute)rM   r}   Z	liststoreZoptionrr   Zrenderer_texts   &&    r%   rz   Z!SearchFiltersBox._create_combobox  s    MM#s+	FV$  <<..y9&&q)q!CIIOO,CII,,-!!#r*,,.M40}fa8r(   c                s    V P                   P                  4       ;'       g    V P                  P                  p\        P
                  ! V4      # r[   )r:   r^   r1   r2   r   strip_saved_search_name)rM   r2   s   & r%   search_nameSearchFiltersBox.search_name  s9    '')FFT-A-A-F-F55d;;r(   c                s    \         P                  ! V4      pV P                  P                  V4       WP                  n        R # r[   )r   r   r:   rX   r   r2   )rM   Zvaluer]   r%   r   r     s0    66u=  '!&r(   c                8   < V ^8  d   QhRS[ P                  RR/# )r   _buttonr    Nr	   rY   r"   r$   r%   r&   r'     s     ( (szz (d (r(   c                s   V P                   pW P                  n        \        \	        V P
                  P                  4       4      4      V P                  n        V P                  P                  V P                  P                  8w  d`   \        P                  ! V P                  P                  4      '       d0   \        \        R4      V P                  P                  ,          4      hV P                  P                  '       g   V P                  P                  4        M5V P                  V P                  8w  d   V P                  P                  4        \         V n         V P#                  RV4       R# )"Save game info and destroy widget.z'%s' is already a saved search.r   N)r   r   r2   rR   r   r   r^   r4   r1   r   Zget_saved_search_by_nameZRuntimeErrorr8   saved_search_idrE   Zupdater3   Zemit)rM   r   r   rl   r%   r9   ZSearchFiltersBox.on_save  s    &&!,#&z$2C2C2L2L2N'O#P $$(9(9(>(>>66t7H7H7M7MNN"1%F#G$J[J[J`J`#`aa  000!!#!!T%6%66$$&2		';'r(   )
rF   rA   r:   r1   r=   r   r4   r   r   r>   )NT)NN)__name__
__module____qualname____firstlineno____doc__r   ZSIGNAL_RUN_FIRSTrR   Z__gsignals__r/   r7   r<   rL   rB   rk   rm   re   rb   rc   rd   r   rK   r   rz   Zpropertyr   Zsetterr9   __static_attributes____classdictcell____classcell__rN   r#      @@r%   r   r      s     - 	'**D3&9L6 6p 0(8B4 40 0
8>


8 88H9*" < < ' '
( ( (r(   r   c                   sZ   a a ] tR tRt oRtV3R lV 3R lltV3R lR ltR tRtVt	V ;t
# )	EditSavedSearchDialogi4  z A dialog to edit saved searches.c                s$   < V ^8  d   QhRS[ RR/# )r   r   r    Nr   r"   r$   r%   r&   "EditSavedSearchDialog.__annotate__7  s     \ \[ \T \r(   c                s(  < \        VR R7      V n        \        V4      V n        \        V4      V n        V P                  P
                  '       g   \        V P                  n        \        R4      V P                  P
                  ,          p\        SV `%  W1^
R7       V P                  RR
4       V P                  4       pVP                  R 4       VP                  ^
4       VP                  V P                  RR^ 4       V P                  \         P"                  \         P$                  P&                  RR7      pVP)                  RV P*                  4       V P                  P,                  '       d   VP/                  4        R	# VP1                  4        R	# )F)r   zConfigure %s)parentZborder_widthiX  Tzdestructive-action)Z	css_classrQ   NrU   )r   
filter_boxr   r   r1   r2   r3   r8   r.   r/   Zset_default_sizeZget_content_arear5   r6   rG   Zadd_styled_buttonr	   ZSTOCK_DELETEResponseTypeZNONEr;   on_delete_clickedr   ZshowZhide)rM   r   r   titleZcontent_areaZdelete_buttonrN   s   &&&   r%   r/   ZEditSavedSearchDialog.__init__7  s2   *<%H .#L1  %%%%<D".!D$5$5$:$::B?c2&,,.$$U+  $tQ?..s/?/?AQAQAVAVbv.wi)?)?@ $ 1 1 A A A}GYGYG[r(   c                r   )r   rZ   r    Nr   r"   r$   r%   r&   r   K  s      cjj T r(   c                s\    V P                   P                  V4       V P                  4        R# )r   N)r   r9   destroy)rM   rZ   r]   r%   r9   ZEditSavedSearchDialog.on_saveK  s    'r(   c                s,   \        R \        R4      V P                  P                  ,          R\        R4      RV /4      pVP                  \
        P                  P                  8X  d-   V P                  P                  4        V P                  4        R# R# )r   z,Do you want to delete the saved search '%s'?Zquestionz]This will permanently destroy the saved search, but the games themselves will not be deleted.r   N)r   r8   r1   r2   Zresultr	   r   ZYESr   Zremover   )rM   r   Zdlgrl   r%   r   Z'EditSavedSearchDialog.on_delete_clickedP  s{    IJTMaMaMfMffAs $
 ::))---$$&LLN .r(   )r   r1   r   )r   r   r   r   r   r/   r9   r   r   r   r   r   r   r%   r   r   4  s(     *\ \( 
 r(   r   N))r   r   r8   Ztypingr   r   r   r   r   Zgi.repositoryr   r	   Zlutrisr
   r   Zlutris.databaser   r   r   r   r   Zlutris.database.saved_searchesr   Zlutris.exceptionsr   Zlutris.gui.dialogsr   r   Zlutris.gui.widgets.utilsr   Zlutris.searchr   r   Zlutris.search_predicater   r   r   r3   r?   r   r   ) r(   r%   <module>r      sa       8 8 & $ 7 - * 6 4 D 3 0 N N./ [(sww [(|(1 (r(   