~tualatrix/ubuntu-tweak/arb-packaging

« back to all changes in this revision

Viewing changes to ubuntutweak/module/shortcuts.py

  • Committer: Tualatrix Chou
  • Date: 2011-03-15 11:44:46 UTC
  • Revision ID: git-v1:638ab7e8545fbb783e490b588d058cbf9acd75da
Rename the modules to module temporarily

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
# Ubuntu Tweak - PyGTK based desktop configuration tool
 
4
#
 
5
# Copyright (C) 2007-2008 TualatriX <tualatrix@gmail.com>
 
6
#
 
7
# Ubuntu Tweak is free software; you can redistribute it and/or modify
 
8
# it under the terms of the GNU General Public License as published by
 
9
# the Free Software Foundation; either version 2 of the License, or
 
10
# (at your option) any later version.
 
11
#
 
12
# Ubuntu Tweak is distributed in the hope that it will be useful,
 
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
15
# GNU General Public License for more details.
 
16
#
 
17
# You should have received a copy of the GNU General Public License
 
18
# along with Ubuntu Tweak; if not, write to the Free Software Foundation, Inc.,
 
19
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 
20
 
 
21
import pygtk
 
22
pygtk.require("2.0")
 
23
import gtk
 
24
import os
 
25
import gconf
 
26
import gettext
 
27
import gobject
 
28
 
 
29
from ubuntutweak.modules  import TweakModule
 
30
from ubuntutweak.ui import KeyGrabber, KeyModifier, CellRendererButton
 
31
from ubuntutweak.utils import icon
 
32
from compiz import CompizPlugin
 
33
 
 
34
(
 
35
    COLUMN_ID,
 
36
    COLUMN_LOGO,
 
37
    COLUMN_TITLE,
 
38
    COLUMN_ICON,
 
39
    COLUMN_COMMAND,
 
40
    COLUMN_KEY,
 
41
    COLUMN_EDITABLE,
 
42
) = range(7)
 
43
 
 
44
class Shortcuts(TweakModule):
 
45
    __title__  = _("Shortcut Commands")
 
46
    __desc__  = _("By configuring keyboard shortcuts, you can access your favourite applications instantly.\n"
 
47
                  "Enter the command to run the application and choose a shortcut key combination.")
 
48
    __icon__ = 'preferences-desktop-keyboard-shortcuts'
 
49
    __category__ = 'personal'
 
50
    __desktop__ = ['gnome', 'une']
 
51
 
 
52
    def __init__(self):
 
53
        TweakModule.__init__(self)
 
54
 
 
55
        if not CompizPlugin.get_plugin_active('commands'):
 
56
            CompizPlugin.set_plugin_active('commands', True)
 
57
 
 
58
        sw = gtk.ScrolledWindow()
 
59
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
60
        self.add_start(sw)
 
61
 
 
62
        treeview = self.create_treeview()
 
63
        sw.add(treeview)
 
64
    
 
65
    def create_treeview(self):
 
66
        treeview = gtk.TreeView()
 
67
 
 
68
        self.model = self.__create_model()
 
69
 
 
70
        treeview.set_model(self.model)
 
71
 
 
72
        self.__add_columns(treeview)
 
73
 
 
74
        return treeview
 
75
 
 
76
    def __create_model(self):
 
77
        model = gtk.ListStore(
 
78
                    gobject.TYPE_INT,
 
79
                    gtk.gdk.Pixbuf,
 
80
                    gobject.TYPE_STRING,
 
81
                    gtk.gdk.Pixbuf,
 
82
                    gobject.TYPE_STRING,
 
83
                    gobject.TYPE_STRING,
 
84
                    gobject.TYPE_BOOLEAN,
 
85
                )
 
86
 
 
87
        client = gconf.client_get_default()
 
88
        logo = icon.get_from_name('gnome-terminal')
 
89
 
 
90
        for id in range(12):
 
91
            iter = model.append()
 
92
            id = id + 1
 
93
 
 
94
            title = _("Command %d") % id
 
95
            command = client.get_string("/apps/metacity/keybinding_commands/command_%d" % id)
 
96
            key = client.get_string("/apps/metacity/global_keybindings/run_command_%d" % id)
 
97
 
 
98
            if not command:
 
99
                command = _("None")
 
100
 
 
101
            pixbuf = icon.get_from_name(command)
 
102
 
 
103
            if key == "disabled":
 
104
                key = _("disabled")
 
105
 
 
106
            model.set(iter,
 
107
                    COLUMN_ID, id,
 
108
                    COLUMN_LOGO, logo,
 
109
                    COLUMN_TITLE, title,
 
110
                    COLUMN_ICON, pixbuf,
 
111
                    COLUMN_COMMAND, command,
 
112
                    COLUMN_KEY, key,
 
113
                    COLUMN_EDITABLE, True)
 
