
    ?gEY                     h   d dl Z  e j                  dd        e j                  dd       d dlmZmZmZmZ d dlZd dlZd dl	Z	d dl
Z
d dlmZ  e	j                  ej                  ej                          e	j                   ej                         e	j                  Zd dlmZ d dlmZ  G d	 d
e      Zy)    NGtkz3.0CMenu)r   GObjectGdkr   )config)
MenuEditor)utilc                       e Zd ZdZg Zd Zd Zd Zd Zd Z	d Z
d Zd-d	Zd-d
Z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!d Z"d  Z#d-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/y).
MainWindowNc                    || _         || _        t               | _        | j                  j                  j                  d| j                         t        j                  j                  d       t        j                         | _        | j                  j                  t        j                         | j                  j                  d       | j                  j                  |        | j!                          | j#                          t        j$                         | _        t        j(                  j+                  d      | _        | j,                  j                  d| j.                         | j&                  j1                  | j,                         t        j(                  j+                  d      | _        | j2                  j                  d| j4                         | j&                  j1                  | j2                         t        j(                  j+                  d      | _        | j6                  j                  d| j8                         | j&                  j1                  | j6                         t        j(                  j+                  d      | _        | j:                  j                  d| j<                         | j&                  j1                  | j:                         t        j(                  j+                  d	      | _        | j>                  j                  d| j@                         | j&                  j1                  | j>                         | j&                  jC                          d | _"        d | _#        d | _$        | j                  jK                  d
      | _&        | j                  jK                  d      jO                  t        jP                  jR                         y )Nchangedalacartez@/usr/share/cinnamon/cinnamon-menu-editor/cinnamon-menu-editor.uizgtk-cutactivatezgtk-copyz	gtk-pastez
gtk-deletezgtk-properties
mainwindow
action_box)*	file_pathversionr   editortreeconnectmenuChangedr   Windowset_default_icon_nameBuilderset_translation_domainr   GETTEXT_PACKAGEadd_from_fileconnect_signalssetupMenuTreesetupItemTreeMenu
popup_menuImageMenuItemnew_from_stockcut_menu_itemon_edit_cut_activateappendcopy_menu_itemon_edit_copy_activatepaste_menu_itemon_edit_paste_activatedelete_menu_itemon_edit_delete_activateproperties_menu_itemon_edit_properties_activateshow_allcut_copy_bufferfile_id	last_tree
get_objectmain_window
set_layoutButtonBoxStyleEDGE)selfdatadirr   s      :/usr/share/cinnamon/cinnamon-menu-editor/cme/MainWindow.py__init__zMainWindow.__init__*   s     l  D,<,<=

((4KKM			(()?)?@		 bc		!!$'((* ..==iH"":t/H/HIt112!//>>zJ##J0J0JKt223"00??L$$Z1L1LMt334 # 1 1 @ @ N%%j$2N2NOt445$'$5$5$D$DEU$V!!!))*d6V6VWt889  "#99//=		\*55c6H6H6M6MN    c                     | j                          | j                  j                          t        j                          y N)	loadMenusr5   r0   r   mainr9   s    r;   runzMainWindow.runV   s'    !!#
r=   c                 $    | j                          y r?   )loadUpdates)r9   as     r;   r   zMainWindow.menuChanged[   s    r=   c                    | j                   j                  d      }| j                   j                  d      }|j                         j                         \  }}d}d }d }|rd}t	        ||   d   t
        j                        r1||   d   j                         }t
        j                  j                  }nt	        ||   d   t
        j                        rQt        j                  j                  ||   d   j                               d   }t
        j                  j                  }nKt	        ||   d   t
        j                         r+|j#                  |      }t
        j                  j$                  }|j                         j                         \  }}d}	d }
