
    ?g/                     8   d dl mZ d dl d dlmZmZmZmZ d dlm	Z
 d dlm	Z d dlmZ d dlZd dlZd dlZd dlZe
ez   Zej'                  d       i dd	d
dddddddddddddddddddddddddddddddd d!d"Zg d#Zej,                  ej.                  ej0                  ej2                  ej4                  ej6                  d$Z G d% d&e      Z G d' d(ej@                        Z! G d) d*e      Z"d+ Z#eD ]  Z$ e#e$       e%       d,e$z   <    y)-    )Gio)*)SoundFileChooserDateChooserTimeChooser
Keybinding)CAN_BACKEND)ListNr
   descriptionlabelminminimaxmaxistepunitsdigitsz
show-value
show_valuez
select-dir
dir_selectheighttooltippossiblezexpand-widthexpand_widthcolumnszevent-soundsevent_soundsdefault_iconicon_categoriesdefault_categoryshow_secondsshow_buttons)zshow-secondszshow-buttons)<=>=<>!==)r#   r!   r$   r"   r%   r&   c                        e Zd Zd fd	ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )JSONSettingsHandlerc                    t         t        |           d | _        || _        || _        t        j                  j                  | j
                        | _	        | j                  j                  t        j                  j                  d       | _        | j                  j                  d| j                         i | _        i | _        i | _        | j'                         | _        y )Nchanged)superr(   __init__resume_timeoutnotify_callbackfilepathr   Filenew_for_pathfile_objmonitor_fileFileMonitorFlags
SEND_MOVEDfile_monitorconnectcheck_settingsbindings	listenersdepsget_settingssettings)selfr/   r.   	__class__s      @/usr/share/cinnamon/cinnamon-settings/bin/JsonSettingsWidgets.pyr,   zJSONSettingsHandler.__init__,   s    !413". --dmm< MM66s7K7K7V7VX\]!!)T-@-@A	))+    c                 z   |t         j                  j                  t         j                  j                  z  z  dk(  r8|t         j                  j                  t         j                  j                  z  z  }|||||d}|| j                  vrg | j                  |<   | j                  |   j                  |       |t         j                  j                  z  dk7  r!| j                  || j                  |             |t         j                  j                  z  dk7  r$|j                  d|z   | j                  |      |d<   y y )Nr   )objpropdirmap_getmap_setznotify::oid)
r   SettingsBindFlagsSETGETr9   appendset_object_value	get_valuer7   object_value_changed)r>   keyrC   rD   	directionrF   rG   binding_infos           r@   bindzJSONSettingsHandler.bind=   s   --11C4I4I4M4MMNRSS..22S5J5J5N5NNNI"Dwcjkdmm#!#DMM#c!!,/s,,000A5!!,s0CDs,,000A5"%++jot?X?XZ]"^L 6rA   c                 z    || j                   vrg | j                   |<   | j                   |   j                  |       y N)r:   rL   )r>   rP   callbacks      r@   listenzJSONSettingsHandler.listenK   s3    dnn$"$DNN3s""8,rA   c                 &    | j                  |d      S Nvalue)get_propertyr>   rP   s     r@   rN   zJSONSettingsHandler.get_valueP   s      g..rA   c                 r   || j                   |   d   k7  r|| j                   |   d<   | j                          | j                  r| j                  | ||       || j                  v r&| j                  |   D ]  }| j	                  ||        || j
                  v r| j
                  |   D ]  } |||        y y y rY   )r=   save_settingsr.   r9   rM   r:   )r>   rP   rZ   inforV   s        r@   	set_valuezJSONSettingsHandler.set_valueS   s    DMM#&w//*/DMM#w' ##$$T36dmm# MM#. 7D))$67 dnn$ $s 3 )HS%() % 0rA   c                 *    | j                   |   }||   S rU   r=   )r>   rP   rD   propss       r@   r[   z JSONSettingsHandler.get_propertyb   s    c"T{rA   c                 $    || j                   |   v S rU   rb   )r>   rP   rD   s      r@   has_propertyz JSONSettingsHandler.has_propertyf   s    t}}S)))rA   c                     || j                   v S rU   rb   r\   s     r@   has_keyzJSONSettingsHandler.has_keyi   s    dmm##rA   c                 r   | j                   |   D ]8  }||d   k(  s|d   j                  |d         }d|v s(|d   . |d   |      }: | j                   |   D ]  }||d   k7  s| j                  ||        | j                  ||       || j                  v r| j                  |   D ]  } |||        y y )NrC   rD   rG   )r9   r[   rM   r`   r:   )r>   rC   rZ   rP   r_   rV   s         r@   rO   z(JSONSettingsHandler.object_value_changedl   s    MM#& 	3Dd5k!U00f>$i)D+DOE2E		3 MM#& 	3Dd5k!%%dE2	3 	sE"$..  NN3/ %e$% !rA   c                 ,   |d   t         j                  j                  z  dk(  ry |d   j                         5  d|v r|d    |d   |      }||d   j	                  |d         k7  r||d   j                  |d   |       d d d        y # 1 sw Y   y xY w)NrE   r   rC   rF   rD   )r   rI   rK   freeze_notifyr[   set_property)r>   r_   rZ   s      r@   rM   z$JSONSettingsHandler.set_object_value|   s    ;..222a7%[&&( 	>D T)_%@'Y.U00f>>5CTU((fu=		> 	> 	>s   A	B

