
    k!f                         d dl mZ 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Zd dl	Z	d dl
Z
d dlmZ d dlZ ej                  dd        ej                  dd       d dlmZmZmZ d dlZd dlZd dlmZ d d	l d d
lmZ d d	l d dlmZ d d	l d dlmZ d dl m!Z!  e"d      \  Z#Z$ e"d      \  Z%Z& e"d      \  Z'Z(d Z)d Z*d Z+d Z,g dZ- G d dej\                  j^                  j`                        Z1 G d de2      Z3y)    )print_functionN)gettextGdkz3.0Gtk)GObjectr   r   )inline_callbacks)*)AptProgressDialog)ImConfig)language2locale)ExceptionPkgCacheBroken   c                     | |z  S )z  helper to simplify the reading  )abs     J/usr/lib/python3/dist-packages/LanguageSelector/gtk/GtkLanguageSelector.pyxorr   1   s    q5L    c                       fd}|S )2 decorator to ensure that the signals are blocked c                  @    d| d   _          | i |}d| d   _         |S )NTr   F_blockSignalsargskwargsresfs      r   wrapperzblockSignals.<locals>.wrapper7   s/     $Q   %Q
r   r   r   r    s   ` r   blockSignalsr"   5       
 Nr   c                       fd}|S )r   c                  8    | d   j                   ry  | i |}|S Nr   r   r   s      r   r    z$honorBlockedSignals.<locals>.wrapper@   s'    7    
r   r   r!   s   ` r   honorBlockedSignalsr'   >   r#   r   c                       fd}|S )z
    decorator to ensure that a given function is run insensitive
    warning: this will not stack well so don't use it for nested
    stuff (a @insensitive func calling a @insensitve one)
    c                  h    | d   j                  d        | i |}| d   j                  d       |S )Nr   FT)setSensitiver   s      r   r    zinsensitive.<locals>.wrapperM   s;    QU#  QT"
