+
     i=  c                   s   R t ^ RIHtHt ^ RIHtHt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 ^ R	IHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't' ^ R
I(H)t)H*t* ^ RI+H,t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2H3t3 ^ RI4H5t5 ^ RI6H7t7 ^ RI8H9t9 ^ RI:H;t;H<t<H=t=H>t> ]P~                  ! ]P                  4       R tA ! R R4      tBR# )zUser Interface.)DictCallable)Gtk	GtkSourceGdkGObject)get_data_path)InputCombinationMappingData)Autocompletion)Breadcrumbs)DeviceGroupSelection)MappingListBoxTargetSelection
CodeEditorRecordingToggleRecordingStatusAutoloadSwitchReleaseCombinationSwitchCombinationListboxAnalogInputSwitchTriggerThresholdInputOutputAxisSelectorReleaseTimeoutInputTransformationDrawAreaSlidersRelativeInputCutoffInputKeyAxisStackSwitcherRequireActiveMappingGdkEventRecorder)Stack	StatusBar)PresetSelection)
Controller)_)MessageBrokerMessageTypeUserConfirmRequest)gtk_iterationInjectorStateMessage)loggerCOMMIT_HASHVERSIONEVDEV_VERSIONc                s&    V P                  4        R# )z,Hide the about dialog without destroying it.T)hide)aboutr#      &&E/usr/lib/python3.14/site-packages/inputremapper/gui/user_interface.pyon_close_aboutr3   I   s    	JJL    c                   s   a  ] tR t^Ot o RtV 3R lR ltR tR tR tR t	R t
V 3R	 lR
 ltV 3R lR ltV 3R lR ltR tR tV 3R lR l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V tR# ) UserInterfacezThe input-remapper gtk window.c                s&   < V ^8  d   QhRS[ RS[/# )   message_broker