|re||   d   j                         r7t        j                  j                  ||   d   j                               d   }
n||   d   j'                         }
d}	| j)                          |	r^|j+                         j-                  | j.                  |
       |j                         j                         \  }}|r| j1                  |       |rd}|j+                         D ]v  }d}|t
        j                  j$                  k7  rt	        |d   t
        j                        r|d   j                         |k(  rd}t	        |d   t
        j                        rh|d   j                         rU|t
        j                  j                  k(  r8t        j                  j                  |d   j                               d   |k(  rd}t	        |d   t
        j                         rCt	        |t2              s|dz  }|d   dz
  f|fk(  rd}n|d   dz   f|fk(  rd}n|d   f|fk(  rd}|r3|j                         j5                  |f       | j7                  |        y|dz  }y y)N	menu_tree	item_treeFT      r   )r   r4   get_selectionget_selected
isinstancer   	TreeEntryget_desktop_file_idTreeItemTypeENTRYTreeDirectoryospathsplitget_desktop_file_path	DIRECTORYTreeSeparatorget_path	SEPARATORget_menu_idr@   	get_modelforeachfindMenuon_menu_tree_cursor_changedtupleselect_pathon_item_tree_cursor_changed)r9   rH   rI   itemsiterupdate_itemsupdate_typeitem_idmenusupdate_menusmenu_idiitemfounds                 r;   rE   zMainWindow.loadUpdates^   s   II((5	II((5	--/<<>tL%+a.%//:+a.<<>#0066E$KNE,?,?@''--dA(L(L(NOPQR#00::E$KNE,?,?@...#00::--/<<>tT{1~335''--dA(L(L(NOPQR+a.446L!))$--A#113@@BKE400;A!++- %"4"4">">>!47EOO<aA\A\A^biAi $!47E,?,?@T!WEbEbEditx}  yK  yK  yU  yU  jU77==a)F)F)HI!LPWW$(Ed1gu':':;%gu5Q   
Q(QD0 $!!*q.*qd2 $!!*1$. $++-991$?44Y? Q34 r=   c                    ||   d   j                         sf|||   d   j                         k(  rL| j                  j                  d      }|j	                  |       |j                         j                  |       yyt        j                  j                  ||   d   j                               d   |k(  rL| j                  j                  d      }|j	                  |       |j                         j                  |       yy )NrJ   rH   TFrK   )
rW   r\   r   r4   expand_to_pathrL   rb   rT   rU   rV   )r9   ri   rU   re   rk   rH   s         r;   r_   zMainWindow.findMenu   s    T{1~335%+a.4466 II00=	((.'')55d;77==tQ==?@CwN		,,[9I$$T*##%11$7	 Or=   c                 z   t        j                  t        t        t        t              | _        | j                  j                  d      }t        j                  t        d            }|j                  d       t        j                         }|j                  |d       |j                  || j                  d       t        j                         }|j                  |d       |j!                  |dd       |j#                  |       |j%                         j'                  t         j(                  j*                         y )	NrH   Name   Fr   TmarkuprK   )r   	TreeStoreobjectstrbool
menu_storer   r4   TreeViewColumn_set_spacingCellRendererPixbuf
pack_startset_cell_data_funcicon_data_funcCellRendererTextadd_attributeappend_columnrL   set_modeSelectionModeBROWSE)r9   ri   columncells       r;   r   zMainWindow.setupMenuTree   s    --T6B		$$[1##AfI.1%%'$&!!$(;(;Q?##%$%T8Q/F#&&s'8'8'?'?@r=   c                    | j                   j                  d      }t        j                  t	        d            }t        j
                         }|j                  d| j                         |j                  |d       |j                  |dd       |j                  || j                         |j                  |       t        j                  t	        d            }|j                  d       t        j                         }|j                  |d	       |j                  || j                  d
       t        j                          }|j                  |d       |j                  |dd       |j                  |       t        j"                  t$        t&        t(        t&              | _        |j-                  | j*                         y )NrI   ShowtoggledTactiver   Itemrs   FrK   rt      )r   r4   r   rz   r{   CellRendererToggler   on_item_tree_show_toggledr~   r   r   _cell_data_toggle_funcr   r|   r}   r   r   	ListStorerx   rv   rw   
item_store	set_model)r9   rd   r   r   s       r;   r    zMainWindow.setupItemTree   sN   		$$[1##AfI.%%'Y > >?$%T8Q/!!$(C(CDF###AfI.1%%'$&!!$(;(;Q?##%$%T8Q/F#--fc6B(r=   c                 f    |j                  ||      }|r|j                  d|j                         y y )Nsurface)	get_valueset_propertyr   )r9   r   r   modelre   datawrappers          r;   r   zMainWindow.icon_data_func   s.    //$-i9 r=   c                     t        ||   d   t        j                        r|j                  dd       y |j                  dd       y )NrJ   visibleFT)rN   r   rY   r   )r9   tree_columnrendererr   treeiterr   s         r;   r   z!MainWindow._cell_data_toggle_func   s;    eHoa(%*=*=>!!)U3!!)T2r=   c                    | j                   j                          | j                  d d i       | j                  j	                  d      }|j                  | j                          | j                   D ]  }|j                  |j                          |j                         j                  d       | j                  |       y )NrH   r   )ry   clearloadMenur   r4   r   rp   rU   rL   rb   r`   )r9   rH   menus      r;   r@   zMainWindow.loadMenus   s    dn%II((5	DOO,OO 	0D$$TYY/	0!--d3((3r=   c                 P   | j                   j                  |      D ]  \  }}t        j                  |j	                               }|sd|d}t        j                  || j                        }| j                  j                  ||   ||d|f      ||<   | j                  ||        y )N
<small><i></i></small>F)r   getMenushtmlescapeget_namer	   getIconr5   ry   r'   r   )r9   itersparentr   shownameicons          r;   r   zMainWindow.loadMenu   s    ++..v6 	'JD$;;t}}/D59;<<d&6&67D//00vtUTX@YZE$KMM%&	'r=   c                 F   | j                   j                          | j                  j                  |      D ]  \  }}t	        j
                  || j                        }t        |t        j                        r|j                         }n]t        |t        j                        r|j                         j                         }n$t        |t        j                        rd}nJ d       t        j                   |      }|sd|d}| j                   j#                  ||||f        y )Nz---zshould not be reachedr   r   )r   r   r   getItemsr	   r   r5   rN   r   rS   r   rO   get_app_infoget_display_namerY   r   r   r'   )r9   r   rm   r   r   r   s         r;   	loadItemszMainWindow.loadItems   s    ++..t4 	=JD$<<d&6&67D$ 3 34}}D%//2((*;;=D%"5"56555u;;t$D59;OO""D$d#;<	=r=   c                     |j                         \t        j                  j                  |      r<| j                  j                  t        j                  j                  |      d   |       yyNrK   FT)pollrT   rU   isfiler   insertExternalItemrV   r9   process	parent_idr   s       r;   waitForNewItemProcessz MainWindow.waitForNewItemProcess  J    <<>%ww~~i(..rww}}Y/G/JIVr=   c                     |j                         \t        j                  j                  |      r<| j                  j                  t        j                  j                  |      d   |       yyr   )r   rT   rU   r   r   insertExternalMenurV   r   s       r;   waitForNewMenuProcessz MainWindow.waitForNewMenuProcess  r   r=   c                 \    |j                         | j                  j                  |       yy)NFT)r   	edit_poolremove)r9   r   r   s      r;   waitForEditProcesszMainWindow.waitForEditProcess  s&    <<>%NN!!),r=   c                 F   | j                   j                  d      }|j                         j                         \  }}|s9|d   d   }|j	                  d       |j                         j                  d       n||   d   }t        j                  j                  t        j                         t        j                  dd            }t        j                  ddd|z   gt        j                  	      }t        j                   d
