U
    ą^7                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZm	Z	 dZ
G d	d
 d
ejZG dd dejZedkreddZedejjedejjfZee ed ed ee  ee  dS ))KeyboardShortcutSelectionKeyboardShortcutSelectionDialog    )Gdk)GObject)Gtk)IBus)Pango)_N_   c                       s   e Zd Zd& fdd	Zdd Zd'ddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Z  ZS )(r   Nc                    s,   t t| jtjjd |   | | d S )NZorientation)superr   __init__r   OrientationZVERTICAL#_KeyboardShortcutSelection__init_uiset_shortcuts)self	shortcuts	__class__ )/usr/share/ibus/setup/keyboardshortcut.pyr   '   s
    
z"KeyboardShortcutSelection.__init__c           
      C   s<  t jt tjd| _t  }t jtd|dd}| j	| | j
d| j t  }|t jjt jj |d || j |t jj | |ddd t jt jjd	}t jtd
d}|t jj |dd ||ddd t  | _| j
d| j  || jddd t j!dd| _"| j"
d| j# || j"ddd | |ddd t jt jjd	}t jtdd}|t jj |dd ||ddd t j$ddd}g | _%| j%&dt j'(dt)j*j+f | j%&dt j'(dt)j*j,f | j%&dt j'(dt)j*j-f | j%&dt j'(dt)j*j.f | j%&dt j'(dt)j*j/f | j%&dt j'(d t)j*j0f | j%D ]\}}}	|
d!| j1| ql|2| j%d d" dd"dd" |2| j%d" d" d"ddd" |2| j%d d" dd#dd" |2| j%d# d" dd"d"d |2| j%d d" d"dd"d |2| j%d$ d" dd#d"d ||ddd | |ddd t jt jjd	}t j!td%dd&| _3| j34d | j3
d| j5 || j3ddd t j!td'dd&| _6| j64d | j6
d| j7 || j6ddd t j!td(dd&| _8| j84d | j8
d| j9 || j8ddd | |ddd d S ))NmodelzKeyboard shortcutsr   )textzcursor-changedd   T   r   z	Key code:)labelg        g      ?Fznotify::textz...Zclickedz
Modifiers:   )Zn_rowsZ	n_columnsZControlZ_ControlZAltZA_ltZShiftZ_ShiftZMetaZ_MetaZSuperZS_uperZHyperZ_HyperZtoggled         Z_Add)r   Zuse_underlineZ_ApplyZ_Delete):r   TreeView	ListStorer   ZTYPE_STRING)_KeyboardShortcutSelection__shortcut_viewZCellRendererTextTreeViewColumnr	   append_columnconnect;_KeyboardShortcutSelection__shortcut_view_cursor_changed_cbScrolledWindowZ
set_policyZ
PolicyTypeZ	AUTOMATICset_min_content_heightaddZset_shadow_typeZ
ShadowTypeIN
pack_startBoxr   Z
HORIZONTALZLabelZset_justifyZJustificationZLEFTZset_alignmentZEntry)_KeyboardShortcutSelection__keycode_entry3_KeyboardShortcutSelection__keycode_entry_notify_cbZButtonZ*_KeyboardShortcutSelection__keycode_button5_KeyboardShortcutSelection__keycode_button_clicked_cbZTable,_KeyboardShortcutSelection__modifier_buttonsappendZCheckButtonZnew_with_mnemonicr   ZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	META_MASKZ
SUPER_MASKZ
HYPER_MASK6_KeyboardShortcutSelection__modifier_button_toggled_cbZattach&_KeyboardShortcutSelection__add_buttonset_sensitive1_KeyboardShortcutSelection__add_button_clicked_cb(_KeyboardShortcutSelection__apply_button3_KeyboardShortcutSelection__apply_button_clicked_cb)_KeyboardShortcutSelection__delete_button4_KeyboardShortcutSelection__delete_button_clicked_cb)
r   renderercolumnZscrolledwindowZhboxr   tablenamebuttonmaskr   r   r   Z	__init_ui-   s    











z#KeyboardShortcutSelection.__init_uic                 C   sX   |d krg }| j  }|  g }|D ],}||kr&|d}||| d< || q&d S Nr   )r$   	get_modelclearinsertr3   )r   r   r   Zaddedshortcutitr   r   r   r      s    