Bc                    | j                   }| j                         | _         | j                  D ]F  }| j                   |   d   }|||   d   k7  s!| j                  |   D ]  }| j                  ||        H | j                  j                         D ]3  \  }}| j                   |   d   }|||   d   k7  s$|D ]  } |||        5 y rY   )r=   r<   r9   rM   r:   items)r>   argsold_settingsrP   	new_valuer_   callback_listrV   s           r@   r8   z"JSONSettingsHandler.check_settings   s    }}))+== 	;Cc*73IL-g66 MM#. ;D))$	:;	; #'.."6"6"8 	-Cc*73IL-g66 - -HS),-	-rA   c                     t        | j                        }|j                         }|j                          	 t	        j
                  |t        j                        }|S #  t        d| j                  z        xY w)Nobject_pairs_hook.Failed to parse settings JSON data for file %s)	openr/   readclosejsonloadscollectionsOrderedDict	Exception)r>   fileraw_datar=   s       r@   r<   z JSONSettingsHandler.get_settings   sd    DMM"99;

	^zz(k>U>UVH 	^Lt}}\]]s   %A A8c                    | j                          t        j                  j                  | j                        rt        j
                  | j                         t        j                  | j                  dd      }t        | j                  d      }|j                  |       |j                          | j                          y )N   F)indentensure_asciiw+)pause_monitorospathexistsr/   removery   dumpsr=   rv   writerx   resume_monitor)r>   r   new_files      r@   r^   z!JSONSettingsHandler.save_settings   sz    77>>$--(IIdmm$::dmmAEJt,x rA   c                 F    | j                   j                          d | _        y rU   )r6   cancelhandlerr>   s    r@   r   z!JSONSettingsHandler.pause_monitor   s      "rA   c                     | j                   rt        j                  | j                          t        j                  d| j                        | _         y )Ni  )r-   GLibsource_removetimeout_add	do_resumer   s    r@   r   z"JSONSettingsHandler.resume_monitor   s8    t223"..tT^^DrA   c                     | j                   j                  t        j                  j                  d       | _        | j
                  j                  d| j                        | _        d | _	        y)Nr*   F)