| j"                  ||j%                         |       y )NrH   r   rJ   alacarte-madez
.directorycinnamon-desktop-editorz-mdirectory-oenvd   )r   r4   rL   rM   rp   rb   rT   rU   joinr	   getUserDirectoryPathgetUniqueFileId
subprocessPopenenvironr   timeout_addr   r\   r9   buttonrH   ri   re   r   r   r   s           r;   on_new_menu_button_clickedz%MainWindow.on_new_menu_button_clicked  s    II((5	--/<<>t4[^F$$T*##%11$74[^FGGLL!:!:!<d>R>RSbdp>qr	""$=}dU^N^#_egeoeopC!;!;WfFXFXFZ\efr=   c                 F   | j                   j                  d      }|j                         j                         \  }}|s9|d   d   }|j	                  d       |j                         j                  d       n||   d   }t        j                  j                  t        j                         t        j                  dd            }t        j                  ddd|z   gt        j                  	      }t        j                   d
| j"                  ||j%                         |       y )NrH   r   rJ   r   z.desktopr   z
-mlauncherr   r   r   )r   r4   rL   rM   rp   rb   rT   rU   r   r	   getUserItemPathr   r   r   r   r   r   r   r\   r   s           r;   on_new_item_button_clickedz%MainWindow.on_new_item_button_clicked(  s    II((5	--/<<>t4[^F$$T*##%11$74[^FGGLL!5!5!79M9Mo_i9jk	""$=|TT]M]#^dfdndnoC!;!;WfFXFXFZ\efr=   c                    | j                   j                  d      }|j                         j                         \  }}|sy ||   d   }t	        |t
        j                        r| j                  j                  |       y t	        |t
        j                        r| j                  j                  |       y t	        |t
        j                        r| j                  j                  |       y y NrI   rJ   )r   r4   rL   rM   rN   r   rO   r   
deleteItemrS   
deleteMenurY   deleteSeparatorr9   r   rI   rd   re   rm   s         r;   r-   z"MainWindow.on_edit_delete_activate5  s    II((5	--/<<>tT{1~dEOO,KK""4(e112KK""4(e112KK''- 3r=   c                    | j                   j                  | j                        }|j                         j	                         \  }}|sy ||   d   }t        |t        j                        st        |t        j                        sy t        |t        j                        rd}nt        |t        j                        rd}|j                         }|| j                  vrl| j                  j                  |       t        j                  ddz   d|z   gt        j                        }t!        j"                  d| j$                  ||       y y )	NrJ   launcher	directoryr   z-mr   r   r   )r   r4   r3   rL   rM   rN   r   rO   rS   rW   r   r'   r   r   rT   r   r   r   r   )	r9   r   rI   rd   re   rm   	file_typer   r   s	            r;   r/   z&MainWindow.on_edit_properties_activateB  s   II((8	--/<<>tT{1~$0D%J]J]9^dEOO,"Ie112#I..0	DNN*NN!!), &&(A4)CSUY\eUe'flnlvlvwGT%<%<gyQ +r=   c                    | j                   j                  d      }|j                         j                         \  }}||   d   }|sy t	        |t
        j                        sy | j                  j                  |      \  | _	        | _
        y r   )r   r4   rL   rM   rN   r   rO   r   cutItemr1   r2   r   s         r;   r&   zMainWindow.on_edit_cut_activateW  ss    II((5	--/<<>tT{1~$0/3{{/B/B4/H,	t|r=   c                    | j                   j                  d      }|j                         j                         \  }}||   d   }|sy t	        |t
        j                        sy | j                  j                  |      \  | _	        | _
        y r   )r   r4   rL   rM   rN   r   rO   r   copyItemr1   r2   r   s         r;   r)   z MainWindow.on_edit_copy_activatea  ss    II((5	--/<<>tT{1~$0/3{{/C/CD/I,	t|r=   c                    | j                   j                  d      }|j                         j                         \  }}|s?| j                   j                  d      }|j                         j                         \  }}|sy ||   d   }t	        |t
        j                        sy | j                  C| j                  j                  | j                  || j                        }|rd | _        d | _
        y y y )NrI   rH   rJ   )r   r4   rL   rM   rN   r   rS   r1   r   	pasteItemr2   )r9   r   rI   rd   re   rH   rm   successs           r;   r+   z!MainWindow.on_edit_paste_activatek  s    II((5	--/<<>t		,,[9I#113@@BKE4T{1~$ 3 34+kk++D,@,@$UG'+$#  ,r=   c                    |j                         }|y |j                         \  }}|y ||   d   }|j                  |      }| j                  j	                  d      }|j                         j                          | j                  | j                  |   d          | j                  d       | j                  d       | j                  d       | j                  d       t        |t        j                        xr | j                  d u}| j!                  |       |j                  |      j#                         |j                  |      j%                         dz
     }	|j'                  |      }
|j)                  |
      }|	dkD  xr t        |t        j                        }|	|dz
  k  xr t        |t        j                        }d| _        y )NrJ   rI   FTrK   r   rH   )rL   rM   rZ   r   r4   unselect_allr   ry   set_cut_sensitiveset_copy_sensitiveset_delete_sensitiveset_properties_sensitiverN   r   rS   r1   set_paste_sensitiveget_indices	get_depthiter_parentiter_n_childrenr3   )r9   treeview	selectionri   re   r   	menu_pathrI   	can_pasteindexparent_itercount	can_go_upcan_go_downs                 r;   r`   z&MainWindow.on_menu_tree_cursor_changed|  s   **,	,,.t<T{1~NN4(	II((5	!..0ty1!45u%&!!%(%%d+tU%8%89^d>R>RZ^>^	  +t$0025>>$3G3Q3Q3SVW3WX''-&&{3AIG*T53F3F"G	eai'QJtU=P=P,Q$r=   c                 :   | j                   |   d   }t        |t        j                        ry | j                   |   d   r| j                  j                  |d       n| j                  j                  |d       | j                   |   d    | j                   |   d<   y )NrJ   r   FT)r   rN   r   rY   r   
setVisible)r9   r   rU   rm   s       r;   r   z$MainWindow.on_item_tree_show_toggled  s    t$Q'dE//0??4 #KK""4/KK""4.'+t'<Q'?#?a r=   c                    |j                         }|y |j                         \  }}|y ||   d   }| j                  d       t        |t        j
                         }| j                  |       t        |t        j                         }| j                  |       | j                  |       t        |t        j                        xr | j                  d u}| j                  |       |j                  |      j                         d   }	|	dkD  xr t        |t        j                        }
|	t        |      dz
  k  xr t        |t        j                        }d| _        y )NrJ   Tr   rK   rI   )rL   rM   r   rN   r   rY   r   rS   r   r   r1   r   rZ   r   lenr3   )r9   r   r   rd   re   rm   can_editcan_cut_copyr   r   r   r  s               r;   rc   z&MainWindow.on_item_tree_cursor_changed  s5   **,	,,.t<T{1~!!$'!$(;(;<<%%h/%dE,?,?@@|,-tU%8%89^d>R>RZ^>^	  +t$00215AIG*T53F3F"G	c%j1n,VD%BUBU1V$r=   c                 &    | j                  d        y r?   r/   )r9   r   rU   r   s       r;   on_item_tree_row_activatedz%MainWindow.on_item_tree_row_activated      ((.r=   c                     | j                   j                  d      j                  |       | j                  j                  |       y )N
cut_button)r   r4   set_sensitiver%   r9   	sensitives     r;   r   zMainWindow.set_cut_sensitive  s3    		\*88C((3r=   c                     | j                   j                  d      j                  |       | j                  j                  |       y )Ncopy_button)r   r4   r  r(   r  s     r;   r   zMainWindow.set_copy_sensitive  s3    		]+99)D)))4r=   c                     | j                   j                  d      j                  |       | j                  j                  |       y )Npaste_button)r   r4   r  r*   r  s     r;   r   zMainWindow.set_paste_sensitive  s3    		^,::9E**95r=   c                     | j                   j                  d      j                  |       | j                  j                  |       y )Ndelete_button)r   r4   r  r,   r  s     r;   r   zMainWindow.set_delete_sensitive  s3    		_-;;IF++I6r=   c                     | j                   j                  d      j                  |       | j                  j                  |       y )Nproperties_button)r   r4   r  r.   r  s     r;   r   z#MainWindow.set_properties_sensitive  s4    		01??	J!!//	:r=   c                 6   |j                         j                         \  }}|r|j                  dk7  ry |j                  }|j                  }|j	                  t        |j                        t        |j                              }|t|\  }}	}
}|j                          |j                  ||	d       nI|j                  |      }d}d}|j                          |j                  ||j                         d   d       | j                  j                  d d d d ||       y)NrJ   r   T)rL   rM   r   timeget_path_at_posintxy
grab_focus
set_cursorrZ   get_columnsr"   popup)r9   rI   eventr   re   r   
event_timeinforU   colcellxcellys               r;   on_item_tree_popup_menuz"MainWindow.on_item_tree_popup_menu  s    --/<<>t||q \\FJ,,S\3uww<HD*.'c5%$$&$$T32>>$'DFJ  "  y'<'<'>q'A1EdD$fjIr=   c                 X   |j                         j                         \  }}|r|j                  dk7  ry |j                  }|j                  }|j	                  t        |j                        t        |j                              }|t|\  }}	}
}|j                          |j                  ||	d       nI|j                  |      }d}d}|j                          |j                  ||j                         d   d       | j                  j                  d      }|j                  d d d d ||       y)NrJ   r   	edit_menuT)rL   rM   r   r  r  r  r  r  r  r   rZ   r!  r   r4   r"  )r9   rH   r#  r   re   r   r$  r%  rU   r&  r'  r(  r"  s                r;   on_menu_tree_popup_menuz"MainWindow.on_menu_tree_popup_menu  s   --/<<>t||q \\FJ,,S\3uww<HD*.'c5%$$&$$T32>>$'DFJ  "  y'<'<'>q'A1E		$$[1D$dFJ?r=   c                 b    |j                   t        j                  k(  r| j                  |       y y r?   )keyvalr   
KEY_Deleter-   )r9   rI   r#  s      r;   on_item_tree_key_press_eventz'MainWindow.on_item_tree_key_press_event  s%    <<3>>)((3 *r=   c                 8    | j                   j                          y r?   )r   restoreToSystemr9   r   s     r;   on_restore_button_clickedz$MainWindow.on_restore_button_clicked  s    ##%r=   c                 $    | j                          y r?   )quitr3  s     r;   on_close_button_clickedz"MainWindow.on_close_button_clicked
  s    		r=   c                 &    | j                  d        y r?   r	  r3  s     r;   on_properties_button_clickedz'MainWindow.on_properties_button_clicked  r  r=   c                 &    | j                  d        y r?   )r-   r3  s     r;   on_delete_button_clickedz#MainWindow.on_delete_button_clicked  s    $$T*r=   c                 &    | j                  d        y r?   )r&   r3  s     r;   on_cut_button_clickedz MainWindow.on_cut_button_clicked  s    !!$'r=   c                 &    | j                  d        y r?   )r)   r3  s     r;   on_copy_button_clickedz!MainWindow.on_copy_button_clicked  s    ""4(r=   c                 &    | j                  d        y r?   )r+   r3  s     r;   on_paste_button_clickedz"MainWindow.on_paste_button_clicked  s    ##D)r=   c                    | j                   j                  | j                        }|j                         j	                         \  }}|sy ||   d   }t        |t        j                        st        |t        j                        sy t        |t        j                        rd}nt        |t        j                        rd}|j                         }t        j                  d|g       y )NrJ   r   r   zxdg-open)r   r4   r3   rL   rM   rN   r   rO   rS   rW   r   rC   )r9   r   rI   rd   re   rm   r   r   s           r;   #on_open_desktop_file_button_clickedz.MainWindow.on_open_desktop_file_button_clicked  s    II((8	--/<<>tT{1~$0D%J]J]9^dEOO,"Ie112#I..0	
I./r=   c                 ,    t        j                          y r?   )r   	main_quitrB   s    r;   r6  zMainWindow.quit.  s    r=   r?   )0__name__
__module____qualname__timerr   r<   rC   r   rE   r_   r   r    r   r   r@   r   r   r   r   r   r   r   r-   r/   r&   r)   r+   r`   r   rc   r
  r   r   r   r   r   r)  r,  r0  r4  r7  r9  r;  r=  r?  rA  rC  r6   r=   r;   r   r   %   s    EI*OX
?BA),:
3	4'=*gg.R*IJ$"%:@%4/4567;.04&/+()*0$r=   r   )girequire_versiongi.repositoryr   r   r   r   r   rT   gettextr   cmer   bindtextdomainr   	localedir
textdomainr{   cme.MenuEditorr   r	   rv   r   rJ  r=   r;   <module>rT     s   ( 
   5%     7E " 2 2  	      v--v/?/? @   6)) *OO % J Jr=   