3
.zXN                 @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dl	m
Z
 d dlmZ e
dd d dlmZ e
dd	 d d
lmZ d dlZejd  d gej e_d dlZd dlZdd Zdd dddddddddddddddZdhZddhZejjej dZejjej dZejjej dZejjej dZej Z e j!d e j"ddddd dd4d# e j"d$d%d&d'dd(e d) d* e j# \Z$Z%e$j&re'ed+dd,e_(e'ed+dd,e_)e*d-ed.  G d/d0 d0Z+d1d2 Z,e-d3krejej.ej/ e,  dS )5    N)strftime)require_version)GLibGtkz3.0)r   IBusz1.0)r   z
/../enginec             C   s   t jd| S )Nz
ibus-table)gettextdgettext)a r
   #/usr/share/ibus-table/setup/main.py<lambda>/   s    r      FT    )Z	inputmodechinesemodetabdeffullwidthlettertabdeffullwidthpunctendeffullwidthletterendeffullwidthpunctalwaysshowlookuplookuptableorientationlookuptablepagesizeonechar
autoselect
autocommitspacekeybehaviorautowildcardsinglewildcardcharmultiwildcardcharr   r   r   ZtablesZiconszibus-setup-tablezsetup-debug.logz%prog [options]z-nz--engine-nameZstorestringengine_namez:Set the name of the engine, for example "table:cangjie3". zDefault: "%default")actiontypedestdefaulthelpz-qz
--no-debugZstore_falsedebugzredirect stdout and stderr to z, default: %default)r!   r#   r$   r%   r	   )mode	bufferingz
--- %s ---z%Y-%m-%d: %H:%M:%Sc               @   s   e Z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dd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zejjfd+d,Zd-d. Zd/S )0PreferencesDialogc             C   s   t jt jd tjd}tjd| tjdd tj	 | _
d | _tjrPtj| _n,dtjkrhtjd | _n| jtdtjj | jd kr| jtdtjj tjd d S )	Nr   ZIBUS_LOCALEDIRz
ibus-tablezUTF-8ZIBUS_ENGINE_NAMEz1IBUS_ENGINE_NAME environment variable is not set.zFCannot determine the engine name. Please use the --engine-name option.r   )locale	setlocaleLC_ALLosgetenvr   bindtextdomainbind_textdomain_codesetr   ZBus_PreferencesDialog__bus_PreferencesDialog__engine_nameoptionsr    environ&_PreferencesDialog__run_message_dialog_r   MessageTypeZWARNINGERRORsysexit)selfZ	localedirr
   r
   r   __init__l   s$    






zPreferencesDialog.__init__c             C   sH   | j j }dd |D }d}| j|krDd}| jtd| j tjj |S )zBCheck if the current engine_name is available.
        Return boolc             S   s   g | ]}|j  qS r
   )get_name).0xr
   r
   r   
<listcomp>   s    z;PreferencesDialog.check_table_available.<locals>.<listcomp>TFz%IBus Table engine %s is not available)r1   list_enginesr2   r5   r6   r   r7   r8   )r;   namesretr
   r
   r   check_table_available   s    