z'KeyboardShortcutSelection.set_shortcutsc                 C   s0   | j  }zdd |D W S    g  Y S X d S )Nc                 S   s   g | ]}|d  qS )r   r   ).0ir   r   r   
<listcomp>   s     z;KeyboardShortcutSelection.get_shortcuts.<locals>.<listcomp>)r$   rC   )r   r   r   r   r   get_shortcuts   s
    
z'KeyboardShortcutSelection.get_shortcutsc                 C   sj   | j  }t|tkrd S ||  kr*d S |d}||| d< | jd ||}| j 	|d d d S )Nr   F)
r$   rC   len
MAX_HOTKEYrK   rE   r5   r6   Zget_pathZ
set_cursor)r   rF   r   rG   pathr   r   r   add_shortcut   s    


z&KeyboardShortcutSelection.add_shortcutc                 C   sz   g }| j  }t|dkr d S | jD ]\}}}| r&|| q&|drZ|dd  }ddd |D }||7 }|S )Nr   r	   r    c                 S   s   g | ]}d | d qS )<>r   )rH   mr   r   r   rJ      s     zIKeyboardShortcutSelection.__get_shortcut_from_buttons.<locals>.<listcomp>)	r/   Zget_textr   Zkeyval_from_namer2   Z
get_activer3   
startswithjoin)r   Z	modifierskeycoder?   r@   rA   rF   r   r   r   Z__get_shortcut_from_buttons   s    

z5KeyboardShortcutSelection.__get_shortcut_from_buttonsc                 C   sn   t |\}}|dkr"|dkr"d S | jD ](\}}}||@ rF|d q(|d q(| j|ddd  d S )Nr   TFrR   r   )r   Zaccelerator_parser2   
set_activer/   set_textrsplit)r   rF   keyvalstater?   r@   rA   r   r   r   Z__set_shortcut_to_buttons   s    z3KeyboardShortcutSelection.__set_shortcut_to_buttonsc                 C   s8   | j  }| j  \}}|d kr$d S || d  d S rB   )r$   rC   
get_cursorZget_indicesr   r   rN   r=   r   r   r   Z__get_selected_shortcut   s
    
z1KeyboardShortcutSelection.__get_selected_shortcutc                 C   s4   | j  }| j  \}}|||d  d< |   d S rB   )r$   rC   r]   8_KeyboardShortcutSelection__update_add_and_apply_buttons)r   rF   r   rN   r=   r   r   r   Z__set_selected_shortcut   s    
z1KeyboardShortcutSelection.__set_selected_shortcutc                 C   s4   | j  }| j  \}}||| |   d S N)r$   rC   r]   removeZget_iterr_   r^   r   r   r   Z__del_selected_shortcut   s    
z1KeyboardShortcutSelection.__del_selected_shortcutc                 C   s8   |   }|d kr(| | | jd n| jd d S )NTF)1_KeyboardShortcutSelection__get_selected_shortcut3_KeyboardShortcutSelection__set_shortcut_to_buttonsr:   r6   )r   ZtreeviewrF   r   r   r   Z!__shortcut_view_cursor_changed_cb   s
    