r   r   r!   s   ` r   insensitiver+   G   s    
 Nr   )!   B   d   c                   *    e Zd ZefdZddZd Zd Zy)GtkProgressc                    |d d  | _         d| _        d| _        t        | j                   j	                  d            | _        || _        || _        || _        | j                  j                          |j                         j                  t        j                  j                         | j                  j                  |       y r&   )stepsbaseoldintpopnext_parent_window_progressbarrealize
get_windowset_functionsr   
WMFunctionMOVEset_transient_for)selfhost_windowprogressbarparentr2   s        r   __init__zGtkProgress.__init__[   s     1X
	

q)*	"' ..s~~/B/BC&&v.r   Nc                 v   | j                   j                          | j                  j                  d       |"d| _        | j
                  j                          n| j                  |kD  r;| j                  | _        	 t        | j                  j                  d            | _        | j                  |dz  | j                  | j                  z
  z  z   }|| _        | j
                  j                  |dz         t        j                         r*t        j                          t        j                         r)y y #  Y xY w)NFr   r.   g      Y@)r9   showr8   set_sensitiver4   r:   pulser7   r3   r5   r2   r6   set_fractionr   events_pendingmain_iteration)rA   percentprogresss      r   updatezGtkProgress.updatej   s     	""5)?DH##% xx'! II	 #DJJNN1$5 6DI yy73;$))dii2G#HHHDH**8E>:  "    "s   ;)D4 4D8c                 :    | j                   j                  d       y NT)r8   rH   rA   s    r   donezGtkProgress.done   s    ""4(r   c                 8    | j                   j                          y N)r9   hiderR   s    r   rV   zGtkProgress.hide   s    r   rU   )__name__
__module____qualname__STEPS_UPDATE_CACHErE   rO   rS   rV   r   r   r   r0   r0   Z   s    )/!.)r   r0   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ed	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Zd Zed        ZeZeZd Zd Zd Zd Z d Z!d Z"d Z#ed        Z$d/d Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,e-d(        Z.e-d)        Z/e-e0d*               Z1d+ Z2e-d,        Z3e-e0d-               Z4e-e0d.               Z5y)0GtkLanguageSelectorc                 J   t         j                  | |       || _        t        j                         | _        | j
                  j                  d       | j
                  j                  |dz          | j
                  j                  |        	 t        j                  d      d   t        j                         v }	 t        j                  d      d   t        j                         v }t        j                         dk(  xs |xs || _        d| _        d}t#        j$                         D ]3  }|j&                  dk\  r|j&                  d	k  r|d
z  }|dk\  s,d| _         n | j(                  }t        j*                  t,        j.                  t,        j.                        }t        j0                         }	|j3                  |	d       |j5                  |	dt6               |j9                  |       || _        t<        j>                  jA                         | _!        | jD                  }t        j*                  t,        j.                  t,        j.                        }t        j0                         }	|j3                  |	d       |j5                  |	dtF               |j9                  |       tI               | _$        d| _%        | jM                          | jO                          | jQ                          | jS                          | jU                          | jV                  jY                  d       | jZ                  jY                  d       | j\                  jY                  d       | j^                  jY                  d       | j`                  jc                          | je                  d       | j                  r| jf                  jh                  sUt        jj                  t        jl                  jn                  t        jp                  jr                        }
|
ju                  d       |
jw                  | j`                         |
jy                  dt{        d      dt{        d             d|
_>        |
j                  t{        d      t        j                  j                         |
j                         }|
j                          |t        j                  j                  k(  rB| je                  d       | j                          | jQ                          | je                  d       | j:                  j                  r| j                          | jH                  j                         s| jD                  jY                  d       | je                  d       y # t        $ r d}Y w xY w# t        $ r d}Y w xY w)Nzlanguage-selectorz/data/LanguageSelector.uiadminr   Fsudor   i  i     Ttextmessage_typebuttons<big><b>z!No language information available</b></big>

zThe system does not have information about the available languages yet. Do you want to perform a network update to get them now?  _Update)HLanguageSelectorBaserE   _datadirr   Builderwidgetsset_translation_domainadd_from_fileconnect_signalsgrpgetgrnamos	getgroupsKeyErrorgetuidis_adminhas_other_userspwdgetpwallpw_uidcombobox_locale_chooser	ListStorer   TYPE_STRINGCellRendererText
pack_startadd_attributeLANGTREEVIEW_LANGUAGE	set_modeloptions	aptdaemonclient	AptClientaccombobox_input_methodIM_NAMEr   r   setupLanguageTreeViewsetupInstallerTreeViewupdateLanguageViewupdateLocaleChooserCombocheck_input_methodsbutton_applyrH   "button_apply_system_wide_languagesbutton_install_remove_languagesbutton_apply_system_wide_localewindow_mainrG   r*   _cachehavePackageListsMessageDialogMessageTypeINFOButtonsTypeCANCEL	set_modalr@   
set_markup_	set_title
add_buttonResponseTypeYESrundestroyrO   verify_installedverifyInstalledLangPacks	available)rA   datadirr   in_grp_adminin_grp_sudonumlcombomodelcelldr   s               r   rE   zGtkLanguageSelector.__init__   sI   %%dG4{{}++,?@""7+F#FG$$T*	!<<03r||~EL	 ,,v.q1R\\^CK )H[HL  % 	Axx3188e#3qax'+$	 ,,g1173F3FG##%t$D&*?@  "",,.**g1173F3FG##%t$D&'2 
" 	""$##%!%%'  " 	''. 	//==dC,,::4@,,::4@ 	% ==;;//%%3??3G3G.1oo.D.DFD!##D$4$459: ; <= >
  Qy\3+;+;+?+?@eeg		#**...%%e,KKM++-%%d+ ||,,--/}}&&(&&44U;$U  	! L	!  	 K	 s$   ,V 9,V VVV"!V"c                 \    | j                   j                  |      }|t        d|z         |S )z'Convenient access to GtkBuilder objectszNo such widget: )rl   
get_objectAttributeError)rA   nameos      r   __getattr__zGtkLanguageSelector.__getattr__   s3     LL##D)9 !3d!:;;r   c                    | j                   j                         }|r/| j                   j                  d       |rk|j                  d        nY| j                   j                  d       |r<|j                  t	        j
                  t        j                  j                               t        j                         r*t        j                          t        j                         r)y y )NTF)r   r<   rH   
set_cursorr   Cursor
CursorTypeWATCHr   rK   rL   )rA   valuewins      r   r*   z GtkLanguageSelector.setSensitive  s    ))+**40t$**51szz#..*>*>?@  "    "r   c                    d }d }t        j                         }t        j                  t        d      |t              }|j                  dd       |j                  ||d       | j                  j                  |       t        j                         }|j                  d| j                         t        j                  t        d	      |      }|j                  ||d       | j                  j                  |       t        j                  t        t        j                        | _        | j                  j#                  | j                          y)
  do all the treeview setup here c                     |j                  |t              }|j                  }|j                  d|j                         |j                  d|       y )Nactiveinconsistent)	get_valueLIST_LANG_INFOr   set_propertyfullInstalled)columnr   r   iterdatalangInfor   s          r   toggle_cell_funczDGtkLanguageSelector.setupInstallerTreeView.<locals>.toggle_cell_func-  sG    t^<H $00L h(>(>?nl;r   c                     |j                  |t              }|j                  |t              }|j                  rd|z  }nd|z  }|j	                  d|       y )Nz	<b>%s</b>%smarkup)r   r   	LIST_LANGchangesr   )cell_layoutrendererr   r   r   r   langNamer   s           r   lang_view_funczBGtkLanguageSelector.setupInstallerTreeView.<locals>.lang_view_func8  sN    t^<HtY7H  $x/!!(F3r   Languagera   expandTNtoggled	Installed)r   r~   TreeViewColumnr   r   r   set_cell_data_functreeview_languagesappend_columnCellRendererToggleconnect
on_toggledr|   strr   TYPE_PYOBJECT	_langlistr   )rA   r   r   r   r   s        r   r   z*GtkLanguageSelector.setupInstallerTreeView+  s    		<	4 '')##AjM8)LHd+!!8^TB--f5((*DOO4##AkNH=!!8-=tD--f5sG,A,AB))$..9r   c                      fd}t        j                         }t        j                  t        d      |t              }|j                  dd       |j                  ||d        j                  j                  |       t        j                  t        j                  t        j                         _         j                  j                   j                         y)r   c                 |   |j                  |t              }d}|j                         }|r:|j                  |t              }||k(  rd}n|dk(  rd}n|j                  |      }|r:|r"d
j                  j                  |dd      z  }	n!d
j                  j                  |dd      z  }	|j                  d|	       y )NFenTz!<span foreground="grey">%s</span>)nativeallCountriesr   r   )r   LANGTREEVIEW_CODEget_iter_first	iter_next_localeinfo	translater   )r   r   r   r   r   r   greyFlagmyiterr   r   rA   s             r   r   zAGtkLanguageSelector.setupLanguageTreeView.<locals>.lang_view_funcR  s    t->?HH))+Foof->?(?$H$;#H0  >))33HTX\3]^  0 0 : :8D_c : dd!!(F3r   r   r   r   TN)r   r~   r   r   r   r   r   treeview_localesr   r|   r   r}   _language_optionsr   )rA   r   r   r   s   `   r   r   z)GtkLanguageSelector.setupLanguageTreeViewP  s    	4( '')##AjM8BWXHd+!!8^TB++F3 "%w/B/BGDWDW!X''(>(>?r   c                     | j                   j                         \  }}|sy | j                  j                  |      }| j                  j	                  |t
              }|S rU   )r   