z'PreferencesDialog.check_table_availablec             C   s  t j tjjttjdd| jd d dd| _ d| _d| _	| j j
jd}|r|jd}xB|D ]:}|j jdrrd	| _x d4D ]}|j j|rxd	| _	qxW qZW d| _| j j
jd}|r|j dk| _| j j
jd| _| j j
jd}|d5k rt|d6 td< | j j
jd}|rJt|tdkrJ|j d7krJ|j dktd< |j dktd< | j j
jd}|rt|tdkr|j d8kr|j dktd< |j dktd< | j j
jd}|rt|tdkr|j d9kr|j dktd< | j j
jd }	|	rt|	jdtd!< | j j
jd"}
|
rLt|
tdkrL|
j d:krL|
j dktd#< | j j
jd$}|rt|tdkr|j d;kr|j dktd%< | j j
jd&}|rt|tdkr|j d<kr|j dktd'< | j j
jd(}|rd)d* |jdD | _tj| jkrd	td+< | j j
jd,}|r>d-d* |jdD | _tj| jkrTdtd+< | j j
jd.}|rt|tdkr|j d=kr|j dktd/< | j j
jd0}|rt|tdkrt|dkr|td1< | j j
jd2}|rt|tdkrt|dkr|td3< d S )>Nz^table:r   z.dbF)filenameZuser_dbZcreate_database	languages,zhTjakozuser_can-define_phrasetrueZruleslanguage_filtercm0cm1cm2cm3cm4r   r   def_full_width_punctfalser   r   def_full_width_letterr   r   always_show_lookupr   Zselect_keysr   auto_selectr   auto_commitr   orientationr   Zpage_down_keysc             S   s   g | ]}t j|qS r
   )r   keyval_from_name)r>   r?   r
   r
   r   r@      s   zGPreferencesDialog.get_default_options_from_database.<locals>.<listcomp>r   Zcommit_keysc             S   s   g | ]}t j|qS r
   )r   rY   )r>   r?   r
   r
   r   r@      s   auto_wildcardr   single_wildcard_charr   multi_wildcard_charr   )rH   rI   rJ   )rM   rN   rO   rP   rQ   )rK   rS   )rK   rS   )rK   rS   )rK   rS   )rK   rS   )rK   rS   )rK   rS   )tabsqlitedbr-   pathjoindb_dirresubr2   _PreferencesDialog__is_chinese_PreferencesDialog__is_cjkZime_propertiesgetsplitstrip
startswith*_PreferencesDialog__user_can_define_phraselower_PreferencesDialog__rulesintOPTION_DEFAULTSr"   lenZ_page_down_keysr   Z	KEY_spaceZ_commit_keys)r;   rF   ZlanguageZlangZuser_can_define_phraserL   rR   rT   rU   Zselect_keys_csvrV   rW   rX   Zpage_down_keys_csvZcommit_keys_csvrZ   r[   r\   r
   r
   r   !get_default_options_from_database   s    




z3PreferencesDialog.get_default_options_from_databasec             C   s&   x t D ]}t | }| j|| qW d S )N)rn   _PreferencesDialog__set_value)r;   namevaluer
   r
   r   Z__restore_defaults  s    
z$PreferencesDialog.__restore_defaultsc             C   s6   | j jd| }tj }|j|d |j|dd dS )z setup cell renderer for comboboxz
combobox%sTtextr   N)_PreferencesDialog__builder
get_objectr   ZCellRendererTextZ
pack_startZadd_attribute)r;   rr   _PreferencesDialog__comboboxZ_PreferencesDialog__cellr
   r
   r   _build_combobox_renderer  s    z*PreferencesDialog._build_combobox_rendererc             C   sd   t j | _| jjd | jjd | jjd| _x.ttj	 D ]}|t
kr>|tkr>| j| q>W dS )z#Load builder and __dialog attributez
ibus-tablezibus-table-preferences.uiZdialogN)r   ZBuilderru   Zset_translation_domainZadd_from_filerv   _PreferencesDialog__dialoglistrn   keysSCALE_WIDGETSENTRY_WIDGETSrx   )r;   rr   r
   r
   r   load_builder  s    
zPreferencesDialog.load_builderc             C   s>   | j j | _dtjdd| jjdd | _| j  | j	  d S )Nzengine/Table/%sz^table:r    r6   )
r1   Z
get_config_PreferencesDialog__configrb   rc   r2   replace"_PreferencesDialog__config_section _PreferencesDialog__init_general_PreferencesDialog__init_about)r;   r
   r
   r   do_init  s
    zPreferencesDialog.do_initc             C   s   | j jtdtjdd| j  | jj| jj	 | _