z;KeyboardShortcutSelection.__shortcut_view_cursor_changed_cbc                 C   sp   |   }|  }|  }|d ko2||ko2t|tk }| j| ||ko^|d ko^|d ko^||k}| j| d S r`   )5_KeyboardShortcutSelection__get_shortcut_from_buttonsrb   rK   rL   rM   r5   r6   r8   )r   rF   Zselected_shortcutr   Zcan_addZ	can_applyr   r   r   Z__update_add_and_apply_buttons   s"    
z8KeyboardShortcutSelection.__update_add_and_apply_buttonsc                 C   s   |    d S r`   r_   )r   r@   r?   r   r   r   Z__modifier_button_toggled_cb   s    z6KeyboardShortcutSelection.__modifier_button_toggled_cbc                 C   s   |    d S r`   re   )r   entryargr   r   r   Z__keycode_entry_notify_cb   s    z3KeyboardShortcutSelection.__keycode_entry_notify_cbc                    s  g t j|  t jjd td} |  td t  } fdd}t 	t
jt
jt
j}t j|d}|d || |d t  }t jt jjd	d
}|d| ||d	 ||dd ||dd ||dd || |d }	  }
|
|d	d	d |    }   |t jj ksJt!dk rNd S d }d }d }| j"D ],\}}}||@ r|#d	 n
|#d qlt $d |||}|%dd}| j&'|(ddd  d S )N)transient_forbuttonsz^Please press a key (or a key combination).
The dialog will be closed when the key is released.z)Please press a key (or a key combination)c                    s0    |  |  |  tjj d S r`   )r3   Zresponser   ResponseTypeOK)crN   r[   r\   rV   dlgoutr   r   Z__accel_edited_cb  s    


zPKeyboardShortcutSelection.__keycode_button_clicked_cb.<locals>.__accel_edited_cbr   F   T)Z
accel_modeZeditablezaccel-editedz
accel-modsr   z	accel-keyr   rV   r   r    z	<Primary>z	<Control>rR   rW   ))r   ZMessageDialogZget_toplevelZButtonsTypeZCLOSEr	   Z
set_markupZ	set_titler)   r#   r   ZTYPE_INTZ	TYPE_UINTr"   Zset_headers_visibler+   r*   r%   ZCellRendererAccelZCellRendererAccelModeZOTHERr'   r-   Zadd_attributer&   r3   Zget_message_areaZpack_endshow_allrunZdestroyrj   rk   rL   r2   rX   Zaccelerator_name_with_keycodereplacer/   rY   rZ   )r   r@   messageswZ+_KeyboardShortcutSelection__accel_edited_cbr   Z
accel_viewr=   r<   rG   Zareaidr[   r\   rV   r?   rA   rF   r   rm   r   Z__keycode_button_clicked_cb   sb    








z5KeyboardShortcutSelection.__keycode_button_clicked_cbc                 C   s   |   }| | d S r`   )rd   rO   r   r@   rF   r   r   r   Z__add_button_clicked_cb1  s    z1KeyboardShortcutSelection.__add_button_clicked_cbc                 C   s   |   }| | d S r`   )rd   1_KeyboardShortcutSelection__set_selected_shortcutrw   r   r   r   Z__apply_button_clicked_cb5  s    z3KeyboardShortcutSelection.__apply_button_clicked_cbc                 C   s$   |    | jd | jd d S )NF)1_KeyboardShortcutSelection__del_selected_shortcutr:   r6   r8   )r   r@   r   r   r   Z__delete_button_clicked_cb9  s    z4KeyboardShortcutSelection.__delete_button_clicked_cb)N)N)__name__
__module____qualname__r   r   r   rK   rO   rd   rc   rb   rx   ry   r(   r_   r4   r0   r1   r7   r9   r;   __classcell__r   r   r   r   r   &   s$   b
9r   c                       s8   e Zd Zd fdd	ZdddZdd Zd	d
 Z  ZS )r   Nr   c                    s@   t t| j|||d t | _| j| jddd | j  d S )N)titlerh   flagsFTr   )r   r   r   r   0_KeyboardShortcutSelectionDialog__selection_viewZvboxr-   rq   )r   r~   rh   r   r   r   r   r   ?  s    
  z(KeyboardShortcutSelectionDialog.__init__c                 C   s   | j | d S r`   )r   r   )r   Z	shotrcutsr   r   r   r   F  s    z-KeyboardShortcutSelectionDialog.set_shortcutsc                 C   s   | j | d S r`   )r   rO   )r   Zshotrcutr   r   r   rO   I  s    z,KeyboardShortcutSelectionDialog.add_shortcutc                 C   s
   | j  S r`   )r   rK   )r   r   r   r   rK   L  s    z-KeyboardShortcutSelectionDialog.get_shortcuts)NNr   )N)rz   r{   r|   r   r   rO   rK   r}   r   r   r   r   r   >  s   
r   __main__zSelect test)r~   Z_CancelZ_OKzControl+Shift+spaceN)__all__Zgi.repositoryr   r   r   r   r   Zi18nr	   r
   rM   r.   r   ZDialogr   rz   rn   rj   ZCANCELrk   ri   Zadd_buttonsrO   r   printrr   rK   r   r   r   r   <module>   s,     
 