r2   r3   r   r4   r5   r6   r7   r8   r   r-   r   s    r@   r   zJSONSettingsHandler.do_resume   sS     MM66s7K7K7V7VX\]((00D<O<OP"rA   c                     | j                   D ]G  }d| j                   |   v s| j                   |   d   | j                   |   d<   | j                  |       I | j                          y )NrZ   default)r=   do_key_updater^   r\   s     r@   reset_to_defaultsz%JSONSettingsHandler.reset_to_defaults   sc    == 	(C$--,,.2mmC.@.Kc"7+""3'	(
 	rA   c                    || j                   v r6| j                   |   D ]$  }| j                  || j                  |   d          & || j                  v r.| j                  |   D ]  } ||| j                  |   d           y y rY   )r9   rM   r=   r:   )r>   rP   r_   rV   s       r@   r   z!JSONSettingsHandler.do_key_update   s    $--c* I%%dDMM#,>w,GHI $..  NN3/ ;dmmC09:; !rA   c                    t        |      }|j                         }|j                          	 t        j                  |t
        j                        }| j                  D ]e  }d| j                  |   vr||v r;d| j                  |   v r*||   d   | j                  |   d<   | j                  |       Tt        d|d|d       g | j                          y #  t        d| j                  z        xY w)Nrs   ru   rZ   zSkipping key z: the key does not exist in z or has no value)rv   rw   rx   ry   rz   r{   r|   r}   r/   r=   r   printr^   )r>   r/   r~   r   r=   rP   s         r@   load_from_filez"JSONSettingsHandler.load_from_file   s    H~99;

	^zz(k>U>UVH == 	iCdmmC00h7dmmC.@#@.6smG.Dc"7+""3'Y\^fgh	i 		^Lt}}\]]s   %C C1c                    t         j                  j                  |      rt        j                  |       t	        j
                  | j                  d      }t        |d      }|j                  |       |j                          y )Nr   )r   r   )