controller)r$   r"   Zformat__classdict__   "r2   __annotate__UserInterface.__annotate__R   s     (4 (4%(4 (4r4   c                s  a  VS n         VS n        \        P                  S P                  P                  \        P
                  S P                  P                  \        P                  S P                  P                  \        P                  S P                  P                  /S n        / S n        S P                   P                  \        P                  V 3R  l4       \         P"                  ! 4       S n        S P'                  4        S P)                  R4      S n        S P)                  R4      S n        S P)                  R4      S n        S P1                  4        S P3                  4        S P5                  4        S P7                  4        S P*                  P9                  4        S P)                  R4      P;                  ^ 4       \=        4        S P)                  R4      P;                  ^4       R# )c                 s$   < SP                  4       # N)closer#   selfs   &r2   <lambda>Z(UserInterface.__init__.<locals>.<lambda>e   s    tzz|r4   windowzabout-dialogzcombination-editorzvertical-wrapperN)r7   r8   r   ZKEY_qr?   ZKEY_rZrefresh_groupsZ
KEY_Deletestop_injectingZKEY_n
add_preset	shortcutsgtk_listeners	subscriber%   Z	terminater   ZBuilderbuilder	_build_uigetrC   r0   combination_editor_create_dialogs_create_components_connect_gtk_signals_connect_message_listenershowset_opacityr(   )rA   r7   r8   s   f&&r2   __init__ZUserInterface.__init__R   sT   
 -$ IIt,,IIt55NNDOO::IIt11	/
 35%%k&;&;=ST{{}"&((8"4!%.!9
.2hh7K.L!!!#&&(#$003 	 	#$003r4   c           	     s   \         P                  ! 4       p\        \        R4      R4      ;_uu_ 4       pVP	                  \        VP                  4       RR7      4       RRR4       \         P                  P                  \        P                  P                  4       V\         P                  4       \        R4      pV P                  P                  V4       V P                  P                  V 4       R#   + '       g   i     L; i)z/Build the window from stylesheet and gladefile.z	style.cssZrzUTF-8)ZencodingNzinput-remapper.glade)r   ZCssProviderZopenr   Zload_from_dataZbytesZreadZStyleContextZadd_provider_for_screenr   ZScreenZget_defaultZ#STYLE_PROVIDER_PRIORITY_APPLICATIONrI   Zadd_from_fileZconnect_signals)rA   Zcss_providerZfileZ	gladefiles   &   r2   rJ   ZUserInterface._build_ui|   s    (-,c22d''diikG(LM 3 	00JJ""$33	
 ""89	""9-$$T* 32s   +C44D	c           	     s   V P                   pV P                  p\        WV P                  R4      4       \	        WV P                  R4      4       \        WV P                  R4      4       \        WV P                  R4      4       \        VV P                  R4      RR7       \        VV P                  R4      RRR	7       \        WV P                  R
4      4       \        WV P                  R4      4       \        VVV P                  R4      V P                  R4      V P                  R4      4       \        WP                  R4      4       \        WV P                  R4      4       \        WV P                  R4      4       \        WV P                  R4      4       \        WV P                  R4      4       \!        WV P                  R4      4       \#        WV P                  R4      4       \%        WV P                  R4      4       \'        VVV P                  R4      V P                  R4      V P                  R4      4       \)        WV P                  R4      4       \+        WV P                  R4      4       \-        VVV P                  R4      V P                  R4      V P                  R4      4       \/        V P0                  V P                  R4      4       \3        VV P                  R 4      RR!7       \3        VV P                  R"4      RR!7       \3        VV P                  R#4      R$R!7       \5        WV P                  R%4      4      p\7        WV4      pVP9                  V P                  R&4      4       W@n        R'# )(z?Setup all objects which manage individual components of the ui.Zdevice_selectionZpreset_selectionZselection_label_listboxztarget-selectorZselected_device_nameT)show_device_groupZselected_preset_name)rT   Zshow_presetZ
main_stackkey_recording_toggleZ
status_barZerror_status_iconZwarning_status_iconZrecording_statusZpreset_autoload_switchzrelease-combination-switchzcombination-listboxzanalog-input-switchztrigger-threshold-spin-btnzinput-cutoff-spin-btnzoutput-axis-selectorzeditor-stackZkey_macro_toggle_btnZanalog_toggle_btnzrelease-timeout-spin-buttonztransformation-draw-areaz
gain-scalezdeadzone-scalez
expo-scalezgdk-event-recorder-labeledit-combination-btn)Zrequire_recorded_inputZoutputdelete-mappingFcode_editorZcode_editor_containerN)r7   r8   r   rK   r!   r   r   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r   r   r
   Zset_relative_toautocompletion)rA   r7   r8   rX   rY   s   &    r2   rN   Z UserInterface._create_components   s   ,,__
^BT9UVDHH=O4PQ~488<U3VWDHH=N4OPHH+,"	

 	HH+,"		
 	n$((<*@ADHH=S4TUHH\"HH()HH*+	
 	1C(DE~488<T3UV 1M(N	
 	>txx@U7VW.dhh?T6UV1M(N	
 	!1H(I	
 	>txx@V7WXHH^$HH+,HH()	
 	1N(O	
 	1K(L	
 	HH\"HH%&HH\"	
 	dhh/I&JKHH+,#'	

 	HHX#'	

 	HH%&#(	
 !TXXm=TU'KP&&txx0G'HI,r4   c                sL   V P                   P                  R\        4       V P                   P                  \        P
                  P                  4       V P                  R4      P                  \        '       d%   R\         R\        R,           R\         24       R# R4       R# )	z0Setup different dialogs, such as the about page.delete-eventzversion-labelzinput-remapper  :Ni   Nz
python-evdev  N)r0   connectr3   Zset_positionr   ZWindowPositionZCENTER_ON_PARENTrK   set_textr.   r-   r,   rA      &r2   rM   ZUserInterface._create_dialogs   s~    

>>: 	

 2 2 C CD!** } gYaB'8m_.	
 		
r4   c                s  a  S P                  R 4      P                  RV 3R l4       S P                  R4      P                  RV 3R l4       S P                  R4      P                  RV 3R l4       S P                  R4      P                  RV 3R l4       S P                  R	4      P                  RV 3R
 l4       S P                  R4      P                  RV 3R l4       S P                  R4      P                  RS P                  4       S P                  R4      P                  RS P                  4       S P                  R4      P                  RV 3R l4       S P                  R4      P                  RV 3R l4       S P                  P                  RR 4       S P                  R4      P                  RV 3R l4       S P                  R4      P                  RV 3R l4       S P                  4        R# )delete_presetZclickedc                  8   < SP                   P                  4       # r>   )r8   ra   r@      *r2   rB   4UserInterface._connect_gtk_signals.<locals>.<lambda>   s    $//"?"?"Ar4   copy_presetc                  rb   r>   )r8   re   r@   rc   r2   rB   rd      s    $//"="="?r4   Zcreate_presetc                  rb   r>   )r8   rE   r@   rc   r2   rB   rd      s    $//"<"<">r4   Zapply_presetc                  rb   r>   )r8   Zstart_injectingr@   rc   r2   rB   rd      s    $//"A"A"Cr4   stop_injection_preset_pagec                  rb   r>   r8   rD   r@   rc   r2   rB   rd         $//"@"@"Br4   stop_injection_editor_pagec                  rb   r>   rg   r@   rc   r2   rB   rd     rh   r4   zrename-buttonpreset_name_inputzkey-release-eventZcreate_mapping_buttonc                  rb   r>   )r8   Zcreate_mappingr@   rc   r2   rB   rd     rh   r4   rW   c                  rb   r>   )r8   Zdelete_mappingr@   rc   r2   rB   rd     rh   r4   rZ   c                 s@    \         P                  P                  V 4      # r>   )r   ZWidgetZhide_on_delete)Zdialogr#      &*r2   rB   rd     s    szz88@r4   rV   c                  rb   r>   )rL   rQ   r@   rc   r2   rB   rd     s    $"9"9">">"@r4   zremove-event-btnc                  rb   r>   )r8   Zremove_eventr@   rc   r2   rB   rd     s    $//">">"@r4   N)rK   r]   on_gtk_rename_clickedon_gtk_preset_name_input_returnrL   connect_shortcutsr_   s   fr2   rO   Z"UserInterface._connect_gtk_signals   s   !))A	
 	''?	
 	!))>	
 	 ((C	
 	-.66B	
 	-.66B	
 	!)))T5O5OP$%--!E!E	
 	()11B	
 	!"**B	
 	'' @		
 	'(00@	
 	#$,,@	
 	 r4   c                s>   V P                   P                  \        P                  V P                  4       V P                   P                  \        P
                  V P                  4       V P                   P                  \        P                  V P                  4       R # r>   )	r7   rH   r%   mappingupdate_combination_labelZinjector_stateon_injector_state_msgZuser_confirm_request_on_user_confirm_requestr_   r`   r2   rP   Z'UserInterface._connect_message_listener  su    %%!>!>	
 	%%&&(B(B	
 	%%,,d.K.K	
r4   c                s@   < V ^8  d   QhRS[ RS[ RS[P                  /# )r6   primary	secondaryZreturn)strr   MessageDialogr9   r;   r2   r<   r=   )  s(      c c c>O>O r4   c                sP   \         P                  ! V P                  \         P                  P                  \         P                  P
                  ,          \         P                  P                  \         P                  P                  V4      pV'       d   VP                  V4       VP                  R\         P                  P                  4       VP                  R\         P                  P                  4      pVP                  4       P!                  \         P"                  4       V# )z8Create a message dialog with cancel and confirm buttons.ZCancelZConfirm)r   rv   rC   ZDialogFlagsZMODALZDESTROY_WITH_PARENTr%   ZQUESTIONZButtonsTypeZNONEZformat_secondary_textZ
add_buttonResponseTypeZCANCELACCEPTZget_style_contextZ	add_classZSTYLE_CLASS_DESTRUCTIVE_ACTION)rA   rs   rt   message_dialogZconfirm_buttons   &&&  r2   _create_dialogZUserInterface._create_dialog)  s    **KKOO!!COO$G$GGOO$$OO  
 00;!!(C,<,<,C,CD'229c>N>N>U>UV((*44S5W5WXr4   c                    < V ^8  d   QhRS[ /# r6   msgr&   r9   r;   r2   r<   r=   =  s      ,> r4   c                s8   VP                   P                  R 4      pV^ ,          pRP                  VR,          4      pV P                  W44      pVP	                  4       pVP                  V\        P                  P                  8H  4       VP                  4        R# )Z
r[   :i   NNN)
r}   ZsplitZjoinrz   ZrunZrespondr   rw   rx   r/   )rA   r}   Zchunksrs   rt   ry   Zresponses   &&     r2   rr   Z&UserInterface._on_user_confirm_request=  sx     t$)HHVBZ(	,,W@!%%'H 0 0 7 778r4   c                r{   r|   r)   r9   r;   r2   r<   r=   K  s     , ,)= ,r4   c                s   V P                  R4      pV P                  R4      pV P                  R4      pVP                  4       '       dX   VP                  ^4       VP                  ^4       VP                  R4       VP                  R4       VP                  R4       R# VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  ^4       R# )z4Update the ui to reflect the status of the injector.rf   ri   rU   T      ?N)rK   ZactiverR   Zset_sensitive)rA   r}   rf   ri   Zrecording_toggles   &&   r2   rq   Z#UserInterface.on_injector_state_msgK  s    15:V1W"15:V1W"-1XX6L-M::<<&2215&2215&44T:&44T:((-&2237&2237&44T:&44T:((+r4   c                s     V P                   P                  V P                  P                  V P                  4      4       R#   \
         d    \        P                  ! R4        R# i ; i)zDStop listening for shortcuts.

e.g. when recording key combinations
z&key listeners seem to be not connectedN)rC   Z
disconnectrG   Zpopon_gtk_shortcutKeyErrorr+   debugr_   r`   r2   disconnect_shortcutsZ"UserInterface.disconnect_shortcuts^  sO    
	CKK""4#5#5#9#9$:N:N#OP 	CLLAB	Cs   >A !A'&A'c                s    V P                   P                  V P                  4      '       g@   V P                  P	                  RV P                  4      V P                   V P                  &   R# R# )zStart listening for shortcuts.zkey-press-eventN)rG   rK   r   rC   r]   r_   r`   r2   rn   ZUserInterface.connect_shortcutsh  sT    !!%%d&:&:;;7;{{7J7J!4#7#78Dt334 <r4   c                r{   )r6   name)ru   r9   r;   r2   r<   r=   o  s     - - -r4   c                s8    V P                   P                  V4      # )zGet a widget from the window.)rI   Z
get_object)rA   r   r1   r2   rK   ZUserInterface.geto  s    ||&&t,,r4   c                sf    \         P                  ! R4       V P                  P                  4        R# )zClose the window.zClosing windowN)r+   r   rC   r/   r_   r`   r2   r?   ZUserInterface.closes  s    %&r4   c                r{   )r6   ro   r   r9   r;   r2   r<   r=   x  s     > > >r4   c                s   V P                  R4      pVP                  P                  4       VP                  4       8X  d   R# VP                  \        P
                  ! 4       8X  d.   VP                  R4       VP                  \        R4      4       R# VP                  ^4       VP                  VP                  P                  4       4       R# )z6Listens for mapping and updates the combination label.zcombination-labelNr~   zno input configured)	rK   Zinput_combinationZbeautifyZ	get_labelr   Zempty_combinationrR   Z	set_labelr#   )rA   ro   Zlabels   && r2   rp   Z&UserInterface.update_combination_labelx  s    88$78$$--/5??3DD$$(8(J(J(LLc"OOA345!11::<=r4   c                4   < V ^8  d   QhRS[ P                  /# r6   eventr   ZEventKeyr9   r;   r2   r<   r=     s       r4   c                s    VP                   \        P                  P                  ,          '       d&    V P                  VP
                  ,          ! 4        R# R#   \         d     R# i ; i)zExecute shortcuts.N)Zstater   ZModifierTypeZCONTROL_MASKrF   keyvalr   rA   r#   r      &&&r2   r   ZUserInterface.on_gtk_shortcut  sN    ;;))6666u||,. 7  s   "A A('A(c                s:    V P                   P                  4        R # r>   )r8   r?   rA   r#   rk   r2   on_gtk_closeZUserInterface.on_gtk_close  s    r4   c                s:    V P                   P                  4        R# )zShow the about/help dialog.N)r0   rQ   r   r1   r2   on_gtk_about_clickedZ"UserInterface.on_gtk_about_clicked  s    

r4   c                s    VP                  4       ^,          pV\        P                  8X  d   V P                  P	                  4        R# R# )zHide the about/help dialog.N)Z
get_keyvalr   Z
KEY_Escaper0   r/   )rA   r#   r   Zgdk_keycodes   &&& r2   on_gtk_about_key_pressZ$UserInterface.on_gtk_about_key_press  s4    &&(+#..(JJOO )r4   c                s    V P                  R 4      P                  4       pV P                  P                  V4       V P                  R 4      P	                  R4       R# )rj   r\   N)rK   Zget_textr8   Zrename_presetr^   )rA   r#   r   s   &* r2   rl   Z#UserInterface.on_gtk_rename_clicked  sD    xx+,557%%d+$%..r2r4   c                r   r   r   r9   r;   r2   r<   r=     s     ) ) )r4   c                sh    VP                   \        P                  8X  d   V P                  4        R # R # r>   )r   r   Z
KEY_Returnrl   r   r   r2   rm   Z-UserInterface.on_gtk_preset_name_input_return  s#    <<3>>)&&( *r4   )	r0   rY   rI   rL   r8   rG   r7   rF   rC   N)Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__rS   rJ   rN   rM   rO   rP   rz   rr   rq   r   rn   rK   r?   rp   r   r   r   r   rl   rm   Z__static_attributes__Z__classdictcell__)r:   s   @r2   r5   r5   O   s     ((4 (4T+"W-r
)!V	
 ( , ,&C- -
> >  3
) )r4   r5   N)Cr   Ztypingr    r   Zgi.repositoryr   r   r   r   Zinputremapper.configs.datar   Z"inputremapper.configs.input_configr   Zinputremapper.configs.mappingr	   Z inputremapper.gui.autocompletionr
   Z#inputremapper.gui.components.commonr   Z*inputremapper.gui.components.device_groupsr   Z#inputremapper.gui.components.editorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z!inputremapper.gui.components.mainr   r    Z$inputremapper.gui.components.presetsr!   Zinputremapper.gui.controllerr"   Zinputremapper.gui.gettextr#   Z)inputremapper.gui.messages.message_brokerr$   r%   Z'inputremapper.gui.messages.message_datar'   Zinputremapper.gui.utilsr(   Z inputremapper.injection.injectorr*   Zinputremapper.logging.loggerr+   r,   r-   r.   Ztype_registerZViewr3   r5   ) r4   r2   <module>r      s   *  ! 6 6 4 ? 5 ; ; K    ( ? @ 3 ' G B T T   inn %
R) R)r4   