def _Init(self): self.Button = SizedButton(minWidth=100) self.Button.connect("clicked", self.RunKeySelector) self.SetButtonLabel() EditableActionSetting._Init(self, self.Button, "keyboard")
def _Init(self): self.Button = SizedButton(minWidth=100) self.Button.connect("clicked", self.RunEdgeSelector) self.Button.set_tooltip_text(self.Setting.LongDesc) self.SetButtonLabel() EditableActionSetting._Init(self, self.Button, "edges")
def _Init (self): self.Button = SizedButton (minWidth = 100) self.Button.connect ("clicked", self.RunKeySelector) self.SetButtonLabel () EditableActionSetting._Init (self, self.Button, "keyboard")
def _Init (self): self.Button = SizedButton (minWidth = 100) self.Button.connect ("clicked", self.RunEdgeSelector) self.Button.set_tooltip_text(self.Setting.LongDesc) self.SetButtonLabel () EditableActionSetting._Init (self, self.Button, "edges")
class KeySetting(EditableActionSetting): current = "" def _Init(self): self.Button = SizedButton(minWidth=100) self.Button.connect("clicked", self.RunKeySelector) self.SetButtonLabel() EditableActionSetting._Init(self, self.Button, "keyboard") def DoReset(self, widget): conflict = KeyConflict(self.Setting, self.Setting.DefaultValue) if conflict.Resolve(GlobalUpdater): self.Setting.Reset() self.Setting.Plugin.Context.Write() self.Read() def ReorderKeyString(self, accel): key, mods = Gtk.accelerator_parse(accel) return GetAcceleratorName(key, mods) def GetDialogText(self): return self.current def HandleDialogText(self, accel): name = self.ReorderKeyString(accel) if len(accel) != len(name): accel = protect_pango_markup(accel) ErrorDialog(self.Widget.get_toplevel(), _("\"%s\" is not a valid shortcut") % accel) return self.BindingEdited(accel) def GetLabelText(self, text): if not len(text) or text.lower() == "disabled": text = _("Disabled") return text def SetButtonLabel(self): self.Button.set_label(self.GetLabelText(self.current)) def RunKeySelector(self, widget): def ShowHideBox(button, box, dialog): if button.get_active(): box.show() else: box.hide() dialog.resize(1, 1) def HandleGrabberChanged(grabber, key, mods, label, selector): new = GetAcceleratorName(key, mods) mods = "" for mod in KeyModifier: if "%s_L" % mod in new: new = new.replace("%s_L" % mod, "<%s>" % mod) if "%s_R" % mod in new: new = new.replace("%s_R" % mod, "<%s>" % mod) if "<%s>" % mod in new: mods += "%s|" % mod mods.rstrip("|") label.set_text(self.GetLabelText(new)) selector.current = mods def HandleModifierAdded(selector, modifier, label): current = label.get_text() if current == _("Disabled"): current = "<%s>" % modifier else: current = ("<%s>" % modifier) + current label.set_text(self.ReorderKeyString(current)) def HandleModifierRemoved(selector, modifier, label): current = label.get_text() if "<%s>" % modifier in current: new = current.replace("<%s>" % modifier, "") elif "%s_L" % modifier in current: new = current.replace("%s_L" % modifier, "") elif "%s_R" % modifier in current: new = current.replace("%s_R" % modifier, "") label.set_text(self.GetLabelText(new)) dlg = Gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc) dlg.set_position(Gtk.WindowPosition.CENTER_ALWAYS) dlg.set_transient_for(self.Widget.get_toplevel()) dlg.set_icon(self.Widget.get_toplevel().get_icon()) dlg.set_modal(True) dlg.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) dlg.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK).grab_default() dlg.set_default_response(Gtk.ResponseType.OK) mainBox = Gtk.VBox() alignment = Gtk.Alignment() alignment.set_padding(10, 10, 10, 10) alignment.add(mainBox) dlg.vbox.pack_start(alignment, True, True, 0) checkButton = Gtk.CheckButton(_("Enabled")) active = len (self.current) \ and self.current.lower () not in ("disabled", "none") checkButton.set_active(active) checkButton.set_tooltip_text(self.Setting.LongDesc) mainBox.pack_start(checkButton, True, True, 0) box = Gtk.VBox() checkButton.connect("toggled", ShowHideBox, box, dlg) mainBox.pack_start(box, True, True, 0) currentMods = "" for mod in KeyModifier: if "<%s>" % mod in self.current: currentMods += "%s|" % mod currentMods.rstrip("|") modifierSelector = ModifierSelector(currentMods) modifierSelector.set_tooltip_text(self.Setting.LongDesc) alignment = Gtk.Alignment(xalign=0.5) alignment.add(modifierSelector) box.pack_start(alignment, True, True, 0) key, mods = Gtk.accelerator_parse(self.current) grabber = KeyGrabber(key=key, mods=mods, label=_("Grab key combination")) grabber.set_tooltip_text(self.Setting.LongDesc) box.pack_start(grabber, True, True, 0) label = Gtk.Label(self.current) label.set_tooltip_text(self.Setting.LongDesc) alignment = Gtk.Alignment(xalign=0.5, yalign=0.5) alignment.set_padding(15, 0, 0, 0) alignment.add(label) box.pack_start(alignment, True, True, 0) modifierSelector.connect("added", HandleModifierAdded, label) modifierSelector.connect("removed", HandleModifierRemoved, label) grabber.connect("changed", HandleGrabberChanged, label, modifierSelector) grabber.connect("current-changed", HandleGrabberChanged, label, modifierSelector) dlg.vbox.show_all() ShowHideBox(checkButton, box, dlg) ret = dlg.run() dlg.destroy() if ret != Gtk.ResponseType.OK: return if not checkButton.get_active(): self.BindingEdited("Disabled") return new = label.get_text() new = self.ReorderKeyString(new) self.BindingEdited(new) def BindingEdited(self, accel): '''Binding edited callback''' # Update & save binding conflict = KeyConflict(self.Setting, accel) if conflict.Resolve(GlobalUpdater): self.current = accel self.Changed() self.SetButtonLabel() def _Read(self): self.current = self.Get() self.SetButtonLabel() def _Changed(self): self.Set(self.current)
class EdgeSetting(EditableActionSetting): current = "" def _Init(self): self.Button = SizedButton(minWidth=100) self.Button.connect("clicked", self.RunEdgeSelector) self.Button.set_tooltip_text(self.Setting.LongDesc) self.SetButtonLabel() EditableActionSetting._Init(self, self.Button, "edges") def DoReset(self, widget): conflict = EdgeConflict(self.Setting, self.Setting.DefaultValue) if conflict.Resolve(GlobalUpdater): self.Setting.Reset() self.Setting.Plugin.Context.Write() self.Read() def GetDialogText(self): return self.current def HandleDialogText(self, mask): edges = mask.split("|") valid = True for edge in edges: if edge not in Edges: valid = False break if not valid: mask = protect_pango_markup(mask) ErrorDialog(self.Widget.get_toplevel(), _("\"%s\" is not a valid edge mask") % mask) return self.EdgeEdited("|".join(edges)) def SetButtonLabel(self): label = self.current if len(self.current): edges = self.current.split("|") edges = [_(s) for s in edges] label = ", ".join(edges) else: label = _("None") self.Button.set_label(label) def RunEdgeSelector(self, widget): dlg = Gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc) dlg.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) dlg.set_transient_for(self.Widget.get_toplevel()) dlg.set_modal(True) dlg.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) dlg.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK).grab_default() dlg.set_default_response(Gtk.ResponseType.OK) selector = SingleEdgeSelector(self.current) alignment = Gtk.Alignment() alignment.set_padding(10, 10, 10, 10) alignment.add(selector) selector.set_tooltip_text(self.Setting.LongDesc) dlg.vbox.pack_start(alignment, True, True, 0) dlg.vbox.show_all() ret = dlg.run() dlg.destroy() if ret != Gtk.ResponseType.OK: return self.EdgeEdited(selector.current) def EdgeEdited(self, edge): '''Edge edited callback''' conflict = EdgeConflict(self.Setting, edge) if conflict.Resolve(GlobalUpdater): self.current = edge self.Changed() self.SetButtonLabel() def _Read(self): self.current = self.Get() self.SetButtonLabel() def _Changed(self): self.Set(self.current) self.SetButtonLabel()
class ButtonSetting(EditableActionSetting): current = "" def _Init(self): self.Button = SizedButton(minWidth=100) self.Button.connect("clicked", self.RunButtonSelector) self.Button.set_tooltip_text(self.Setting.LongDesc) self.SetButtonLabel() EditableActionSetting._Init(self, self.Button, "button") def DoReset(self, widget): conflict = ButtonConflict(self.Setting, self.Setting.DefaultValue) if conflict.Resolve(GlobalUpdater): self.Setting.Reset() self.Setting.Plugin.Context.Write() self.Read() def ReorderButtonString(self, old): new = "" edges = ["%sEdge" % e for e in Edges] for s in edges + KeyModifier: if "<%s>" % s in old: new += "<%s>" % s for i in range(99, 0, -1): if "Button%d" % i in old: new += "Button%d" % i break return new def GetDialogText(self): return self.current def HandleDialogText(self, button): def ShowErrorDialog(button): button = protect_pango_markup(button) ErrorDialog(self.Widget.get_toplevel(), _("\"%s\" is not a valid button") % button) if button.lower().strip() in ("", "disabled", "none"): self.ButtonEdited("Disabled") return new = self.ReorderButtonString(button) if len(button) != len(new): ShowErrorDialog(button) return self.ButtonEdited(new) def SetButtonLabel(self): label = self.current if not len(self.current) or self.current.lower() == "disabled": label = _("Disabled") self.Button.set_label(label) def RunButtonSelector(self, widget): def ShowHideBox(button, box, dialog): if button.get_active(): box.show() else: box.hide() dialog.resize(1, 1) dlg = Gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc) dlg.set_position(Gtk.WindowPosition.CENTER_ALWAYS) dlg.set_transient_for(self.Widget.get_toplevel()) dlg.set_modal(True) dlg.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) dlg.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK).grab_default() dlg.set_default_response(Gtk.ResponseType.OK) mainBox = Gtk.VBox() alignment = Gtk.Alignment() alignment.set_padding(10, 10, 10, 10) alignment.add(mainBox) dlg.vbox.pack_start(alignment, True, True, 0) checkButton = Gtk.CheckButton(_("Enabled")) active = len (self.current) \ and self.current.lower () not in ("disabled", "none") checkButton.set_active(active) checkButton.set_tooltip_text(self.Setting.LongDesc) mainBox.pack_start(checkButton, True, True, 0) box = Gtk.VBox() checkButton.connect("toggled", ShowHideBox, box, dlg) mainBox.pack_start(box, True, True, 0) currentEdges = "" for edge in Edges: if "<%sEdge>" % edge in self.current: currentEdges += "%s|" % edge currentEdges.rstrip("|") edgeSelector = SingleEdgeSelector(currentEdges) edgeSelector.set_tooltip_text(self.Setting.LongDesc) box.pack_start(edgeSelector, True, True, 0) currentMods = "" for mod in KeyModifier: if "<%s>" % mod in self.current: currentMods += "%s|" % mod currentMods.rstrip("|") modifierSelector = ModifierSelector(currentMods) modifierSelector.set_tooltip_text(self.Setting.LongDesc) box.pack_start(modifierSelector, True, True, 0) buttonCombo = Gtk.ComboBoxText() currentButton = 1 for i in range(99, 0, -1): if "Button%d" % i in self.current: currentButton = i break maxButton = 20 for i in range(1, maxButton + 1): button = "Button%d" % i buttonCombo.append_text(button) if currentButton > maxButton: buttonCombo.append_text("Button%d" % currentButton) buttonCombo.set_active(maxButton) else: buttonCombo.set_active(currentButton - 1) buttonCombo.set_tooltip_text(self.Setting.LongDesc) box.pack_start(buttonCombo, True, True, 0) dlg.vbox.show_all() ShowHideBox(checkButton, box, dlg) ret = dlg.run() dlg.destroy() if ret != Gtk.ResponseType.OK: return if not checkButton.get_active(): self.ButtonEdited("Disabled") return edges = edgeSelector.current modifiers = modifierSelector.current button = buttonCombo.get_active_text() edges = edges.split("|") if len(edges): edges = "<%sEdge>" % "Edge><".join(edges) else: edges = "" modifiers = modifiers.split("|") if len(modifiers): modifiers = "<%s>" % "><".join(modifiers) else: modifiers = "" button = "%s%s%s" % (edges, modifiers, button) button = self.ReorderButtonString(button) self.ButtonEdited(button) def ButtonEdited(self, button): '''Button edited callback''' if button == "Button1": warning = WarningDialog( self.Widget.get_toplevel(), _("Using Button1 without modifiers can \ prevent any left click and thus break your configuration. Do you really want \ to set \"%s\" button to Button1 ?") % self.Setting.ShortDesc) response = warning.run() if response != Gtk.ResponseType.YES: return conflict = ButtonConflict(self.Setting, button) if conflict.Resolve(GlobalUpdater): self.current = button self.Changed() self.SetButtonLabel() def _Read(self): self.current = self.Get() self.SetButtonLabel() def _Changed(self): self.Set(self.current)
class KeySetting (EditableActionSetting): current = "" def _Init (self): self.Button = SizedButton (minWidth = 100) self.Button.connect ("clicked", self.RunKeySelector) self.SetButtonLabel () EditableActionSetting._Init (self, self.Button, "keyboard") def DoReset (self, widget): conflict = KeyConflict (self.Setting, self.Setting.DefaultValue) if conflict.Resolve (GlobalUpdater): self.Setting.Reset () self.Setting.Plugin.Context.Write () self.Read () def ReorderKeyString (self, accel): key, mods = Gtk.accelerator_parse (accel) return GetAcceleratorName (key, mods) def GetDialogText (self): return self.current def HandleDialogText (self, accel): name = self.ReorderKeyString (accel) if len (accel) != len (name): accel = protect_pango_markup (accel) ErrorDialog (self.Widget.get_toplevel (), _("\"%s\" is not a valid shortcut") % accel) return self.BindingEdited (accel) def GetLabelText (self, text): if not len (text) or text.lower() == "disabled": text = _("Disabled") return text def SetButtonLabel (self): self.Button.set_label (self.GetLabelText (self.current)) def RunKeySelector (self, widget): def ShowHideBox (button, box, dialog): if button.get_active (): box.show () else: box.hide () dialog.resize (1, 1) def HandleGrabberChanged (grabber, key, mods, label, selector): new = GetAcceleratorName (key, mods) mods = "" for mod in KeyModifier: if "%s_L" % mod in new: new = new.replace ("%s_L" % mod, "<%s>" % mod) if "%s_R" % mod in new: new = new.replace ("%s_R" % mod, "<%s>" % mod) if "<%s>" % mod in new: mods += "%s|" % mod mods.rstrip ("|") label.set_text (self.GetLabelText (new)) selector.current = mods def HandleModifierAdded (selector, modifier, label): current = label.get_text () if current == _("Disabled"): current = "<%s>" % modifier else: current = ("<%s>" % modifier) + current label.set_text (self.ReorderKeyString (current)) def HandleModifierRemoved (selector, modifier, label): current = label.get_text () if "<%s>" % modifier in current: new = current.replace ("<%s>" % modifier, "") elif "%s_L" % modifier in current: new = current.replace ("%s_L" % modifier, "") elif "%s_R" % modifier in current: new = current.replace ("%s_R" % modifier, "") label.set_text (self.GetLabelText (new)) dlg = Gtk.Dialog(title=_("Edit %s") % self.Setting.ShortDesc) dlg.set_position (Gtk.WindowPosition.CENTER_ALWAYS) dlg.set_transient_for (self.Widget.get_toplevel ()) dlg.set_icon (self.Widget.get_toplevel ().get_icon ()) dlg.set_modal (True) dlg.add_button (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) dlg.add_button (Gtk.STOCK_OK, Gtk.ResponseType.OK).grab_default () dlg.set_default_response (Gtk.ResponseType.OK) mainBox = Gtk.VBox () alignment = Gtk.Alignment () alignment.set_padding (10, 10, 10, 10) alignment.add (mainBox) dlg.vbox.pack_start (alignment, True, True, 0) checkButton = Gtk.CheckButton(label=_("Enabled")) active = len (self.current) \ and self.current.lower () not in ("disabled", "none") checkButton.set_active (active) checkButton.set_tooltip_text(self.Setting.LongDesc) mainBox.pack_start (checkButton, True, True, 0) box = Gtk.VBox () checkButton.connect ("toggled", ShowHideBox, box, dlg) mainBox.pack_start (box, True, True, 0) currentMods = "" for mod in KeyModifier: if "<%s>" % mod in self.current: currentMods += "%s|" % mod currentMods.rstrip ("|") modifierSelector = ModifierSelector (currentMods) modifierSelector.set_tooltip_text (self.Setting.LongDesc) alignment = Gtk.Alignment (xalign=0.5) alignment.add (modifierSelector) box.pack_start (alignment, True, True, 0) key, mods = Gtk.accelerator_parse (self.current) grabber = KeyGrabber (key = key, mods = mods, label = _("Grab key combination")) grabber.set_tooltip_text (self.Setting.LongDesc) box.pack_start (grabber, True, True, 0) label = Gtk.Label(label=self.current) label.set_tooltip_text (self.Setting.LongDesc) alignment = Gtk.Alignment (xalign=0.5, yalign=0.5) alignment.set_padding (15, 0, 0, 0) alignment.add (label) box.pack_start (alignment, True, True, 0) modifierSelector.connect ("added", HandleModifierAdded, label) modifierSelector.connect ("removed", HandleModifierRemoved, label) grabber.connect ("changed", HandleGrabberChanged, label, modifierSelector) grabber.connect ("current-changed", HandleGrabberChanged, label, modifierSelector) dlg.vbox.show_all () ShowHideBox (checkButton, box, dlg) ret = dlg.run () dlg.destroy () if ret != Gtk.ResponseType.OK: return if not checkButton.get_active (): self.BindingEdited ("Disabled") return new = label.get_text () new = self.ReorderKeyString (new) self.BindingEdited (new) def BindingEdited (self, accel): '''Binding edited callback''' # Update & save binding conflict = KeyConflict (self.Setting, accel) if conflict.Resolve (GlobalUpdater): self.current = accel self.Changed () self.SetButtonLabel () def _Read (self): self.current = self.Get() self.SetButtonLabel () def _Changed (self): self.Set(self.current)
class EdgeSetting (EditableActionSetting): current = "" def _Init (self): self.Button = SizedButton (minWidth = 100) self.Button.connect ("clicked", self.RunEdgeSelector) self.Button.set_tooltip_text(self.Setting.LongDesc) self.SetButtonLabel () EditableActionSetting._Init (self, self.Button, "edges") def DoReset (self, widget): conflict = EdgeConflict (self.Setting, self.Setting.DefaultValue) if conflict.Resolve (GlobalUpdater): self.Setting.Reset () self.Setting.Plugin.Context.Write () self.Read () def GetDialogText (self): return self.current def HandleDialogText (self, mask): edges = mask.split ("|") valid = True for edge in edges: if edge not in Edges: valid = False break if not valid: mask = protect_pango_markup (mask) ErrorDialog (self.Widget.get_toplevel (), _("\"%s\" is not a valid edge mask") % mask) return self.EdgeEdited ("|".join (edges)) def SetButtonLabel (self): label = self.current if len (self.current): edges = self.current.split ("|") edges = [_(s) for s in edges] label = ", ".join (edges) else: label = _("None") self.Button.set_label (label) def RunEdgeSelector (self, widget): dlg = Gtk.Dialog(title=_("Edit %s") % self.Setting.ShortDesc) dlg.set_position (Gtk.WindowPosition.CENTER_ON_PARENT) dlg.set_transient_for (self.Widget.get_toplevel ()) dlg.set_modal (True) dlg.add_button (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) dlg.add_button (Gtk.STOCK_OK, Gtk.ResponseType.OK).grab_default() dlg.set_default_response (Gtk.ResponseType.OK) selector = SingleEdgeSelector (self.current) alignment = Gtk.Alignment () alignment.set_padding (10, 10, 10, 10) alignment.add (selector) selector.set_tooltip_text (self.Setting.LongDesc) dlg.vbox.pack_start (alignment, True, True, 0) dlg.vbox.show_all () ret = dlg.run () dlg.destroy () if ret != Gtk.ResponseType.OK: return self.EdgeEdited (selector.current) def EdgeEdited (self, edge): '''Edge edited callback''' conflict = EdgeConflict (self.Setting, edge) if conflict.Resolve (GlobalUpdater): self.current = edge self.Changed () self.SetButtonLabel () def _Read (self): self.current = self.Get() self.SetButtonLabel () def _Changed (self): self.Set(self.current) self.SetButtonLabel ()
class ButtonSetting (EditableActionSetting): current = "" def _Init (self): self.Button = SizedButton (minWidth = 100) self.Button.connect ("clicked", self.RunButtonSelector) self.Button.set_tooltip_text(self.Setting.LongDesc) self.SetButtonLabel () EditableActionSetting._Init (self, self.Button, "button") def DoReset (self, widget): conflict = ButtonConflict (self.Setting, self.Setting.DefaultValue) if conflict.Resolve (GlobalUpdater): self.Setting.Reset () self.Setting.Plugin.Context.Write () self.Read () def ReorderButtonString (self, old): new = "" edges = ["%sEdge" % e for e in Edges] for s in edges + KeyModifier: if "<%s>" % s in old: new += "<%s>" % s for i in range (99, 0, -1): if "Button%d" % i in old: new += "Button%d" % i break return new def GetDialogText (self): return self.current def HandleDialogText (self, button): def ShowErrorDialog (button): button = protect_pango_markup (button) ErrorDialog (self.Widget.get_toplevel (), _("\"%s\" is not a valid button") % button) if button.lower ().strip () in ("", "disabled", "none"): self.ButtonEdited ("Disabled") return new = self.ReorderButtonString (button) if len (button) != len (new): ShowErrorDialog (button) return self.ButtonEdited (new) def SetButtonLabel (self): label = self.current if not len (self.current) or self.current.lower() == "disabled": label = _("Disabled") self.Button.set_label (label) def RunButtonSelector (self, widget): def ShowHideBox (button, box, dialog): if button.get_active (): box.show () else: box.hide () dialog.resize (1, 1) dlg = Gtk.Dialog(title=_("Edit %s") % self.Setting.ShortDesc) dlg.set_position (Gtk.WindowPosition.CENTER_ALWAYS) dlg.set_transient_for (self.Widget.get_toplevel ()) dlg.set_modal (True) dlg.add_button (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) dlg.add_button (Gtk.STOCK_OK, Gtk.ResponseType.OK).grab_default () dlg.set_default_response (Gtk.ResponseType.OK) mainBox = Gtk.VBox () alignment = Gtk.Alignment () alignment.set_padding (10, 10, 10, 10) alignment.add (mainBox) dlg.vbox.pack_start (alignment, True, True, 0) checkButton = Gtk.CheckButton(label=_("Enabled")) active = len (self.current) \ and self.current.lower () not in ("disabled", "none") checkButton.set_active (active) checkButton.set_tooltip_text (self.Setting.LongDesc) mainBox.pack_start (checkButton, True, True, 0) box = Gtk.VBox () checkButton.connect ("toggled", ShowHideBox, box, dlg) mainBox.pack_start (box, True, True, 0) currentEdges = "" for edge in Edges: if "<%sEdge>" % edge in self.current: currentEdges += "%s|" % edge currentEdges.rstrip ("|") edgeSelector = SingleEdgeSelector (currentEdges) edgeSelector.set_tooltip_text(self.Setting.LongDesc) box.pack_start (edgeSelector, True, True, 0) currentMods = "" for mod in KeyModifier: if "<%s>" % mod in self.current: currentMods += "%s|" % mod currentMods.rstrip ("|") modifierSelector = ModifierSelector (currentMods) modifierSelector.set_tooltip_text(self.Setting.LongDesc) box.pack_start (modifierSelector, True, True, 0) buttonCombo = Gtk.ComboBoxText () currentButton = 1 for i in range (99, 0, -1): if "Button%d" % i in self.current: currentButton = i break maxButton = 20 for i in range (1, maxButton + 1): button = "Button%d" % i buttonCombo.append_text (button) if currentButton > maxButton: buttonCombo.append_text ("Button%d" % currentButton) buttonCombo.set_active (maxButton) else: buttonCombo.set_active (currentButton - 1) buttonCombo.set_tooltip_text(self.Setting.LongDesc) box.pack_start (buttonCombo, True, True, 0) dlg.vbox.show_all () ShowHideBox (checkButton, box, dlg) ret = dlg.run () button = buttonCombo.get_active_text () dlg.destroy () if ret != Gtk.ResponseType.OK: return if not checkButton.get_active (): self.ButtonEdited ("Disabled") return edges = edgeSelector.current modifiers = modifierSelector.current edges = edges.split ("|") if len (edges): edges = "<%sEdge>" % "Edge><".join (edges) else: edges = "" modifiers = modifiers.split ("|") if len (modifiers): modifiers = "<%s>" % "><".join (modifiers) else: modifiers = "" button = "%s%s%s" % (edges, modifiers, button) button = self.ReorderButtonString (button) self.ButtonEdited (button) def ButtonEdited (self, button): '''Button edited callback''' if button == "Button1": warning = Gtk.MessageDialog (transient_for = self.Widget.get_toplevel (), destroy_with_parent = True, message_type = Gtk.MessageType.WARNING, buttons = Gtk.ButtonsType.YES_NO, title = _("Warning")) warning.set_markup (GLib.markup_escape_text (_("Using Button1 without modifiers can \ prevent any left click and thus break your configuration. Do you really want \ to set \"%s\" button to Button1 ?") % self.Setting.ShortDesc)) warning.set_position (Gtk.WindowPosition.CENTER) warning.connect_after ("response", lambda *args: warning.destroy ()) response = warning.run () if response != Gtk.ResponseType.YES: return conflict = ButtonConflict (self.Setting, button) if conflict.Resolve (GlobalUpdater): self.current = button self.Changed () self.SetButtonLabel () def _Read (self): self.current = self.Get() self.SetButtonLabel () def _Changed (self): self.Set(self.current)