get_cursorr   get_iterr   r   )rA   pathr   r   r   s        r   _get_langinfo_on_cursorz+GtkLanguageSelector._get_langinfo_on_cursorp  sO    00;;=v~~&&t,>>++D.Ar   c                    | j                         }|j                  j                         D ]B  }t        |d   d|d   j                  d|d   j
                  d|d   j                         D t        d|j                  z         y )Nr   z, available: r`   z, installed: z, doChange: zinconsistent? : %s)r   languagePkgListitemsprintr   	installeddoChanger   )rA   r   pkgs      r   debug_pkg_statusz$GtkLanguageSelector.debug_pkg_statusx  s    //1++113 	DCc!fcRSfN^N^`cde`f`p`pruvwrx  sB  sB  C  D	D"X%:%::;r   c                    d}d}d}| j                   D ]W  \  }}|j                  sd}|j                  j                         D ]&  }|j                  s|j
                  r|dz   }"|dz   }( Y t        j                  dd|      d|iz  }t        j                  dd|      d|iz  }|dk(  r!|dk(  r| j                  j                  d	       nk|dk(  r| j                  j                  |       nJ|dk(  r| j                  j                  |       n)| j                  j                  t        d
      ||fz         |r| j                  j                  d       y | j                  j                  d       y )NFr   Tr`   z%(INSTALL)d to installINSTALLz%(REMOVE)d to removeREMOVErg   z%s, %s)r   r   r   valuesr   r   r   ngettextlabel_install_removeset_textr   r   rH   )	rA   changedcountInstallcountRemovelangr   itemtextInstall
