def on_module_selected(self): if not self.loaded: print("Loading Keyboard module") self.sidePage.stack = SettingsStack() self.sidePage.add_widget(self.sidePage.stack) # Typing page = SettingsPage() settings = page.add_section(_("Key repeat")) self.sidePage.stack.add_titled(page, "typing", _("Typing")) switch = GSettingsSwitch( _("Enable key repeat"), "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat") settings.add_row(switch) slider = GSettingsRange( _("Repeat delay:"), "org.cinnamon.settings-daemon.peripherals.keyboard", "delay", _("Short"), _("Long"), 100, 2000, show_value=False) settings.add_reveal_row( slider, "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat") slider = GSettingsRange( _("Repeat speed:"), "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat-interval", _("Slow"), _("Fast"), 20, 2000, log=True, show_value=False, flipped=True) settings.add_reveal_row( slider, "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat") settings = page.add_section(_("Text cursor")) switch = GSettingsSwitch(_("Text cursor blinks"), "org.cinnamon.desktop.interface", "cursor-blink") settings.add_row(switch) slider = GSettingsRange(_("Blink speed:"), "org.cinnamon.desktop.interface", "cursor-blink-time", _("Slow"), _("Fast"), 100, 2500, show_value=False, flipped=True) settings.add_reveal_row(slider, "org.cinnamon.desktop.interface", "cursor-blink") # vbox.add(Gtk.Label.new(_("Test Box"))) # vbox.add(Gtk.Entry()) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.set_border_width(6) vbox.set_spacing(6) self.sidePage.stack.add_titled(vbox, "shortcuts", _("Shortcuts")) headingbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) mainbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 2) headingbox.pack_start(mainbox, True, True, 2) headingbox.pack_end( Gtk.Label.new( _("To edit a keyboard binding, click it and press the new keys, or press backspace to clear it." )), False, False, 1) paned = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL) Gtk.StyleContext.add_class(Gtk.Widget.get_style_context(paned), "wide") left_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) right_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) paned.add1(left_vbox) right_scroller = Gtk.ScrolledWindow.new(None, None) right_scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) right_scroller.add(right_vbox) paned.add2(right_scroller) category_scroller = Gtk.ScrolledWindow.new(None, None) category_scroller.set_shadow_type(Gtk.ShadowType.IN) kb_name_scroller = Gtk.ScrolledWindow.new(None, None) kb_name_scroller.set_shadow_type(Gtk.ShadowType.IN) entry_scroller = Gtk.ScrolledWindow.new(None, None) entry_scroller.set_shadow_type(Gtk.ShadowType.IN) right_vbox.pack_start(kb_name_scroller, True, True, 2) right_vbox.pack_start(entry_scroller, True, True, 2) kb_name_scroller.set_property('min-content-height', 150) self.cat_tree = Gtk.TreeView.new() self.kb_tree = Gtk.TreeView.new() self.entry_tree = Gtk.TreeView.new() self.kb_tree.connect('row-activated', self.onCustomKeyBindingEdited) self.kb_tree.connect('button-press-event', self.onContextMenuPopup) self.kb_tree.connect('popup-menu', self.onContextMenuPopup) left_vbox.pack_start(category_scroller, True, True, 2) category_scroller.add(self.cat_tree) category_scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) kb_name_scroller.add(self.kb_tree) kb_name_scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) entry_scroller.add(self.entry_tree) entry_scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) buttonbox = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL) self.add_custom_button = Gtk.Button.new_with_label( _("Add custom shortcut")) self.add_custom_button.connect('clicked', self.onAddCustomButtonClicked) self.remove_custom_button = Gtk.Button.new_with_label( _("Remove custom shortcut")) self.remove_custom_button.connect('clicked', self.onRemoveCustomButtonClicked) self.remove_custom_button.set_property('sensitive', False) buttonbox.pack_start(self.add_custom_button, False, False, 2) buttonbox.pack_start(self.remove_custom_button, False, False, 2) right_vbox.pack_end(buttonbox, False, False, 2) mainbox.pack_start(paned, True, True, 2) self.cat_store = Gtk.TreeStore( str, # Icon name or None str, # The category name object) # The category object self.kb_store = Gtk.ListStore( str, # Keybinding name object) # The keybinding object self.entry_store = Gtk.ListStore(str) # Accel string cell = Gtk.CellRendererText() cell.set_alignment(0, 0) pb_cell = Gtk.CellRendererPixbuf() cat_column = Gtk.TreeViewColumn(_("Categories")) cat_column.pack_start(pb_cell, False) cat_column.pack_start(cell, True) cat_column.add_attribute(pb_cell, "icon-name", 0) cat_column.add_attribute(cell, "text", 1) cat_column.set_alignment(0) cat_column.set_property('min-width', 200) self.cat_tree.append_column(cat_column) self.cat_tree.connect("cursor-changed", self.onCategoryChanged) kb_name_cell = Gtk.CellRendererText() kb_name_cell.set_alignment(.5, .5) kb_column = Gtk.TreeViewColumn(_("Keyboard shortcuts"), kb_name_cell, text=0) kb_column.set_alignment(.5) self.kb_tree.append_column(kb_column) self.kb_tree.connect("cursor-changed", self.onKeyBindingChanged) entry_cell = CellRendererKeybinding(self.entry_tree) entry_cell.set_alignment(.5, .5) entry_cell.connect('accel-edited', self.onEntryChanged, self.entry_store) entry_cell.connect('accel-cleared', self.onEntryCleared, self.entry_store) entry_cell.set_property('editable', True) entry_column = Gtk.TreeViewColumn(_("Keyboard bindings"), entry_cell, accel_string=0) entry_column.set_alignment(.5) self.entry_tree.append_column(entry_column) self.entry_tree.set_tooltip_text( CellRendererKeybinding.TOOLTIP_TEXT) self.main_store = [] for cat in CATEGORIES: self.main_store.append( KeyBindingCategory(cat[0], cat[1], cat[2], cat[3])) for binding in KEYBINDINGS: for category in self.main_store: if category.int_name == binding[3]: category.add( KeyBinding(binding[0], binding[1], binding[2], binding[3])) cat_iters = {} longest_cat_label = " " for category in self.main_store: if category.parent == None: cat_iters[category.int_name] = self.cat_store.append(None) else: cat_iters[category.int_name] = self.cat_store.append( cat_iters[category.parent]) if category.icon: self.cat_store.set_value(cat_iters[category.int_name], 0, category.icon) self.cat_store.set_value(cat_iters[category.int_name], 1, category.label) self.cat_store.set_value(cat_iters[category.int_name], 2, category) if len(category.label) > len(longest_cat_label): longest_cat_label = category.label layout = self.cat_tree.create_pango_layout(longest_cat_label) w, h = layout.get_pixel_size() paned.set_position(max(w, 200)) self.loadCustoms() self.cat_tree.set_model(self.cat_store) self.kb_tree.set_model(self.kb_store) self.entry_tree.set_model(self.entry_store) vbox.pack_start(headingbox, True, True, 0) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.set_border_width(6) vbox.set_spacing(6) self.sidePage.stack.add_titled(vbox, "layouts", _("Layouts")) try: widget = self.sidePage.content_box.c_manager.get_c_widget( "region") except: widget = None if widget is not None: cheat_box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) cheat_box.pack_start(widget, True, True, 2) cheat_box.set_vexpand(False) widget.show() vbox.pack_start(cheat_box, True, True, 0)
def on_module_selected(self): if not self.loaded: print "Loading Keyboard module" self.sidePage.stack = SettingsStack() self.sidePage.add_widget(self.sidePage.stack) # Typing page = SettingsPage() settings = page.add_section(_("Key repeat")) self.sidePage.stack.add_titled(page, "typing", _("Typing")) switch = GSettingsSwitch(_("Enable key repeat"), "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat") settings.add_row(switch) slider = GSettingsRange(_("Repeat delay:"), "org.cinnamon.settings-daemon.peripherals.keyboard", "delay", _("Short"), _("Long"), 100, 2000) settings.add_reveal_row(slider, "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat") slider = GSettingsRange(_("Repeat speed:"), "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat-interval", _("Slow"), _("Fast"), 20, 2000, invert=True, log=True) settings.add_reveal_row(slider, "org.cinnamon.settings-daemon.peripherals.keyboard", "repeat") settings = page.add_section(_("Text cursor")) switch = GSettingsSwitch(_("Text cursor blinks"), "org.cinnamon.desktop.interface", "cursor-blink") settings.add_row(switch) slider = GSettingsRange(_("Blink speed:"), "org.cinnamon.desktop.interface", "cursor-blink-time", _("Slow"), _("Fast"), 100, 2500, invert=True) settings.add_reveal_row(slider, "org.cinnamon.desktop.interface", "cursor-blink") # vbox.add(Gtk.Label.new(_("Test Box"))) # vbox.add(Gtk.Entry()) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.set_border_width(6) vbox.set_spacing(6) self.sidePage.stack.add_titled(vbox, "shortcuts", _("Shortcuts")) headingbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) mainbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 2) headingbox.pack_start(mainbox, True, True, 2) headingbox.pack_end(Gtk.Label.new(_("To edit a keyboard binding, click it and press the new keys, or press backspace to clear it.")), False, False, 1) paned = Gtk.Paned(orientation = Gtk.Orientation.HORIZONTAL) Gtk.StyleContext.add_class(Gtk.Widget.get_style_context(paned), "wide") left_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) right_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) paned.add1(left_vbox) right_scroller = Gtk.ScrolledWindow.new(None, None) right_scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) right_scroller.add(right_vbox) paned.add2(right_scroller) category_scroller = Gtk.ScrolledWindow.new(None, None) category_scroller.set_shadow_type(Gtk.ShadowType.IN) kb_name_scroller = Gtk.ScrolledWindow.new(None, None) kb_name_scroller.set_shadow_type(Gtk.ShadowType.IN) entry_scroller = Gtk.ScrolledWindow.new(None, None) entry_scroller.set_shadow_type(Gtk.ShadowType.IN) right_vbox.pack_start(kb_name_scroller, True, True, 2) right_vbox.pack_start(entry_scroller, True, True, 2) kb_name_scroller.set_property('min-content-height', 150) self.cat_tree = Gtk.TreeView.new() self.kb_tree = Gtk.TreeView.new() self.entry_tree = Gtk.TreeView.new() self.kb_tree.connect('row-activated', self.onCustomKeyBindingEdited) self.kb_tree.connect('button-press-event', self.onContextMenuPopup) self.kb_tree.connect('popup-menu', self.onContextMenuPopup) left_vbox.pack_start(category_scroller, True, True, 2) category_scroller.add(self.cat_tree) category_scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) kb_name_scroller.add(self.kb_tree) kb_name_scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) entry_scroller.add(self.entry_tree) entry_scroller.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) buttonbox = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL) self.add_custom_button = Gtk.Button.new_with_label(_("Add custom shortcut")) self.add_custom_button.connect('clicked', self.onAddCustomButtonClicked) self.remove_custom_button = Gtk.Button.new_with_label(_("Remove custom shortcut")) self.remove_custom_button.connect('clicked', self.onRemoveCustomButtonClicked) self.remove_custom_button.set_property('sensitive', False) buttonbox.pack_start(self.add_custom_button, False, False, 2) buttonbox.pack_start(self.remove_custom_button, False, False, 2) right_vbox.pack_end(buttonbox, False, False, 2) mainbox.pack_start(paned, True, True, 2) self.cat_store = Gtk.TreeStore(str, # Icon name or None str, # The category name object) # The category object self.kb_store = Gtk.ListStore( str, # Keybinding name object)# The keybinding object self.entry_store = Gtk.ListStore(str) # Accel string cell = Gtk.CellRendererText() cell.set_alignment(0,0) pb_cell = Gtk.CellRendererPixbuf() cat_column = Gtk.TreeViewColumn(_("Categories")) cat_column.pack_start(pb_cell, False) cat_column.pack_start(cell, True) cat_column.add_attribute(pb_cell, "icon-name", 0) cat_column.add_attribute(cell, "text", 1) cat_column.set_alignment(0) cat_column.set_property('min-width', 200) self.cat_tree.append_column(cat_column) self.cat_tree.connect("cursor-changed", self.onCategoryChanged) kb_name_cell = Gtk.CellRendererText() kb_name_cell.set_alignment(.5,.5) kb_column = Gtk.TreeViewColumn(_("Keyboard shortcuts"), kb_name_cell, text=0) kb_column.set_alignment(.5) self.kb_tree.append_column(kb_column) self.kb_tree.connect("cursor-changed", self.onKeyBindingChanged) entry_cell = CellRendererKeybinding(self.entry_tree) entry_cell.set_alignment(.5,.5) entry_cell.connect('accel-edited', self.onEntryChanged, self.entry_store) entry_cell.connect('accel-cleared', self.onEntryCleared, self.entry_store) entry_cell.set_property('editable', True) entry_column = Gtk.TreeViewColumn(_("Keyboard bindings"), entry_cell, accel_string=0) entry_column.set_alignment(.5) self.entry_tree.append_column(entry_column) self.entry_tree.set_tooltip_text("%s\n%s\n%s" % (_("Click to set a new accelerator key."), _("Press Escape or click again to cancel the operation."), _("Press Backspace to clear the existing keybinding."))) self.main_store = [] for cat in CATEGORIES: self.main_store.append(KeyBindingCategory(cat[0], cat[1], cat[2], cat[3])) for binding in KEYBINDINGS: for category in self.main_store: if category.int_name == binding[3]: category.add(KeyBinding(binding[0], binding[1], binding[2], binding[3])) cat_iters = {} longest_cat_label = " " for category in self.main_store: if category.parent == None: cat_iters[category.int_name] = self.cat_store.append(None) else: cat_iters[category.int_name] = self.cat_store.append(cat_iters[category.parent]) if category.icon: self.cat_store.set_value(cat_iters[category.int_name], 0, category.icon) self.cat_store.set_value(cat_iters[category.int_name], 1, category.label) self.cat_store.set_value(cat_iters[category.int_name], 2, category) if len(category.label) > len(longest_cat_label): longest_cat_label = category.label layout = self.cat_tree.create_pango_layout(longest_cat_label) w, h = layout.get_pixel_size() paned.set_position(max(w, 200)) self.loadCustoms() self.cat_tree.set_model(self.cat_store) self.kb_tree.set_model(self.kb_store) self.entry_tree.set_model(self.entry_store) vbox.pack_start(headingbox, True, True, 0) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.set_border_width(6) vbox.set_spacing(6) self.sidePage.stack.add_titled(vbox, "layouts", _("Layouts")) try: widget = self.sidePage.content_box.c_manager.get_c_widget("region") except: widget = None if widget is not None: cheat_box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 2) cheat_box.pack_start(widget, True, True, 2) cheat_box.set_vexpand(False) widget.show() vbox.pack_start(cheat_box, True, True, 0)