| jjd| j xFttj D ]6}|tkrj| j| qR|tkr~| j| qR| j| qRW | jd dS )z$Initialize the general notebook pagezIBus Table %s Preferencesz^table:r   zvalue-changedrestoredefaultsN)ry   Z	set_titler6   rb   rc   r2   r   Z
get_valuesr   unpack_PreferencesDialog__valuesconnect+_PreferencesDialog__config_value_changed_cbrz   rn   r{   r|   _init_hscaler}   _init_entry_init_combobox_init_button)r;   rr   r
   r
   r   Z__init_general&  s    
z PreferencesDialog.__init_generalc             C   s  | j jd| _| jjdtj   tjjt	d}tjj
|rR| j jd}|j| | jj }d}x |D ]}|j | jkrf|}P qfW |r|j }|s|j }| j jd}|jd|  |j }|otjj
|rdd	lm}	 |	jj|dd}
| j jd}|j|
 dS )z"Initialize the About notebook pageZNameVersionz<big><b>IBus Table %s</b></big>zibus-table.svgZimage_aboutNZTableNameVersionz	<b>%s</b>r   )	GdkPixbufr       ZTableNameImager]   )ru   rv   Z _PreferencesDialog__name_versionZ
set_markupversionZget_versionr-   r_   r`   icon_direxistsZset_from_filer1   rA   r=   r2   Zget_longnameZget_icongi.repositoryr   ZPixbufZnew_from_file_at_sizeZset_from_pixbuf)r;   Z	img_fnameZimgZenginesZengineeZlongnamewZ	icon_pathr   Zpixbufr
   r
   r   Z__init_about8  s4    


zPreferencesDialog.__init_aboutc             C   s  | j jd| }d}|| jkr*| j| }nt| }t|trJ|rDdnd}nJt|trZ|}n:t|tr|j }x&t	|D ]\}}|d |krv|}P qvW |j
| |jd| j| |dkr| j s|dkr| j s|dkr| j s|dkr| j s| j r|jtjj dS )z%Set combobox from the __config enginez
combobox%sr   r   Zchangedr   r   r   r   r   r   r   N)r   )r   r   r   r   )r   )r   )ru   rv   r   rn   
isinstanceboolrm   str	get_model	enumerate
set_activer   _PreferencesDialog__changed_cbrd   re   rj   rl   Zset_button_sensitivityr   ZSensitivityTypeZOFF)r;   rr   rw   valZinit_valmodelirowr
   r
   r   r   Y  s:    





  


z PreferencesDialog._init_comboboxc             C   sL   | j jd| }|| jkr&| j| }nt| }|j| |jd| j| dS )z)Set entry widget from the __config enginezentry%sznotify::textN)ru   rv   r   rn   set_textr   $_PreferencesDialog__entry_changed_cb)r;   rr   _PreferencesDialog__entryr   r
   r
   r   r   }  s    

zPreferencesDialog._init_entryc             C   sL   | j jd| }|| jkr&| j| }nt| }|j| |jd| j| dS )z)Set scale widget from the __config enginezhscale%szvalue-changedN)ru   rv   r   rn   	set_valuer   $_PreferencesDialog__value_changed_cb)r;   rr   _PreferencesDialog__hscaler   r
   r
   r   r     s    

zPreferencesDialog._init_hscalec             C   s$   | j jd| }|jd| j| dS )z5Initialize the button to restore the default settingszbutton%sZclickedN)ru   rv   r   %_PreferencesDialog__button_clicked_cb)r;   rr   Z_PreferencesDialog__buttonr
   r
   r   r     s    zPreferencesDialog._init_buttonc             C   s   |dkr| j   dS )zButton clicked handlerr   N)$_PreferencesDialog__restore_defaults)r;   widgetrr   r
   r
   r   Z__button_clicked_cb  s    z%PreferencesDialog.__button_clicked_cbc             C   s<   |j  }tt| }|tkr,|dkr(dnd}| j|| dS )zCombobox changed handlerr   FTN)
get_activer"   rn   r   rq   )r;   r   rr   r   vtyper
   r
   r   Z__changed_cb  s
    zPreferencesDialog.__changed_cbc             C   s4   |j  }tt| }|tkr$t|}| j|| dS )z"scale widget value changed handlerN)Z	get_valuer"   rn   rm   rq   )r;   r   rr   r   r   r
   r
   r   Z__value_changed_cb  s
    z$PreferencesDialog.__value_changed_cbc             C   s:   |j  }tt| }|tdkr*|jd}| j|| dS )z!entry widget text changed handlerr   zUTF-8N)Zget_textr"   rn   decoderq   )r;   r   Zproperty_specrr   r   r   r
   r
   r   Z__entry_changed_cb  s
    
z$PreferencesDialog.__entry_changed_cbc             C   s   |j  }|tkr,| jjd| }|j| n|tkrP| jjd| }|j| nt| jjd| }t|trx|rrdnd}nBt|t	r|j
 }|j }x&t|D ]\}	}
|
d |kr|	}P qW |j| || j|< dS )z%__config engine value changed handlerzhscale%szentry%sz
combobox%sr   r   N)r   r|   ru   rv   r   r}   r   r   r   r   Z
get_stringr   r   r   r   )r;   configZsectionrr   r   r   r   rw   r   r   r   r
   r
   r   Z__config_value_changed_cb  s&    


z+PreferencesDialog.__config_value_changed_cbc             C   s   | j ||j  dS )z$toggle button toggled signal handlerN)rq   r   )r;   r   rr   r
   r
   r   Z__toggled_cb  s    zPreferencesDialog.__toggled_cbc             C   s6   || j kr&| j | }t|t|r&|S | j|| |S )z#Get the __config value if available)r   r   r"   rq   )r;   rr   Zdefvalvarr
   r
   r   Z__get_value  s    

zPreferencesDialog.__get_valuec             C   s   d}t |trtjj|}nHt |tr4tjj|}n0t |trLtjj|}nt	j
jdt|  dS || j|< | jj| j|| dS )z Set the config value to __configNzval(%s) is not in support type.)r   r   r   ZVariantZnew_booleanrm   Z	new_int32r   Z
new_stringr9   stderrwritereprr   r   r   r   )r;   rr   r   r   r
   r
   r   Z__set_value  s    



zPreferencesDialog.__set_valuec             C   s0   t jd t jj|t jj|d}|j  |j  d S )N)parentflagsmessage_typeZbuttonsZmessage_format)r   ZMessageDialogZDialogFlagsZMODALZButtonsTypeZOKrunZdestroy)r;   messager   Zdlgr
   r
   r   Z__run_message_dialog  s    z&PreferencesDialog.__run_message_dialogc             C   s6   | j  }|sdS | j  tj| j | j  | jj S )Nr   )rD   rp   r   Zidle_addr   r~   ry   r   )r;   rC   r
   r
   r   r     s    zPreferencesDialog.runN)__name__
__module____qualname__r<   rD   rp   r   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   Z_PreferencesDialog__toggled_cbZ_PreferencesDialog__get_valuerq   r   r7   INFOr5   r   r
   r
   r
   r   r)   k   s.   p!$

		r)   c               C   s   t  j  d S )N)r)   r   r
   r
   r
   r   main  s    r   __main__zMSet the name of the engine, for example "table:cangjie3". Default: "%default")0r   r*   r-   r9   signalZoptparseZtimer   rb   Zgir   r   r   r   r   r   r_   r^   Zibus_table_locationr6   rn   r|   r}   r`   datara   r   libZ	setup_cmdZ
cache_homeZlogfileZOptionParserZoptZ	set_usageZ
add_option
parse_argsr3   argsr&   openstdoutr   printr)   r   r   SIGINTSIG_DFLr
   r
   r
   r   <module>   s   


    