textRemoves	            r   check_statusz GtkLanguageSelector.check_status~  ss    $ 	<T8$44;;= <D}}>>*5/K+7!+;L<	< &&'?AY[ghlu  xD  lE  E%%&<>TVabfnp{e||
! 1%%..r2A%%..{;Q%%..z: %%..q{k:=V/VW++D1++E2r   c           	         | j                   j                         sy | j                  }|j                         }|sy |j	                          | j                   j                         }t        t        d      dddddd      }t        | j                   j                               D ]e  \  }}||v r||   n|}|j                         }|j                  |t        |       |j                  |t        |       ||k(  sU|j                  |       g y )	NnoneXIMIBusSCIMThaizFcitx 4zFcitx 5)r  ximibusscimthaifcitxfcitx5)r   r   r   	get_modelcleargetCurrentInputMethoddictr   	enumerategetAvailableInputMethodsappend	set_value	IM_CHOICEr   
set_active)	rA   r   r   	currentIMnamesiIMr   r   s	            r   r   z'GtkLanguageSelector.check_input_methods  s    }}&&(**! MM779	 !F)V&v]foxy !G!G!IJ 	$GQ "e59D<<>DOOD)R0OOD'40Y  #	$r   c                    t        | j                  j                                	 | j                  D ]   \  }}| j                  j	                  |       " 	 | j                  j                         \  }}t        | j                  j                                ||fS # t
        $ r< | j                  t        d      t        d             t        j                  d       Y w xY w)NSoftware database is brokenIt is impossible to install or remove any software. Please use the package manager "Synaptic" or run "sudo apt-get install -f" in a terminal to fix this issue at first.r`   )r   r   get_changesr   tryChangeDetailsr   errorr   sysexitgetChangesList)rA   r  r   to_instto_rms        r   build_commit_listsz&GtkLanguageSelector.build_commit_lists  s    dkk%%'(
	$(NN 7 x,,X67  ;;557% 	dkk%%'( ' 	JJ/0 ) *+ HHQK	s   /B ACCc                 f   t        j                  t         j                  j                  t         j                  j
                        }|j                  d       |j                  | j                         |j                  d|d|       d|_
        |j                          |j                          y )Nrb   Tre   rf   rg   )r   r   r   ERRORr   CLOSEr   r@   r   r   r   r   r   )rA   summarymsgr   s       r   r,  zGtkLanguageSelector.error	  su    3??+@+@&)oo&;&;=	D	D,,-	WcBC				r   c                 >    t        |      }| j                  |d       y )Nrg   )r   r,  )rA   r,  r7  s      r   _show_error_dialogz&GtkLanguageSelector._show_error_dialog  s    %j

3r   c                    d}	 |D ].  }|| j                   v s| j                   |   j                          0 |D ].  }|| j                   v s| j                   |   j                          0 	 | j                   j	                          | j                   j
                  j                  dk7  r| j                  t        d      t        d             t        | j                  | j                  | j                        }t        j                  | j                  |      | _         |j!                          d}|S # t        $ r d}Y w xY w)z: verify if the selected package can actually be installed TFr   z/Could not install the selected language supportzThis is perhaps a bug of this application. Please file a bug report at https://bugs.launchpad.net/ubuntu/+source/language-selector/+filebug)r   mark_installmark_deleteSystemErrorr  	_depcachebroken_countr,  r   r0   dialog_progressprogressbar_cacher   aptCacher   rV   )rA   	inst_listrm_listr   r   rN   s         r   verify_commit_listsz'GtkLanguageSelector.verify_commit_lists  s%   	  4$++%KK$1134  3$++%KK$0023 	;;  --2JJqJK ` ab #4#7#7#'#9#9#'#3#35H ))D$4$4h?DKMMOC
