home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / GMenuSimpleEditor / maindialog.py < prev    next >
Encoding:
Python Source  |  2006-08-30  |  5.7 KB  |  154 lines

  1. #!/usr/bin/env python
  2.  
  3. #
  4. # Copyright (C) 2005 Red Hat, Inc.
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program; if not, write to the Free Software
  18. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. #
  20.  
  21. import os.path
  22. import gtk
  23. import gtk.glade
  24. import gmenu
  25.  
  26. from config import *
  27.  
  28. import menutreemodel
  29. import menufilewriter
  30.  
  31. class MenuEditorDialog:
  32.     def __init__ (self, menu_files):
  33.         glade_file = os.path.join (GLADEDIR, "gmenu-simple-editor.glade")
  34.         self.xml = gtk.glade.XML (glade_file, "menu_editor_dialog", PACKAGE)
  35.  
  36.         self.window = self.xml.get_widget ("menu_editor_dialog")
  37.         self.window.connect ("destroy", gtk.main_quit)
  38.         self.window.set_default_response (gtk.RESPONSE_ACCEPT)
  39.         self.window.set_icon_name ("gnome-main-menu")
  40.  
  41.         self.help_button = self.xml.get_widget ("help_button")
  42.         self.help_button.set_sensitive (False)
  43.  
  44.         self.menus_tree   = self.xml.get_widget ("menus_treeview")
  45.         self.entries_list = self.xml.get_widget ("applications_treeview")
  46.  
  47.         self.menu_tree_model = menutreemodel.MenuTreeModel (menu_files)
  48.         
  49.         self.menu_file_writer = menufilewriter.MenuFileWriter (self.menu_tree_model)
  50.  
  51.         self.current_iter = None
  52.         self.current_path = None
  53.  
  54.         self.__setup_menus_tree ()
  55.         self.__setup_entries_list ()
  56.  
  57.         self.window.connect ("response", self.__dialog_response)
  58.         self.window.set_default_size (580, 435)
  59.         self.window.show ()
  60.  
  61.     def __revert_to_system_default (self, parent_iter = None):
  62.         model = self.menu_tree_model
  63.         
  64.         iter = model.iter_children (parent_iter)
  65.         while iter:
  66.             if model[iter][model.COLUMN_IS_ENTRY]:
  67.                 model[iter][model.COLUMN_USER_VISIBLE] = model[iter][model.COLUMN_SYSTEM_VISIBLE]
  68.             else:
  69.                 self.__revert_to_system_default (iter)
  70.             
  71.             iter = model.iter_next (iter)
  72.  
  73.     def __dialog_response (self, dialog, response_id):
  74.         if response_id == gtk.RESPONSE_REJECT:
  75.             self.__revert_to_system_default ()
  76.             iter = self.menu_tree_model.get_iter_first ()
  77.             while iter:
  78.                 self.menu_file_writer.queue_sync (iter)
  79.                 iter = self.menu_tree_model.iter_next (iter)
  80.             return
  81.         
  82.         dialog.destroy ()
  83.  
  84.     def __is_menu_tree_directory (self, model, iter):
  85.         return not model[iter][self.menu_tree_model.COLUMN_IS_ENTRY]
  86.  
  87.     def __setup_menus_tree (self):
  88.         self.menus_model = self.menu_tree_model.filter_new ()
  89.         self.menus_model.set_visible_func (self.__is_menu_tree_directory)
  90.         self.menus_tree.set_model (self.menus_model)
  91.         
  92.         self.menus_tree.get_selection ().set_mode (gtk.SELECTION_SINGLE)
  93.         self.menus_tree.get_selection ().connect ("changed", self.__menus_selection_changed)
  94.         self.menus_tree.set_headers_visible (False)
  95.  
  96.         column = gtk.TreeViewColumn (_("Name"))
  97.         column.set_spacing (6)
  98.  
  99.         cell = gtk.CellRendererPixbuf ()
  100.         column.pack_start (cell, False)
  101.         column.set_attributes (cell, pixbuf = self.menu_tree_model.COLUMN_ICON)
  102.  
  103.         cell = gtk.CellRendererText ()
  104.         column.pack_start (cell, True)
  105.         column.set_attributes (cell, text = self.menu_tree_model.COLUMN_NAME)
  106.                                 
  107.         self.menus_tree.append_column (column)
  108.  
  109.         self.menus_tree.expand_all ()
  110.  
  111.     def __setup_entries_list (self):
  112.         self.entries_list.get_selection ().set_mode (gtk.SELECTION_SINGLE)
  113.         self.entries_list.set_headers_visible (True)
  114.  
  115.         column = gtk.TreeViewColumn (_("Show"))
  116.         self.entries_list.append_column (column)
  117.         
  118.         cell = gtk.CellRendererToggle ()
  119.         cell.connect ("toggled", self.__on_hide_toggled)
  120.         column.pack_start (cell, False)
  121.         column.set_attributes (cell, active = self.menu_tree_model.COLUMN_USER_VISIBLE)
  122.  
  123.         column = gtk.TreeViewColumn (_("Name"))
  124.         column.set_spacing (6)
  125.         self.entries_list.append_column (column)
  126.  
  127.         cell = gtk.CellRendererPixbuf ()
  128.         column.pack_start (cell, False)
  129.         column.set_attributes (cell, pixbuf = self.menu_tree_model.COLUMN_ICON)
  130.  
  131.         cell = gtk.CellRendererText ()
  132.         column.pack_start (cell, True)
  133.         column.set_attributes (cell, text = self.menu_tree_model.COLUMN_NAME)
  134.  
  135.     def __on_hide_toggled (self, toggle, path):
  136.         def toggle_value (model, iter, column):
  137.             model[iter][column] = not model[iter][column]
  138.  
  139.         child_path = self.entries_model.convert_path_to_child_path (path)
  140.         child_iter = self.menu_tree_model.get_iter (child_path)
  141.         
  142.         toggle_value (self.menu_tree_model, child_iter, self.menu_tree_model.COLUMN_USER_VISIBLE)
  143.  
  144.         self.menu_file_writer.queue_sync (child_iter)
  145.  
  146.     def __menus_selection_changed (self, selection):
  147.         (model, iter) = selection.get_selected ()
  148.         if iter:
  149.             iter = model.convert_iter_to_child_iter (iter)
  150.         
  151.         self.entries_model = self.menu_tree_model.filter_new (self.menu_tree_model.get_path (iter))
  152.         self.entries_model.set_visible_column (self.menu_tree_model.COLUMN_IS_ENTRY)
  153.         self.entries_list.set_model (self.entries_model)
  154.