r   r   r   r   ry   r   r=   rv   r   rx   )r>   r/   r   r   s       r@   save_to_filez JSONSettingsHandler.save_to_file   sT    77>>(#IIh::dmmA6$'x rA   rU   )NN)__name__
__module____qualname__r,   rS   rW   rN   r`   r[   re   rg   rO   rM   r8   r<   r^   r   r   r   r   r   r   r   __classcell__r?   s   @r@   r(   r(   +   si    ,"_-
/)*$% >- E
;&rA   r(   c                   *     e Zd Z fdZd Zd Z xZS )JSONSettingsRevealerc                 D   t         t        |           || _        d | _        d | _        d | _        t        D ]-  }||v s|| _        |j                  |      \  | _        | _         n | j                  (|d d dk(  rd| _	        |dd  | _        nd| _	        || _        t        j                  t        j                  j                  d      | _        t        j                  j!                  | | j                         | j#                  t        j$                  j&                         | j)                  d       | j                  j+                  | j                  | j,                         | j-                  | j                  | j                  j/                  | j                               y )N   !TF   )orientationspacing   )r+   r   r,   r=   rP   oprZ   
OPERATIONSsplitinvertGtkBoxOrientationVERTICALboxRevealeraddset_transition_typeRevealerTransitionType
SLIDE_DOWNset_transition_durationrW   key_changedrN   )r>   r=   rP   r   r?   s       r@   r,   zJSONSettingsRevealer.__init__   sA   "D24 
 	BSy'*yy}$$*		 882Aw#~"qr7#77s'?'?7Ltxx(  !;!;!F!FG$$S)TXXt'7'784==#:#:488#DErA   c                 @    | j                   j                  |ddd       y )NFTr   )r   
pack_start)r>   widgets     r@   r   zJSONSettingsRevealer.add  s    FE43rA   c                    | j                   Dt        |      }| j                  t        | j                      | || j                                     y || j
                  k7  r| j                  d       y | j                  d       y NTF)r   typeset_reveal_childOPERATIONS_MAPrZ   r   )r>   rP   rZ   val_types       r@   r   z JSONSettingsRevealer.key_changed  sd    77E{H!!."9%$**AU"VWdkk!!!$'!!%(rA   )r   r   r   r,   r   r   r   r   s   @r@   r   r      s    F<4)rA   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	JSONSettingsBackendc                    d| _         t        | d      r[| j                  j                  | j                  d      r5| j                  | j                  j                  | j                  d             t        | d      r| j                  }n| j                  }| j                  t| j                  j                  | j                  || j                  | j                  t        | d      r| j                  nd t        | d      r| j                         y d        y | j                  j                  | j                  | j                         | j!                          | j#                          y )NFset_roundingroundbind_objectrF   rG   )_savinghasattrr=   re   rP   r   r[   r   content_widgetbind_dirrS   	bind_proprF   rG   rW   _settings_changed_callbackon_setting_changedconnect_widget_handlers)r>   r   s     r@   attachzJSONSettingsBackend.attach  s   4(T]]-G-GRY-Zdmm887KL4'**K--K==$MMtxxdnndmm/6tY/Gt||T/6tY/Gt||SMQS MM  4+J+JK##%((*rA   c                 l    d| _         | j                  j                  | j                  |       d| _         y r   )r   r=   r`   rP   )r>   rZ   s     r@   r`   zJSONSettingsBackend.set_value#  s(    %0rA   c                 L    | j                   j                  | j                        S rU   )r=   rN   rP   r   s    r@   rN   zJSONSettingsBackend.get_value(  s    }}&&txx00rA   c                     | j                   j                  | j                  d      }| j                   j                  | j                  d      }||gS )Nr   r   )r=   r[   rP   )r>   r   r   s      r@   	get_rangezJSONSettingsBackend.get_range+  s@    mm((59mm((59SzrA   c                 <    | j                   s | j                  |  y y rU   )r   r   r>   rn   s     r@   r   z.JSONSettingsBackend._settings_changed_callback0  s    ||#D##T* rA   c                     t        d      )Nz9SettingsWidget class must implement on_setting_changed().)NotImplementedErrorr   s     r@   r   z&JSONSettingsBackend.on_setting_changed4  s    !"]^^rA   c                 2    | j                   t        d      y )NzRSettingsWidget classes with no .bind_dir must implement connect_widget_handlers().)r   r   r   s     r@   r   z+JSONSettingsBackend.connect_widget_handlers7  s    == %&z{{ !rA   N)
r   r   r   r   r`   rN   r   r   r   r    rA   r@   r   r     s'    +$
1
+_|rA   r   c                 B     G fddt               |    t              S )Nc                   "     e Zd Z fdZ xZS )'json_settings_factory.<locals>.NewClassc                    || _         || _        i }|D ]V  }|t        v r||   |t        |   <   |dk(  s!g |d<   ||   j                         D ]  \  }}|d   j	                  ||f        X t        |   di | | j                          y )Noptionsr   )rP   r=   JSON_SETTINGS_PROPERTIES_MAPrm   rL   r+   r,   r   )
r>   rP   r=   
propertieskwargsrD   rZ   r   NewClassr?   s
           r@   r,   z0json_settings_factory.<locals>.NewClass.__init__=  s    DH$DMF" A77AKDAQF7=>Y&(*F9%(24(8(>(>(@ Auy)00%@AA (D*4V4KKMrA   )r   r   r   r,   r   )r?   r   s   @r@   r   r   <  s    	 	rA   r   )globalsr   )subclassr   s    @r@   json_settings_factoryr   ;  s     79X&(;   OrA   JSONSettings)&gi.repositoryr   xapp.SettingsWidgetsSettingsWidgetsr   r   r   r   xapp.GSettingsWidgetsr	   px_can_backendc_can_backendTreeListWidgetsr
   r   r{   ry   operatorcan_backendrL   r   r   ltlegtgeneeqr   objectr(   r   r   r   r   r   r   r   r   rA   r@   <module>r      s    " R R ? 8   	   },   6   	  
  	 
                        *! " +# $ (''  , /
{{(++HKKx{{bjbmbmt|tt  Ax& xt))3<< ))V)|& )|V&  EF'<V'DGInV#$ErA   