~listen-devel/listen/devel

« back to all changes in this revision

Viewing changes to src/plugins/generic/global-keys.py

  • Committer: Abaakouk Mehdi
  • Date: 2011-03-26 17:27:30 UTC
  • Revision ID: theli48@gmail.com-20110326172730-rpjsxn9zjuctmffq
Add New plugins from Alexander Godlewski 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import keybinder
 
2
from plugins.generic import GenericPlugin
 
3
from player import Player
 
4
from widget.preference import HelperConfigureDialog
 
5
from config import config
 
6
 
 
7
class GlobalKeys(GenericPlugin):
 
8
 
 
9
    PLUGIN_NAME = "Global Key Bindings"
 
10
    PLUGIN_DESC = "Plugin to set global key bindings"
 
11
    PLUGIN_VERSION = "0.1"
 
12
    PLUGIN_AUTHOR = "Alexander Godlewski <alex@implode.ca>"
 
13
    PLUGIN_WEBSITE = ""
 
14
    
 
15
    func = {
 
16
        "globalkey_previous": Player.previous,
 
17
        "globalkey_pause": Player.pause,
 
18
        "globalkey_play": Player.playpause,
 
19
        "globalkey_stop": Player.stop,
 
20
        "globalkey_next": Player.next
 
21
        }
 
22
    
 
23
    def __init__(self):
 
24
        GenericPlugin.__init__(self)
 
25
        
 
26
        self.autoconnect(config, "config-changed", self.__on_config_changed)
 
27
 
 
28
        self.__bind(config.get("plugins", "globalkey_previous", "<Super>Z"), "Previous", self.func["globalkey_previous"])
 
29
        self.__bind(config.get("plugins", "globalkey_pause", "<Super>X"), "Pause", self.func["globalkey_pause"])
 
30
        self.__bind(config.get("plugins", "globalkey_play", "<Super>C"), "Play", self.func["globalkey_play"])
 
31
        self.__bind(config.get("plugins", "globalkey_stop", "<Super>V"), "Stop", self.func["globalkey_stop"])
 
32
        self.__bind(config.get("plugins", "globalkey_next", "<Super>B"), "Next", self.func["globalkey_next"])
 
33
        
 
34
        config.set("plugins", "globalkey_previous_last", config.get("plugins", "globalkey_previous", "<Super>Z"))
 
35
        config.set("plugins", "globalkey_pause_last", config.get("plugins", "globalkey_pause", "<Super>X"))
 
36
        config.set("plugins", "globalkey_play_last", config.get("plugins", "globalkey_play", "<Super>C"))
 
37
        config.set("plugins", "globalkey_stop_last", config.get("plugins", "globalkey_stop", "<Super>V"))
 
38
        config.set("plugins", "globalkey_next_last", config.get("plugins", "globalkey_next", "<Super>B"))
 
39
        
 
40
    def __handle_callback(self, text, callback):
 
41
        self.logdebug(text)
 
42
        callback()
 
43
        
 
44
    def __bind(self, key, target, callback):
 
45
        try:
 
46
            self.__try_unbind(key)
 
47
        except:
 
48
            pass
 
49
            
 
50
        keybinder.bind(key, lambda(text): self.__handle_callback(text, callback), "Global binding for %s pressed(%s)" % (target, key))
 
51
        self.logdebug("Bound %s" % key)
 
52
 
 
53
    def __try_unbind(self, key):
 
54
        try:
 
55
            self.logdebug("Unbinding %s" % key)
 
56
            keybinder.unbind(key)
 
57
            self.logdebug("Unbound %s" % key)
 
58
        except:
 
59
            self.logdebug("Did not unbind %s" % key)
 
60
 
 
61
    def delete_thyself(self):
 
62
        for key in (
 
63
            config.get("plugins", "globalkey_previous", "<Super>Z"), 
 
64
            config.get("plugins", "globalkey_pause", "<Super>X"), 
 
65
            config.get("plugins", "globalkey_play", "<Super>C"), 
 
66
            config.get("plugins", "globalkey_stop", "<Super>V"), 
 
67
            config.get("plugins", "globalkey_next", "<Super>B")
 
68
            ):
 
69
            
 
70
            self.__try_unbind(key)
 
71
            
 
72
        GenericPlugin.delete_thyself(self)
 
73
        
 
74
    @staticmethod   
 
75
    def on_configure():
 
76
        GlobalKeysDialog()
 
77
        
 
78
    def __on_config_changed(self, dispatcher, section, option, value):
 
79
        if section == "plugins" and option.find("globalkey_") == 0 and option.find("_last") == -1:
 
80
            self.__try_unbind(config.get(section, option + "_last", value))            
 
81
            self.__bind(config.get(section, option, value), option, self.func[option])
 
82
            config.set(section, option + "_last", value)
 
83
        
 
84
class GlobalKeysDialog(HelperConfigureDialog):
 
85
    def __init__(self):
 
86
        HelperConfigureDialog.__init__(self, "Global Keys")
 
87
        self.add(self.make_lentry("Previous", "plugins", "globalkey_previous", "<Super>Z"))
 
88
        self.add(self.make_lentry("Pause", "plugins", "globalkey_pause", "<Super>X"))
 
89
        self.add(self.make_lentry("Play", "plugins", "globalkey_play", "<Super>C"))
 
90
        self.add(self.make_lentry("Stop", "plugins", "globalkey_stop", "<Super>V"))
 
91
        self.add(self.make_lentry("Next", "plugins", "globalkey_next", "<Super>B"))
 
92
        self.show_all()
 
93