114
 
 
115
        return model
 
116
 
 
117
    def __add_columns(self, treeview):
 
118
        model = treeview.get_model()
 
119
 
 
120
        column = gtk.TreeViewColumn(_("ID"))
 
121
 
 
122
        renderer = gtk.CellRendererPixbuf()
 
123
        column.pack_start(renderer, False)
 
124
        column.set_attributes(renderer, pixbuf = COLUMN_LOGO)
 
125
 
 
126
        renderer = gtk.CellRendererText()
 
127
        column.pack_start(renderer, True)
 
128
        column.set_attributes(renderer, text = COLUMN_TITLE)
 
129
        treeview.append_column(column)
 
130
 
 
131
        column = gtk.TreeViewColumn(_("Command"))
 
132
 
 
133
        renderer = gtk.CellRendererPixbuf()
 
134
        column.pack_start(renderer, False)
 
135
        column.set_attributes(renderer, pixbuf = COLUMN_ICON)
 
136
 
 
137
        renderer = gtk.CellRendererText()
 
138
        renderer.connect("edited", self.on_cell_edited, model)
 
139
        column.pack_start(renderer, True)
 
140
        column.set_attributes(renderer, text = COLUMN_COMMAND, editable = COLUMN_EDITABLE)
 
141
        treeview.append_column(column)
 
142
 
 
143
        column = gtk.TreeViewColumn(_("Key"))
 
144
 
 
145
        renderer = gtk.CellRendererText()
 
146
        renderer.connect("editing-started", self.on_editing_started)
 
147
        renderer.connect("edited", self.on_cell_edited, model)
 
148
        column.pack_start(renderer, True)
 
149
        column.set_attributes(renderer, text=COLUMN_KEY, editable=COLUMN_EDITABLE)
 
150
        column.set_resizable(True)
 
151
        treeview.append_column(column)
 
152
 
 
153
        renderer = CellRendererButton(_("Clean"))
 
154
        renderer.connect("clicked", self.on_clean_clicked)
 
155
        column.pack_end(renderer, False)
 
156
 
 
157
    def on_clean_clicked(self, cell, path):
 
158
        iter = self.model.get_iter_from_string(path)
 
159
        id = self.model.get_value(iter, COLUMN_ID)
 
160
        self.model.set_value(iter, COLUMN_KEY, _("disabled"))
 
161
        client = gconf.client_get_default()
 
162
        client.set_string("/apps/metacity/global_keybindings/run_command_%d" % id, "disabled")
 
163
 
 
164
    def on_got_key(self, widget, key, mods, cell):
 
165
        new = gtk.accelerator_name (key, mods)
 
166
        for mod in KeyModifier:
 
167
            if "%s_L" % mod in new:
 
168
                new = new.replace ("%s_L" % mod, "<%s>" % mod)
 
169
            if "%s_R" % mod in new:
 
170
                new = new.replace ("%s_R" % mod, "<%s>" % mod)
 
171
 
 
172
        widget.destroy()
 
173
 
 
174
        client = gconf.client_get_default()
 
175
        column = cell.get_data("id")
 
176
        iter = self.model.get_iter_from_string(cell.get_data("path_string"))
 
177
 
 
178
        id = self.model.get_value(iter, COLUMN_ID)
 
179
 
 
180
        client.set_string("/apps/metacity/global_keybindings/run_command_%d" % id, new)
 
181
        self.model.set_value(iter, COLUMN_KEY, new)
 
182
 
 
183
    def on_editing_started(self, cell, editable, path):
 
184
        grabber = KeyGrabber(self.get_toplevel(), label = "Grab key combination")
 
185
        cell.set_data("path_string", path)
 
186
        grabber.hide()
 
187
        grabber.set_no_show_all(True)
 
188
        grabber.connect('changed', self.on_got_key, cell)
 
189
        grabber.begin_key_grab(None)
 
190
 
 
191
    def on_cell_edited(self, cell, path_string, new_text, model):
 
192
        iter = model.get_iter_from_string(path_string)
 
193
 
 
194
        client = gconf.client_get_default()
 
195
        column = cell.get_data("id")
 
196
 
 
197
        id = model.get_value(iter, COLUMN_ID)
 
198
        old = model.get_value(iter, COLUMN_COMMAND)
 
199
 
 
200
        if old != new_text:
 
201
            client.set_string("/apps/metacity/keybinding_commands/command_%d" % id, new_text)
 
202
            if new_text:
 
203
                pixbuf = icon.get_from_name(new_text)
 
204
 
 
205
                model.set_value(iter, COLUMN_ICON, pixbuf)
 
206
                model.set_value(iter, COLUMN_COMMAND, new_text)
 
207
            else:
 
208
                model.set_value(iter, COLUMN_ICON, None)
 
209
                model.set_value(iter, COLUMN_COMMAND, _("None"))