%  	C	s   D0 2D0 D0 0D>=D>c                 N   | j                  d       | j                         \  }}| j                  ||      s6| j                  t	        d      t	        d             | j                  d       y| j                  ||       | j                  d       t        |      t        |      z   S )z 
        commit helper, builds the commit lists, verifies it
        
        returns the number of install/removed packages
        F+Could not install the full language supportzUsually this is related to an error in your software archive or software manager. Check your preferences in Software Sources (click the icon at the very right of the top bar and select "System Settings... -> Software Sources").Tr   )r*   r2  rF  r,  r   commitlen)rA   rD  rE  s      r   commitAllChangesz$GtkLanguageSelector.commitAllChanges5  s     	% #668G''	7;JJ?@ A BC d# 	Iw'$9~c'l**r   c                     t        |      }|j                  | j                         |j                  d| j                         |j                  | j                         y )Nfinished)error_handler)r
   r@   r   r   _on_finishedr   	_on_error)rA   transactiondias      r   _run_transactionz$GtkLanguageSelector._run_transactionP  sF    ,d../J 1 12dnn-r   c                     | j                   s`t        j                         r)t        j                          t        j                         r)t	        j
                  d       | j                   s_y y )Ng{Gz?)_transaction_finishedr   rK   rL   timesleeprR   s    r   _wait_for_aptdaemon_finishz.GtkLanguageSelector._wait_for_aptdaemon_finishV  sH    ,,$$&""$ $$&JJt ,,r   c                 2    |j                          d| _        y rQ   )rV   rU  )rA   dialogs     r   rO  z GtkLanguageSelector._on_finished\  s    %)"r   c                     t        |d      r?|j                         dk(  r,| j                  t        d      t        d             d| _        y | j                  t        d      t	        |             d| _        y )Nget_dbus_namez-org.freedesktop.PolicyKit.Error.NotAuthorizedrH  z(Failed to authorize to install packages.T)hasattrr\  r,  r   r   rU  )rA   r,  s     r   rP  zGtkLanguageSelector._on_error`  sq    5/*u/B/B/DC0D

GHDEG &*" JJCDJ  &*"r   c                 R    d| _         | j                          | j                          y NF)rU  _update_aptdaemonrX  rR   s    r   update_aptdaemonz$GtkLanguageSelector.update_aptdaemonl  s"    %*" '')r   c              #      K   	 | j                   j                  d      }| j                  |       y # t        $ r}| j	                  |       Y d }~y d }~ww xY ww)NT)defer)r   update_cacherS  	Exceptionr9  )rA   transes      r   r`  z%GtkLanguageSelector._update_aptdaemonq  sS     	'''..T.::E!!%( 	'##A&&	's*   A/4 A	AAAAAc                 V    d| _         | j                  ||       | j                          y r_  )rU  _commit_aptdaemonrX  )rA   instrms      r   commit_aptdaemonz$GtkLanguageSelector.commit_aptdaemony  s&    %*"tR('')r   c           	   #      K   t        |      dk(  rt        |      dk(  ry 	 | j                  j                  |g |g g g d      }| j                  |       y # t        $ r}| j                  |       Y d }~y d }~ww xY ww)Nr   T)install	reinstallremovepurgeupgrade	downgraderc  )rJ  r   commit_packagesrS  re  r9  )rA   rj  rk  rf  rg  s        r   ri  z%GtkLanguageSelector._commit_aptdaemon~  s     t9>c"gl	'''112RD 2 * *E !!%( 	'##A&&	's.   A>5A A>	A; A61A>6A;;A>c                 @    t         j                  j                  |      S rU   )r   Widgethide_on_delete)rA   widgetevents      r   rw  z"GtkLanguageSelector.hide_on_delete  s    zz((00r   c                 D   | j                         }t        |      dkD  rt        j                  t        j                  j
                        }|j                  d       |j                  | j                         |j                  dt        d      dt        d             |j                  t        d      t        j                  j                  t        d	      t        j                  j                         |j                  t        j                  j                         |j!                  d
       t        j"                  j%                  t        d            }t        j&                         }|j)                  t        j*                  j,                  t        j*                  j,                         |j/                  d       t        j0                         }|j3                  d       |j5                  d       |j7                         }d
}|D ]
  }|d|z  z  } |j9                  |d       |j;                  |j=                                |j?                  |       |j?                  |       |jA                         jC                  |ddd       |jE                          |jG                         }	|jI                          |	t        j                  j                  k(  rE| jK                  d       | jM                  |g        | jO                          | jK                  d       yyy)zy called at the start to inform about possible missing
            langpacks (e.g. gnome/kde langpack transition)
        r   )rc   Tre   z0The language support is not installed completelyrf   z}Some translations or writing aids available for your chosen languages are not installed yet. Do you want to install them now?z_Remind Me Later_Installrg   Details   Fz%s
N)(getMissingLangPacksrJ  r   r   r   QUESTIONr   r@   r   r   r   add_buttonsr   NOr   set_default_responser   ExpandernewScrolledWindow
set_policy
PolicyType	AUTOMATICset_min_content_heightTextViewset_cursor_visibleset_editable
get_bufferr  place_cursorget_start_iteraddget_message_arear   show_allr   r   r*   rI  r   )
rA   missingr   expanderscrolltextviewbufpkgsr   r   s
             r   r   z,GtkLanguageSelector.verifyInstalledLangPacks  s]   
 **, w<!!!s/G/GHAKK 0 01LLDE ) *+ ,
 MM!./1A1A1D1DJ-)9)9)=)=?""3#3#3#7#78KKO||'')5H'')Fcnn668P8PQ))#.||~H''.!!%(%%'CD %$%LLr"S//12LL JJx  ++HdD!D%%'CIIKc&&***!!%(GR('')!!$'	 +C r   c                    | j                   j                          t        | j                  | j                  | j
                        }	 | j                  r"| j                  |       |j                          n| j                  d        | j                  j                         }|D ]  }d }dt         j"                  v rPt         j"                  d   }t%        j&                  d|      r'| j(                  j+                  |j,                  d      }|s%| j(                  j+                  |j,                        }| j                   j/                  ||g        | j                   j1                  t2        t4        j6                  j8                         y # t        $ r= | j                  t        d      t        d             t        j                  d       Y Gw xY w)Nr(  r)  r`   LANGUAGEzvi[^a-z]Tr   )r   r  r0   r@  rA  r   rv   	openCacherV   r   r,  r   r-  r.  r   getLanguageInformationrr   environrematchr   r   languageCoder  set_sort_column_idr   r   SortType	ASCENDING)rA   rN   languageListr  	lang_namecurrent_languages         r   r   z&GtkLanguageSelector.updateLanguageView  sp   t33T5K5K#//1	}}x(t$ {{99; ! 	5D IRZZ'#%::j#9 88J(89 $ 0 0 : :4;L;LUY : ZI ,,66t7H7HI	NN!!9d"34#	5$ 	)))S\\5K5KL= ' 	JJ/0 ) *+ HHQK	s   ?F AGGc                 @   | j                   }|j                         }|j                         dk  ry||j                            \  }}| j                  j	                         d   }t
        j                  | j                  |      }|d   |k(  ry| j                  |       y)Nr   FLOCALE
sysFormatsT)	r{   r  
get_activer   getSystemDefaultLanguagemacrosLangpackMacrosrj   writeSysFormatsSetting)rA   r   r   r  codeold_codemacrs          r   writeSystemFormatsz&GtkLanguageSelector.writeSystemFormats  s    ,,!!U--/0t##<<>qA$$T]]H=>T!##t#4r   c                    | j                   }|j                         }|j                         dk  ry ||j                            \  }}| j                  j	                         d   }|d k(  r| j                  j                         d   }n|}t        j                  | j                  |      }|d   |k(  ry| j                  |       y)Nr   r  F)userFormatsT)
r{   r  r  r   getUserDefaultLanguager  r  r  rj   writeUserFormatsSetting)rA   r   r   r  r  tempr  r  s           r   writeUserFormatsz$GtkLanguageSelector.writeUserFormats  s    ,,!!U--/0t668;4<''@@B1EHH$$T]]H=>T!$$$6r   c                     | j                   j                         \  }}||k(  ry| j                  |       | j                   j                         ry| j	                  |       y)NF)sysLanguageTr  )r   r  writeSysLanguageSettingisSetSystemFormatsr  )rA   languageStringformats_locale
old_strings       r   writeSystemLanguagez'GtkLanguageSelector.writeSystemLanguage  sb    '+'7'7'P'P'R$'$$$@..0 	##~#>r   c                     | j                   j                         d   }t        |      dk(  r| j                   j                         d   }n|}||k(  ry| j	                  |       y)Nr`   r   F)userLanguageT)r   r  rJ  r  writeUserLanguageSetting)rA   r  r  r  s       r   writeUserLanguagez%GtkLanguageSelector.writeUserLanguage  sc    668;t9>))BBDQGJJ'%%>%Br   c           	         | j                   }|j                         }|sy |j                          d }| j                  j	                         \  }}t        |      dk(  r| j                  j                         d   }t        |      dkD  rBt        j                  | j                  |      }|d   }| j                  j                  |d      }	 | j                  j                          t        j                  dgd      }g }t        |j                  d            D ]3  \  }	}
|j!                  | j                  j                  |
d      |
g       5 t        |      dkD  r|| _        |j                  d      }nd	t$        j&                  v r@t$        j&                  j)                  d	      | _        | j"                  j                  d      }n;| j                  j+                  |      | _        | j"                  j                  d      }| j-                  ||      }|D ]  }	| j                  j!                  |	        	 t        | j                  j/                               D ]  \  }	}|j!                         }|j1                  |t2        | j                  j                  |d             |j1                  |t4        |       |sb| j                  j                  |d      |k(  s|j7                  |	        | j9                          y )
Nr   r  Tr  z*/usr/share/language-tools/language-options)universal_newlines
:r  )r{   r  r  r   r  rJ  r  r  r  rj   r   r   
subprocesscheck_outputr  splitr  userEnvLanguagerr   r  getmakeEnvString
bubbleSortgenerated_localesr   r   r   r"  updateExampleBox)rA   r   r   defaultLangNamedefaultLangCoder  r  r   mylistr%  option	languagesmylist_sortedlocr   s                  r   r   z,GtkLanguageSelector.updateLocaleChooserCombo%  s    ,, ! ,0,<,<,S,S,U).1$"..GGI!LO!#((HD"8nO"..88QU8VO 	2$$&))9:#% $gmmD&9; 	UKQMM4++55fT5JFST	U~"#1D &,,S1IRZZ'')zz~~j'A$ 0066s;	'+'7'7'E'Eo'V$ 0066s;		: 	-A""))!,	- 	5!4#3#3#E#E#GI 	$HQ<<>DOOD"7$$..s4.@BOOD"3S9##--c$-??R  #	$ 	r   Nc                    t        dt        |      dz
        D ]  }t        dt        |      dz
        D ]  }||   d   }||dz      d   }	 |j                  |      }	 |j                  |      }||kD  r||dz      ||   c||<   ||dz   <   W|dk\  s]|dk\  sc||kD  si||dz      ||   c||<   ||dz   <     |S #  d}Y dxY w#  d}Y [xY w)z
        Sort the list 'sortlist' using bubble sort.
        Optionally, if a list 'presort' is given, put this list first and bubble sort the rest.
        r   r`   i )rangerJ  index)	rA   sortlistpresortr%  jdata1data2v1v2s	            r   r  zGtkLanguageSelector.bubbleSortb  s   
 qXq) 	KA1S]1_- K A 1a(  u-B  u-B rE081x{-HQK1FlrV|081x{-HQK1K	K   B Bs   B:C:C C	c                    | j                   }|j                         }|j                         dk  ry | j                  j	                  d       | j
                  j	                  d       | j                  j	                  d       ||j                            \  }}t        j                  | j                  |      }|d   }	 t        j                  t        j                  |       | j                  j	                  t        j                  dd	             | j
                  j	                  t        j                   d
dd	             | j                  j	                  t#        j$                  t        j&                  t        j(                                     y # t        j                  $ r0 | j                  j	                  dt        d      |z  z   dz          Y y w xY w)Nr   rg   	SYSLOCALEz[ zkFailed to apply the '%s' format
choice. The examples may show up if you
close and re-open Language Support.z ]g(\@T)groupingz%.2fg=
2A)r{   r  r  label_example_currencyr  label_example_numberlabel_example_dater  r  rj   locale	setlocaleLC_ALLErrorr   currencyformat_stringrV  strftimenl_langinfoD_T_FMT)rA   r   r   r  r  r  mylocales          r   r  z$GtkLanguageSelector.updateExampleBox  s   ,,!!##,,R0!!**2.((,U--/0t$$T]]D9$	V]]H5 	##,,V__XPT-UV!!**6+?+?
]a+bc((v7I7I&..7Y)Z[ || 	##,,T 6 79AB.B EI.I J 	s   >$F A GGc                 D    | j                  d |j                                y rU   )r   	to_string)rA   treeviewr   view_columns       r   #on_treeview_languages_row_activatedz7GtkLanguageSelector.on_treeview_languages_row_activated  s    dnn./r   c                 6   | j                   j                  |      }| j                   j                  |t              }|j                  rA|j
                  j                         D ]#  }|j                  s|j                  rd|_	        % n|j                  rn|j
                  j                         D ]P  }|j                  s|j                  s|j                  rd|_	        0|j                  s=|j                  rJd|_	        R nm|j
                  j                         D ]P  }|j                  s|j                  r|j                  rd|_	        0|j                  r=|j                  rJd|_	        R | j                          | j                  j                          y)z called when on install toggle TFN)r   get_iter_from_stringr   r   r   r   r  r   r   r   r   r  r   
queue_draw)rA   r   path_stringr   r   r   s         r   r   zGtkLanguageSelector.on_toggled  s0   ~~22;?>>++D.A   //668 (MM#--#'CL( ##//668 ,MMMMcll',--'+,  //668 ,MM#,,',!mmCLL'+, 	**,r   c                 8    | j                   j                          y rU   )window_installerrV   rA   rx  s     r   on_button_cancel_clickedz,GtkLanguageSelector.on_button_cancel_clicked  s    ""$r   c                     | j                   j                          | j                         dkD  r| j                          | j	                          y r&   )r   rV   rK  r   r   r  s     r   on_button_apply_clickedz+GtkLanguageSelector.on_button_apply_clicked  s=    ""$  "Q&##%%%'r   c                 t    | j                   j                         }|r|j                  | j                          y y rU   r   get_applicationremove_window)rA   ry  r   apps       r   on_delete_eventz#GtkLanguageSelector.on_delete_event  2    ..0d../ r   c                 t    | j                   j                         }|r|j                  | j                          y y rU   r  )rA   rx  r	  s      r   on_button_quit_clickedz*GtkLanguageSelector.on_button_quit_clicked  r  r   c                    t        j                  |j                        }|j                         t         j                  j
                  z  r<|dk(  r7| j                  j                         }|r|j                  | j                         |j                         t         j                  j                  z  t         j                  j                  k(  r<|dk(  r7| j                  j                         }|r|j                  | j                         y )NwEscape)
r   keyval_namekeyval	get_stateModifierTypeCONTROL_MASKr   r  r  	MOD2_MASK)rA   rx  ry  keynamer	  s        r   on_window_main_key_press_eventz2GtkLanguageSelector.on_window_main_key_press_event  s    //%,,/??s//<<<C""224C!!$"2"23OO 0 0 : ::s?O?O?Y?YY^eiq^q""224C!!$"2"23r   c                 :   |j                         }|j                         }d}|r?|j                  |t              }|dk7  r|dz   }||z   }|dk(  rn|j	                  |      }|r?| j                  |       || _        | j                          | j                          y )Nrg   r  r   )	r  r   r   r   r   r  r  r   r   )rA   rx  drag_contentr   r   envLanguager   s          r   on_treeview_locales_drag_endz0GtkLanguageSelector.on_treeview_locales_drag_end  s       "%%'//&):;Cr!)C/%+Kd{__V,F  	{+*  "%%'r   c                 :    | j                  | j                         y rU   )r  r  r  s     r   -on_button_apply_system_wide_languages_clickedzAGtkLanguageSelector.on_button_apply_system_wide_languages_clicked.  s     	  !5!56r   c                 8    | j                   j                          y rU   )r   rG   r  s     r   *on_button_install_remove_languages_clickedz>GtkLanguageSelector.on_button_install_remove_languages_clicked4  s    ""$r   c                     | j                   }|j                         }|j                         dk  ry ||j                            \  }}| j                  j	                  |       y r&   )r   r  r  r   setInputMethod)rA   rx  r   r   	IM_choiceIM_names         r    on_combobox_input_method_changedz4GtkLanguageSelector.on_combobox_input_method_changed7  sW    **!!$U%5%5%78G$$Y/r   c                     | j                          | j                          | j                          | j                          y rU   )r   r  r   r  r  s     r   "on_combobox_locale_chooser_changedz6GtkLanguageSelector.on_combobox_locale_chooser_changedD  s4     	  "%%'r   c                 $    | j                          y rU   )r  r  s     r   *on_button_apply_system_wide_locale_clickedz>GtkLanguageSelector.on_button_apply_system_wide_locale_clickedL  s     	!r   rU   )6rW   rX   rY   rE   r   r*   r   r   r   r   r  r"   r   r2  r,  r9  rF  rK  rS  rX  rO  rP  ra  r   r`  rl  ri  rO   rI  rw  r   r   r  r  r  r  r   r  r  r  r   r  r  r
  r  r'   r  r  r+   r  r   r%  r'  r)  r   r   r   r\   r\      s   u n!H#:J@@<3v $ $v (<+6.*
**
 ' '*
 	' 	' FF1-(^*MX$
 :  : x|\80-:%(0
0
 
 
6 ( (8   % 0 0        r   r\   )4
__future__r   r   rp   r  rr   rx   r  r  r-  rV  r   girequire_versiongi.repositoryr   r   r   rB  aptdaemon.clientr   rc  r   aptdaemon.enumsaptdaemon.gtk3widgetsr
   !LanguageSelector.LanguageSelectorLanguageSelector.ImConfigr   LanguageSelector.macrosLanguageSelector.utilsr   LanguageSelector.LangCacher   r  r   r   r   r   r!  r   r   r"   r'   r+   rZ   rN   r3   
OpProgressr0   ri   r\   r   r   r   <module>r7     s    &  
  	 
 	  
    	   5%     5%   + + 
  "  3 / . % 2 > 1X Ah !H
" # *#,,##.. *XJ. Jr   