
    Ii                     B    d Z ddlZddlZdZd	dedefdZ G d d      Zy)
zO
This helper module allows for playing sounds for ui events with little setup.
    Nsoundsnameblockingc                 :   	 t         j                  j                  | dz         }|j                         rF|j	                  |rt         j                  j
                  nt         j                  j                         y y # t        $ r}t        d|       Y d }~y d }~ww xY w)Nz.wavzSound error:)	wxadvSoundIsOkPlay
SOUND_SYNCSOUND_ASYNC	Exceptionprint)r   r   soundes       IC:\Users\dbart\PlayPalace11\clients\desktop\ui\enhance_wx\audio_events.py
play_soundr      sl    !TF]+::<JJHrvv(("&&:L:LM  !na  !s   A7A; ;	BBBc                   R   e Zd ZdZddddedefdZdddd	ed
efdZdddefdZ	ddefdZ
ddefdZddedefdZddedefdZdej                  fdZdej"                  fdZdej"                  fdZdej"                  fdZdej"                  fdZdej"                  fdZy)SoundBindingsMixinz
    Add sound cues for ui event interactions:
      - For any frame, panel, or dialog, add this class along with it. Then simply call 'self.bind_sounds()' after controls have been added to apply it.
    FN)	recursionenable_focusr   c                    t        | d      s| j                          | j                  |       | j                  | |       y)z
        Bind sound events on this window (frame/panel/dialog):
          - Focus events on the root window itself
          - Command events on all child controls recursively (if requested)
        play_sfxN)hasattraudio_settingstoggle_focus_sfxbind_sfx_to_area)selfr   r   s      r   bind_soundszSoundBindingsMixin.bind_sounds   s8     tZ(!l+dI.    )sounds_pathblockr!   r"   c                `    t         dd ddt        dt        dt        ffd}|| _        y )N)pathr   r   r$   c                H    t        | d|  n| d|  |      S |      S )z=Play sound using defaults unless caller explicitly overrides./)r   )r   r   r$   r"   r!   s      r   r   z3SoundBindingsMixin.audio_settings.<locals>.play_sfx*   sD    +/<;-q'vQtf=M!) /7 r    )N)default_sounds_pathstrboolr   )r   r!   r"   r   s    `` r   r   z!SoundBindingsMixin.audio_settings&   s8    -K	d 	3 	$ 	 	 !r    ctrlenabledc                    || }|r+|j                  t        j                  | j                         y |j	                  t        j                  | j                         y )Nhandler)Bindr   EVT_CHILD_FOCUSon_focus_sfxUnbind)r   r,   r+   s      r   r   z#SoundBindingsMixin.toggle_focus_sfx3   sE    <DIIb(($*;*;<KK**D4E4EKFr    include_focusc                    |r| j                  d|       t        |t        j                        r*|j	                  t        j
                  | j                         t        |t        j                        r*|j	                  t        j                  | j                         t        |t        j                        r*|j	                  t        j                  | j                         t        |t        j                        r*|j	                  t        j                  | j                         t        |t        j                         r+|j	                  t        j"                  | j$                         yy)z;
        Apply event bindings to a single control.
        Tr*   N)r   
