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 / deskbar / ui / DeskbarPreferencesUI.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  15.8 KB  |  407 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. from gettext import gettext as _
  5. from os.path import join
  6. import struct
  7. import gtk
  8. import gtk.gdk as gtk
  9. import gtk.glade as gtk
  10. import gobject
  11. import gconf
  12. import deskbar
  13. import deskbar.Utils as deskbar
  14. from deskbar.ui.ModuleListView import ModuleListView
  15. from deskbar import CUEMIAC_UI_NAME, ENTRIAC_UI_NAME, WINDOW_UI_NAME
  16. MAXINT = 2 ** (8 * struct.calcsize('i') - 1) - 1
  17.  
  18. class AccelEntry(gobject.GObject):
  19.     __gsignals__ = {
  20.         'accel-edited': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [
  21.             gobject.TYPE_STRING,
  22.             gobject.TYPE_UINT,
  23.             gobject.TYPE_UINT,
  24.             gobject.TYPE_UINT]) }
  25.     __gproperties__ = {
  26.         'message': (gobject.TYPE_STRING, 'Prompt message', 'Message that prompts the user to assign a new accelerator', _('New accelerator...'), gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
  27.         'accel_key': (gobject.TYPE_UINT, 'Accelerator key', 'Accelerator key', 0, MAXINT, 0, gobject.PARAM_READWRITE),
  28.         'accel_mask': (gobject.TYPE_FLAGS, 'Accelerator modifiers', 'Accelerator modifiers', 0, gobject.PARAM_READWRITE),
  29.         'keycode': (gobject.TYPE_UINT, 'Accelerator keycode', 'Accelerator keycode', 0, MAXINT, 0, gobject.PARAM_READWRITE) }
  30.     
  31.     def __init__(self, accel_name = ''):
  32.         self._AccelEntry__old_value = None
  33.         self._attributes = {
  34.             'accel_key': 0,
  35.             'accel_mask': 0,
  36.             'keycode': 0 }
  37.         gobject.GObject.__init__(self)
  38.         self.entry = gtk.Entry()
  39.         self.entry.set_property('editable', False)
  40.         self.entry.connect('button-press-event', self._AccelEntry__on_button_press_event)
  41.         self.entry.connect('key-press-event', self._AccelEntry__on_key_press_event)
  42.         self.entry.connect('focus-out-event', self._AccelEntry__on_focus_out_event)
  43.         self.set_accelerator_name(accel_name)
  44.  
  45.     
  46.     def do_get_property(self, pspec):
  47.         if pspec.name in ('message', 'accel_key', 'accel_mask', 'keycode'):
  48.             return self._attributes[pspec.name]
  49.         
  50.  
  51.     
  52.     def do_set_property(self, pspec, value):
  53.         if pspec.name == 'message':
  54.             self._attributes['message'] = value
  55.         elif pspec.name == 'accel_key':
  56.             self.set_accelerator(int(value), self.get_property('keycode'), self.get_property('accel_mask'))
  57.         elif pspec.name == 'accel_mask':
  58.             self.set_accelerator(self.get_property('accel_key'), self.get_property('keycode'), int(value))
  59.         elif pspec.name == 'keycode':
  60.             self.set_accelerator(self.get_property('accel_key'), int(value), self.get_property('accel_mask'))
  61.         
  62.  
  63.     
  64.     def get_accelerator_name(self):
  65.         return self.entry.get_text()
  66.  
  67.     
  68.     def set_accelerator_name(self, value):
  69.         (keyval, mods) = gtk.accelerator_parse(value)
  70.         if gtk.accelerator_valid(keyval, mods):
  71.             self.entry.set_text(value)
  72.         
  73.  
  74.     
  75.     def get_accelerator(self):
  76.         return (self.get_property('accel_key'), self.get_property('keycode'), self.get_property('accel_mask'))
  77.  
  78.     
  79.     def set_accelerator(self, keyval, keycode, mask):
  80.         changed = False
  81.         self.freeze_notify()
  82.         if keyval != self._attributes['accel_key']:
  83.             self._attributes['accel_key'] = keyval
  84.             self.notify('accel_key')
  85.             changed = True
  86.         
  87.         if mask != self._attributes['accel_mask']:
  88.             self._attributes['accel_mask'] = mask
  89.             self.notify('accel_mask')
  90.             changed = True
  91.         
  92.         if keycode != self._attributes['keycode']:
  93.             self._attributes['keycode'] = keycode
  94.             self.notify('keycode')
  95.             changed = True
  96.         
  97.         self.thaw_notify()
  98.         if changed:
  99.             text = self._AccelEntry__convert_keysym_state_to_string(keyval, keycode, mask)
  100.             self.entry.set_text(text)
  101.         
  102.  
  103.     
  104.     def __convert_keysym_state_to_string(self, keysym, keycode, mask):
  105.         if keysym != 0 and keycode != 0:
  106.             return gtk.accelerator_name(keysym, mask)
  107.         
  108.  
  109.     
  110.     def get_widget(self):
  111.         return self.entry
  112.  
  113.     
  114.     def __on_button_press_event(self, entry, event):
  115.         self._AccelEntry__old_value = self.entry.get_text()
  116.         entry.set_text(self.get_property('message'))
  117.         entry.grab_focus()
  118.         return True
  119.  
  120.     
  121.     def __on_key_press_event(self, entry, event):
  122.         edited = False
  123.         keymap = gtk.gdk.keymap_get_default()
  124.         (keyval, egroup, level, consumed_modifiers) = keymap.translate_keyboard_state(event.hardware_keycode, event.state, event.group)
  125.         upper = event.keyval
  126.         accel_keyval = gtk.gdk.keyval_to_lower(upper)
  127.         if upper != accel_keyval and consumed_modifiers & gtk.gdk.SHIFT_MASK:
  128.             consumed_modifiers &= ~(gtk.gdk.SHIFT_MASK)
  129.         
  130.         ignored_modifiers = gtk.gdk.MOD2_MASK | gtk.gdk.MOD5_MASK
  131.         accel_mods = event.state & gtk.gdk.MODIFIER_MASK & ~(consumed_modifiers | ignored_modifiers)
  132.         if accel_mods == 0 and accel_keyval == gtk.keysyms.Escape:
  133.             self._AccelEntry__cancel()
  134.             return None
  135.         
  136.         if not gtk.accelerator_valid(accel_keyval, accel_mods):
  137.             self._AccelEntry__cancel()
  138.             return None
  139.         
  140.         accel_name = gtk.accelerator_name(accel_keyval, accel_mods)
  141.         self.set_accelerator(accel_keyval, event.hardware_keycode, accel_mods)
  142.         self._AccelEntry__old_value = None
  143.         self.emit('accel-edited', accel_name, accel_keyval, accel_mods, event.hardware_keycode)
  144.         return True
  145.  
  146.     
  147.     def __on_focus_out_event(self, entry, event):
  148.         if self._AccelEntry__old_value != None:
  149.             self._AccelEntry__cancel()
  150.         
  151.  
  152.     
  153.     def __cancel(self):
  154.         self.set_accelerator_name(self._AccelEntry__old_value)
  155.  
  156.  
  157.  
  158. class DeskbarPreferencesUI:
  159.     
  160.     def __init__(self, applet, module_loader, module_list):
  161.         self.module_list = module_list
  162.         self.module_loader = module_loader
  163.         self.glade = gtk.glade.XML(join(deskbar.SHARED_DATA_DIR, 'prefs-dialog.glade'))
  164.         self.dialog = self.glade.get_widget('preferences')
  165.         self.width = deskbar.GCONF_CLIENT.get_int(applet.prefs.GCONF_WIDTH)
  166.         self.expand = deskbar.GCONF_CLIENT.get_bool(applet.prefs.GCONF_EXPAND)
  167.         self.keybinding = deskbar.GCONF_CLIENT.get_string(applet.prefs.GCONF_KEYBINDING)
  168.         self.width_spin = self.glade.get_widget('width')
  169.         self.width_spin.connect('value-changed', self.on_spin_width_change, applet)
  170.         self.width_notify_id = deskbar.GCONF_CLIENT.notify_add(applet.prefs.GCONF_WIDTH, (lambda x, y, z, a: self.on_config_width(z.value)))
  171.         self.use_all_width_radio = self.glade.get_widget('use_all_width_radio')
  172.         self.use_all_width_radio.connect('toggled', self.on_use_all_width_radio_toggle, applet)
  173.         self.expand_notify_id = deskbar.GCONF_CLIENT.notify_add(applet.prefs.GCONF_EXPAND, (lambda x, y, z, a: self.on_config_expand(z.value)))
  174.         self.fixed_width_radio = self.glade.get_widget('fixed_width_radio')
  175.         self.keyboard_shortcut_entry = AccelEntry()
  176.         self.keyboard_shortcut_entry.connect('accel-edited', self.on_keyboard_shortcut_entry_changed, applet)
  177.         self.glade.get_widget('keybinding_entry_container').pack_start(self.keyboard_shortcut_entry.get_widget(), False)
  178.         self.keybinding_notify_id = deskbar.GCONF_CLIENT.notify_add(applet.prefs.GCONF_KEYBINDING, (lambda x, y, z, a: self.on_config_keybinding(z.value)))
  179.         container = self.glade.get_widget('handlers')
  180.         self.moduleview = ModuleListView(module_list)
  181.         self.moduleview.connect('row-toggled', self.on_module_toggled, module_loader)
  182.         self.moduleview.get_selection().connect('changed', self.on_module_selected)
  183.         self.module_list.connect('row-changed', (lambda list, path, iter: self.on_module_selected(self.moduleview.get_selection())))
  184.         container.add(self.moduleview)
  185.         self.default_info = self.glade.get_widget('default_info')
  186.         self.other_info = gtk.HBox(spacing = 6)
  187.         info_image = gtk.image_new_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_BUTTON)
  188.         info_image.set_padding(3, 0)
  189.         self.other_info.pack_start(info_image, expand = False, fill = False)
  190.         self.other_info_label = gtk.Label()
  191.         self.other_info_label.set_alignment(0.0, 0.5)
  192.         self.other_info_label.set_justify(gtk.JUSTIFY_LEFT)
  193.         self.other_info.pack_start(self.other_info_label, expand = True, fill = True)
  194.         self.more_button = self.glade.get_widget('more')
  195.         self.more_button.set_sensitive(False)
  196.         self.more_button.connect('clicked', self.on_more_button_clicked)
  197.         self.more_button_callback = None
  198.         self.info_area = self.glade.get_widget('info_area')
  199.         self.old_info_message = None
  200.         self.ui_name = deskbar.GCONF_CLIENT.get_string(applet.prefs.GCONF_UI_NAME)
  201.         self.completion_ui_radio = self.glade.get_widget('completion_radio')
  202.         self.cuemiac_ui_radio = self.glade.get_widget('cuemiac_radio')
  203.         self.completion_ui_radio.connect('toggled', self.on_ui_changed, applet)
  204.         self.cuemiac_ui_radio.connect('toggled', self.on_ui_changed, applet)
  205.         self.ui_change_id = deskbar.GCONF_CLIENT.notify_add(applet.prefs.GCONF_UI_NAME, (lambda x, y, z, a: self.on_config_ui(z.value)))
  206.         self.use_selection = deskbar.GCONF_CLIENT.get_bool(applet.prefs.GCONF_USE_SELECTION)
  207.         self.use_selection_box = self.glade.get_widget('use_selection')
  208.         self.use_selection_box.connect('toggled', self.on_use_selection_toggled, applet)
  209.         self.use_selection_id = deskbar.GCONF_CLIENT.notify_add(applet.prefs.GCONF_USE_SELECTION, (lambda x, y, z, a: self.on_config_use_selection(z.value)))
  210.         self.sync_ui()
  211.  
  212.     
  213.     def show_run_hide(self):
  214.         self.dialog.show_all()
  215.         self.moduleview.grab_focus()
  216.         self.dialog.connect('response', self.on_dialog_response)
  217.  
  218.     
  219.     def on_dialog_response(self, dialog, response):
  220.         self.dialog.destroy()
  221.         deskbar.GCONF_CLIENT.notify_remove(self.width_notify_id)
  222.         deskbar.GCONF_CLIENT.notify_remove(self.expand_notify_id)
  223.         deskbar.GCONF_CLIENT.notify_remove(self.keybinding_notify_id)
  224.         deskbar.GCONF_CLIENT.notify_remove(self.ui_change_id)
  225.         enabled_modules = _[1]
  226.         deskbar.GCONF_CLIENT.set_list(deskbar.GCONF_ENABLED_HANDLERS, gconf.VALUE_STRING, enabled_modules)
  227.  
  228.     
  229.     def sync_ui(self):
  230.         if self.expand:
  231.             self.use_all_width_radio.set_active(True)
  232.         else:
  233.             self.fixed_width_radio.set_active(True)
  234.         self.width_spin.set_value(self.width)
  235.         if self.keybinding != None:
  236.             self.keyboard_shortcut_entry.set_accelerator_name(self.keybinding)
  237.         else:
  238.             self.keyboard_shortcut_entry.set_accelerator_name('<Alt>F3')
  239.         if self.ui_name == ENTRIAC_UI_NAME:
  240.             self.completion_ui_radio.set_active(True)
  241.             self.set_width_settings_sensitive(True)
  242.         elif self.ui_name == CUEMIAC_UI_NAME:
  243.             self.cuemiac_ui_radio.set_active(True)
  244.             self.set_width_settings_sensitive(False)
  245.         elif self.ui_name == WINDOW_UI_NAME:
  246.             self.cuemiac_ui_radio.set_active(True)
  247.             self.set_ui_settings_sensitive(False)
  248.             self.set_width_settings_sensitive(False)
  249.         
  250.         self.use_selection_box.set_active(self.use_selection)
  251.  
  252.     
  253.     def set_width_settings_sensitive(self, sensitive):
  254.         if sensitive and not (self.expand):
  255.             self.width_spin.set_sensitive(True)
  256.             self.glade.get_widget('width_units').set_sensitive(True)
  257.         else:
  258.             self.width_spin.set_sensitive(False)
  259.             self.glade.get_widget('width_units').set_sensitive(False)
  260.         self.use_all_width_radio.set_sensitive(sensitive)
  261.         self.fixed_width_radio.set_sensitive(sensitive)
  262.  
  263.     
  264.     def set_ui_settings_sensitive(self, sensitive):
  265.         self.cuemiac_ui_radio.set_sensitive(sensitive)
  266.         self.completion_ui_radio.set_sensitive(sensitive)
  267.  
  268.     
  269.     def on_config_width(self, value):
  270.         if value != None and value.type == gconf.VALUE_INT:
  271.             self.width = value.get_int()
  272.             self.sync_ui()
  273.         
  274.  
  275.     
  276.     def on_config_expand(self, value):
  277.         if value != None and value.type == gconf.VALUE_BOOL:
  278.             self.expand = value.get_bool()
  279.             self.sync_ui()
  280.         
  281.  
  282.     
  283.     def on_config_keybinding(self, value):
  284.         if value != None and value.type == gconf.VALUE_STRING:
  285.             self.keybinding = value.get_string()
  286.             self.sync_ui()
  287.         
  288.  
  289.     
  290.     def on_config_ui(self, value):
  291.         if value != None and value.type == gconf.VALUE_STRING:
  292.             self.ui_name = value.get_string()
  293.             self.sync_ui()
  294.         
  295.  
  296.     
  297.     def on_config_use_selection(self, value):
  298.         if value != None and value.type == gconf.VALUE_BOOL:
  299.             self.use_selection = value.get_bool()
  300.             self.sync_ui()
  301.         
  302.  
  303.     
  304.     def on_ui_changed(self, sender, applet):
  305.         if self.ui_name == WINDOW_UI_NAME:
  306.             return None
  307.         
  308.         if self.completion_ui_radio.get_active():
  309.             deskbar.GCONF_CLIENT.set_string(applet.prefs.GCONF_UI_NAME, ENTRIAC_UI_NAME)
  310.         elif self.cuemiac_ui_radio.get_active():
  311.             deskbar.GCONF_CLIENT.set_string(applet.prefs.GCONF_UI_NAME, CUEMIAC_UI_NAME)
  312.         
  313.  
  314.     
  315.     def on_use_all_width_radio_toggle(self, toggle, applet):
  316.         deskbar.GCONF_CLIENT.set_bool(applet.prefs.GCONF_EXPAND, toggle.get_property('active'))
  317.  
  318.     
  319.     def on_spin_width_change(self, spinner, applet):
  320.         deskbar.GCONF_CLIENT.set_int(applet.prefs.GCONF_WIDTH, int(spinner.get_value()))
  321.  
  322.     
  323.     def on_keyboard_shortcut_entry_changed(self, entry, accel_name, keyval, mods, keycode, applet):
  324.         if accel_name != '':
  325.             deskbar.GCONF_CLIENT.set_string(applet.prefs.GCONF_KEYBINDING, accel_name)
  326.         
  327.         return False
  328.  
  329.     
  330.     def on_use_selection_toggled(self, toggle, applet):
  331.         deskbar.GCONF_CLIENT.set_bool(applet.prefs.GCONF_USE_SELECTION, toggle.get_active())
  332.  
  333.     
  334.     def on_more_button_clicked(self, button):
  335.         if self.more_button_callback != None:
  336.             self.more_button_callback(self.dialog)
  337.         
  338.  
  339.     
  340.     def on_module_selected(self, selection):
  341.         module_context = self.moduleview.get_selected_module_context()
  342.         if module_context != None:
  343.             self.check_requirements(module_context)
  344.             gobject.timeout_add(1000, self.poll_requirements, module_context)
  345.         
  346.  
  347.     
  348.     def poll_requirements(self, module_context):
  349.         
  350.         try:
  351.             if module_context != self.moduleview.get_selected_module_context():
  352.                 return False
  353.         except AttributeError:
  354.             return False
  355.  
  356.         self.check_requirements(module_context)
  357.         return True
  358.  
  359.     
  360.     def check_requirements(self, module_context):
  361.         if module_context is None:
  362.             return None
  363.         
  364.         if 'requirements' in module_context.infos:
  365.             (status, message, callback) = module_context.infos['requirements']()
  366.             if status == deskbar.Handler.HANDLER_HAS_REQUIREMENTS:
  367.                 self.set_info(message, callback)
  368.                 if module_context.enabled:
  369.                     self.module_loader.stop_module_async(module_context)
  370.                 
  371.             elif status == deskbar.Handler.HANDLER_IS_CONFIGURABLE:
  372.                 self.set_info(message, callback)
  373.             else:
  374.                 self.set_info(None, None)
  375.         else:
  376.             self.set_info(None, None)
  377.  
  378.     
  379.     def set_info(self, message, callback):
  380.         self.more_button_callback = callback
  381.         if message == self.old_info_message:
  382.             return None
  383.         
  384.         self.old_info_message = message
  385.         self.info_area.remove(self.info_area.get_children()[0])
  386.         if message == None:
  387.             self.info_area.add(self.default_info)
  388.             self.more_button.set_sensitive(False)
  389.         else:
  390.             self.other_info_label.set_text(message)
  391.             self.info_area.add(self.other_info)
  392.             self.other_info.show_all()
  393.             self.more_button.set_sensitive(self.more_button_callback != None)
  394.  
  395.     
  396.     def on_module_toggled(self, moduleview, context, loader):
  397.         if context.enabled:
  398.             loader.stop_module_async(context)
  399.         else:
  400.             loader.initialize_module_async(context)
  401.  
  402.  
  403.  
  404. def show_preferences(applet, loader, model):
  405.     DeskbarPreferencesUI(applet, loader, model).show_run_hide()
  406.  
  407.