예제 #1
0
    def _Init(self):

        self.Button = SizedButton(minWidth=100)
        self.Button.connect("clicked", self.RunKeySelector)
        self.SetButtonLabel()

        EditableActionSetting._Init(self, self.Button, "keyboard")
예제 #2
0
    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")
예제 #3
0
파일: Settings.py 프로젝트: hedmo/compiz
    def _Init (self):

        self.Button = SizedButton (minWidth = 100)
        self.Button.connect ("clicked", self.RunKeySelector)
        self.SetButtonLabel ()
        
        EditableActionSetting._Init (self, self.Button, "keyboard")
예제 #4
0
파일: Settings.py 프로젝트: hedmo/compiz
    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")
예제 #5
0
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)
예제 #6
0
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()
예제 #7
0
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)
예제 #8
0
파일: Settings.py 프로젝트: hedmo/compiz
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)
예제 #9
0
파일: Settings.py 프로젝트: hedmo/compiz
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 ()
예제 #10
0
파일: Settings.py 프로젝트: hedmo/compiz
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)