isinstancer   CheckListBoxr0   EVT_CHECKLISTBOXon_checklistbox_sfxListBoxEVT_LISTBOXon_listbox_sfxButton
EVT_BUTTONon_button_sfxCheckBoxEVT_CHECKBOXon_checkbox_sfxChoice
EVT_CHOICEon_choice_sfxr   r+   r4   s      r   bind_sfx_to_controlz&SoundBindingsMixin.bind_sfx_to_control;   s     !!$T!2dBOO,IIb))4+C+CDdBJJ'IIbnnd&9&9:dBII&IIbmmT%7%78dBKK(IIboot';';<dBII&IIbmmT%7%78 'r    c                    |r| j                  d|       t        |t        j                        r+|j	                  t        j
                  | j                         t        |t        j                        r+|j	                  t        j                  | j                         t        |t        j                        r+|j	                  t        j                  | j                         t        |t        j                        r+|j	                  t        j                  | j                         t        |t        j                         r,|j	                  t        j"                  | j$                         yy)z>
        Remove event bindings from a single control.
        Fr*   r.   N)r   r6   r   r7   r3   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   s      r   unbind_sfx_from_controlz*SoundBindingsMixin.unbind_sfx_from_controlM   s     !!%d!3dBOO,KK++T5M5MKNdBJJ'KK0C0CKDdBII&KKt/A/AKBdBKK(KK1E1EKFdBII&KKt/A/AKB 'r    levelc                     |j                         D ]L  }| j                  |       |||k  st        |t        j                        s7| j                  |||dz          N y)z
        Recursively bind command events to all supported controls under root.
        - By default recursion is disabled.
        N   )GetChildrenrG   r6   r   Panelr   r   rootr   rJ   r+   s        r   r   z#SoundBindingsMixin.bind_sfx_to_area_   sU    
 $$&D$$T*!UY%6JtRXX<V%%dIuqyA	 'r    c                     |j                         D ]L  }| j                  |       |||k  st        |t        j                        s7| j                  |||dz          N y)z
        Recursively unbind command events from all supported controls under root.
        - By default recursion is disabled.
        NrL   )rM   rI   r6   r   rN   unbind_sfx_from_arearO   s        r   rR   z'SoundBindingsMixin.unbind_sfx_from_areaj   sU    
 $$&D((.!UY%6JtRXX<V))$	519E	 'r    evtc                 n   |j                         }t        |t        j                        r| j	                  |       nit        |t        j
                        r| j                  |       n=t        |t        j                        r| j                  |       n| j                  d       |j                          y )Nelement_focus)GetEventObjectr6   r   r:   r<   rC   rE   r@   rB   r   Skip)r   rS   childs      r   r2   zSoundBindingsMixin.on_focus_sfxv   sy    ""$eRZZ($ryy)s#r{{+  %MM/*
r    c                 F    | j                  d       |j                          y )Nbutton_pressr   rW   r   rS   s     r   r?   z SoundBindingsMixin.on_button_sfx   s    n%
r    c                    |j                         }t        |d      r|j                         n|j                         }||t        j                  k(  r| j                  d       n| j                  d|rdndz          |j                          y )NGetValueerror	checkbox_onoff)rV   r   r^   r   	NOT_FOUNDr   rW   )r   rS   r+   vals       r   rB   z"SoundBindingsMixin.on_checkbox_sfx   sf    !!# 'Z 8cllndmmo;#-MM'"MM+%@A
r    c                     |j                         }t        |t        j                        r| j	                  |       n| j                  d       |j                          y )N	list_move)rV   r6   r   r7   r9   r   rW   )r   rS   r+   s      r   r<   z!SoundBindingsMixin.on_listbox_sfx   sC    !!#dBOO,$$S) MM+&
r    c                 &   |j                         }|j                         }|&|j                         dk(  s|t        j                  k(  r| j                  d       n'| j                  d|j                  |      rdndz          |j                          y )Nr   rf   checkbox_list_ra   rb   )rV   GetSelectionGetCountr   rc   r   	IsCheckedrW   )r   rS   r+   indexs       r   r9   z&SoundBindingsMixin.on_checklistbox_sfx   sp    !!#!!#=DMMOq0ER\\4IMM+&MM*dnnU6KdQVWX
r    c                 F    | j                  d       |j                          y )Ndropdown_mover[   r\   s     r   rE   z SoundBindingsMixin.on_choice_sfx   s    o&
r    F)r   r   )__name__
__module____qualname____doc__r)   intr   r(   r   r   rG   rI   r   rR   r   
FocusEventr2   CommandEventr?   rB   r<   r9   rE    r    r   r   r      s    

/$ 
/ 
/C 
/ 48u !S ! ! 7; G G9t 9$C4 C$	B 	B 	B	FC 	FC 	F  2?? "// r  r    r   ro   )rs   r   wx.advr'   r(   r)   r   r   rw   r    r   <module>ry      s7    
  !S !D !Q Qr    