]> git.0d.be Git - jack_mixer.git/blob - gui.py
build: rename INCLUDES to match newer autotools
[jack_mixer.git] / gui.py
1 # This file is part of jack_mixer
2 #
3 # Copyright (C) 2006 Nedko Arnaudov <nedko@arnaudov.name>
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; version 2 of the License
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17
18 import gobject
19
20 try:
21     import gconf
22 except:
23     print "Cannot load Python bindings for GConf, your preferences will not be preserved across jack_mixer invocations"
24     gconf = None
25
26 def lookup_scale(scales, scale_id):
27     for scale in scales:
28         if scale_id == scale.scale_id:
29             return scale
30     return None
31
32 class Factory(gobject.GObject):
33     def __init__(self, topwindow, meter_scales, slider_scales):
34         gobject.GObject.__init__(self)
35         self.topwindow = topwindow
36         self.meter_scales = meter_scales
37         self.slider_scales = slider_scales
38
39         if gconf:
40             self.gconf_client = gconf.client_get_default()
41
42             scale_id = self.gconf_client.get_string("/apps/jack_mixer/default_meter_scale")
43             self.default_meter_scale = lookup_scale(meter_scales, scale_id)
44             if not self.default_meter_scale:
45                 self.default_meter_scale = meter_scales[0]
46
47             scale_id = self.gconf_client.get_string("/apps/jack_mixer/default_slider_scale")
48             self.default_slider_scale = lookup_scale(slider_scales, scale_id)
49             if not self.default_slider_scale:
50                 self.default_slider_scale = slider_scales[0]
51
52             self.vumeter_color_scheme = self.gconf_client.get_string(
53                             '/apps/jack_mixer/vumeter_color_scheme')
54             self.vumeter_color = self.gconf_client.get_string(
55                             '/apps/jack_mixer/vumeter_color')
56             if not self.vumeter_color:
57                 self.vumeter_color = '#ccb300'
58
59             self.use_custom_widgets = self.gconf_client.get_bool(
60                             '/apps/jack_mixer/use_custom_widgets')
61
62             self.minimize_to_tray = self.gconf_client.get_bool(
63                             '/apps/jack_mixer/minimize_to_tray')
64
65             self.gconf_client.add_dir("/apps/jack_mixer", gconf.CLIENT_PRELOAD_NONE)
66             self.gconf_client.notify_add("/apps/jack_mixer/default_meter_scale", self.on_gconf_default_meter_scale_changed)
67             self.gconf_client.notify_add("/apps/jack_mixer/default_slider_scale", self.on_gconf_default_slider_scale_changed)
68             self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color',
69                             self.on_gconf_vumeter_color_change)
70             self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color_scheme',
71                             self.on_gconf_vumeter_color_scheme_change)
72             self.gconf_client.notify_add('/apps/jack_mixer/use_custom_widgets',
73                             self.on_gconf_use_custom_widgets_change)
74             self.gconf_client.notify_add('/apps/jack_mixer/minimize_to_tray',
75                             self.on_gconf_minimize_to_tray_change)
76         else:
77             self.default_meter_scale = meter_scales[0]
78             self.default_slider_scale = slider_scales[0]
79             self.vumeter_color = '#ccb300'
80             self.vumeter_color_scheme = 'default'
81             self.use_custom_widgets = False
82             self.minimize_to_tray = True
83
84     def on_gconf_default_meter_scale_changed(self, client, connection_id, entry, args):
85         #print "GConf default_meter_scale changed"
86         scale_id = entry.get_value().get_string()
87         scale = lookup_scale(self.meter_scales, scale_id)
88         self.set_default_meter_scale(scale, from_gconf=True)
89
90     def set_default_meter_scale(self, scale, from_gconf=False):
91         if scale:
92             if gconf and not from_gconf:
93                 self.gconf_client.set_string("/apps/jack_mixer/default_meter_scale", scale.scale_id)
94             else:
95                 self.default_meter_scale = scale
96                 self.emit("default-meter-scale-changed", self.default_meter_scale)
97         else:
98             print "Ignoring GConf default_meter_scale setting, because \"%s\" scale is not known" % scale_id
99
100     def on_gconf_default_slider_scale_changed(self, client, connection_id, entry, args):
101         #print "GConf default_slider_scale changed"
102         scale_id = entry.get_value().get_string()
103         scale = lookup_scale(self.slider_scales, scale_id)
104         self.set_default_slider_scale(scale, from_gconf=True)
105
106     def set_default_slider_scale(self, scale, from_gconf=False):
107         if scale:
108             if gconf and not from_gconf:
109                 self.gconf_client.set_string("/apps/jack_mixer/default_slider_scale", scale.scale_id)
110             else:
111                 self.default_slider_scale = scale
112                 self.emit("default-slider-scale-changed", self.default_slider_scale)
113         else:
114             print "Ignoring GConf default_slider_scale setting, because \"%s\" scale is not known" % scale_id
115
116     def set_vumeter_color(self, color, from_gconf=False):
117         if gconf and not from_gconf:
118             self.gconf_client.set_string('/apps/jack_mixer/vumeter_color', color)
119         else:
120             self.vumeter_color = color
121             self.emit('vumeter-color-changed', self.vumeter_color)
122
123     def on_gconf_vumeter_color_change(self, client, connection_id, entry, args):
124         color = entry.get_value().get_string()
125         self.set_vumeter_color(color, from_gconf=True)
126
127     def set_vumeter_color_scheme(self, color_scheme, from_gconf=False):
128         if gconf and not from_gconf:
129             self.gconf_client.set_string('/apps/jack_mixer/vumeter_color_scheme', color_scheme)
130         else:
131             self.vumeter_color_scheme = color_scheme
132             self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
133
134     def on_gconf_vumeter_color_scheme_change(self, client, connection_id, entry, args):
135         color_scheme = entry.get_value().get_string()
136         self.set_vumeter_color_scheme(color_scheme, from_gconf=True)
137
138     def set_use_custom_widgets(self, use_custom, from_gconf=False):
139         if gconf and not from_gconf:
140             self.gconf_client.set_bool('/apps/jack_mixer/use_custom_widgets', use_custom)
141         else:
142             self.use_custom_widgets = use_custom
143             self.emit('use-custom-widgets-changed', self.use_custom_widgets)
144
145     def on_gconf_use_custom_widgets_change(self, client, connection_id, entry, args):
146         use_custom = entry.get_value().get_bool()
147         self.set_use_custom_widgets(use_custom, from_gconf=True)
148
149     def set_minimize_to_tray(self, minimize_to_tray, from_gconf=False):
150         if gconf and not from_gconf:
151             self.gconf_client.set_bool('/apps/jack_mixer/minimize_to_tray', minimize_to_tray)
152         else:
153             self.minimize_to_tray = minimize_to_tray
154             self.emit('minimize-to-tray-changed', self.minimize_to_tray)
155
156     def on_gconf_minimize_to_tray_change(self, client, connection_id, entry, args):
157         minimize_to_tray = entry.get_value().get_bool()
158         self.set_minimize_to_tray(minimize_to_tray, from_gconf=True)
159
160     def get_default_meter_scale(self):
161         return self.default_meter_scale
162
163     def get_default_slider_scale(self):
164         return self.default_slider_scale
165
166     def get_vumeter_color(self):
167         return self.vumeter_color
168
169     def get_vumeter_color_scheme(self):
170         return self.vumeter_color_scheme
171
172     def get_use_custom_widgets(self):
173         return self.use_custom_widgets
174
175     def get_minimize_to_tray(self):
176         return self.minimize_to_tray
177
178 gobject.signal_new("default-meter-scale-changed", Factory,
179                 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
180                 gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
181 gobject.signal_new("default-slider-scale-changed", Factory,
182                 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
183                 gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
184 gobject.signal_new('vumeter-color-changed', Factory,
185                 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
186                 gobject.TYPE_NONE, [str])
187 gobject.signal_new('vumeter-color-scheme-changed', Factory,
188                 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
189                 gobject.TYPE_NONE, [str])
190 gobject.signal_new('use-custom-widgets-changed', Factory,
191                 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
192                 gobject.TYPE_NONE, [bool])
193 gobject.signal_new('minimize-to-tray-changed', Factory,
194                 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
195                 gobject.TYPE_NONE, [bool])