Add jack_mix_box, a minimalistic jack mixer (no UI, controlled by MIDI)
[jack_mixer.git] / gui.py
blobee82920ce62e139dce41bb3282fe276e4a8ad447
1 # This file is part of jack_mixer
3 # Copyright (C) 2006 Nedko Arnaudov <nedko@arnaudov.name>
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
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.
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.
18 import gobject
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
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
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
39 if gconf:
40 self.gconf_client = gconf.client_get_default()
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]
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]
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'
59 self.use_custom_widgets = self.gconf_client.get_bool(
60 '/apps/jack_mixer/use_custom_widgets')
62 self.gconf_client.add_dir("/apps/jack_mixer", gconf.CLIENT_PRELOAD_NONE)
63 self.gconf_client.notify_add("/apps/jack_mixer/default_meter_scale", self.on_gconf_default_meter_scale_changed)
64 self.gconf_client.notify_add("/apps/jack_mixer/default_slider_scale", self.on_gconf_default_slider_scale_changed)
65 self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color',
66 self.on_gconf_vumeter_color_change)
67 self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color_scheme',
68 self.on_gconf_vumeter_color_scheme_change)
69 self.gconf_client.notify_add('/apps/jack_mixer/use_custom_widgets',
70 self.on_gconf_use_custom_widgets_change)
71 else:
72 self.default_meter_scale = meter_scales[0]
73 self.default_slider_scale = slider_scales[0]
74 self.vumeter_color = '#ccb300'
75 self.vumeter_color_scheme = 'default'
76 self.use_custom_widgets = False
78 def on_gconf_default_meter_scale_changed(self, client, connection_id, entry, args):
79 #print "GConf default_meter_scale changed"
80 scale_id = entry.get_value().get_string()
81 scale = lookup_scale(self.meter_scales, scale_id)
82 self.set_default_meter_scale(scale, from_gconf=True)
84 def set_default_meter_scale(self, scale, from_gconf=False):
85 if scale:
86 if gconf and not from_gconf:
87 self.gconf_client.set_string("/apps/jack_mixer/default_meter_scale", scale.scale_id)
88 else:
89 self.default_meter_scale = scale
90 self.emit("default-meter-scale-changed", self.default_meter_scale)
91 else:
92 print "Ignoring GConf default_meter_scale setting, because \"%s\" scale is not known" % scale_id
94 def on_gconf_default_slider_scale_changed(self, client, connection_id, entry, args):
95 #print "GConf default_slider_scale changed"
96 scale_id = entry.get_value().get_string()
97 scale = lookup_scale(self.slider_scales, scale_id)
98 self.set_default_slider_scale(scale, from_gconf=True)
100 def set_default_slider_scale(self, scale, from_gconf=False):
101 if scale:
102 if gconf and not from_gconf:
103 self.gconf_client.set_string("/apps/jack_mixer/default_slider_scale", scale.scale_id)
104 else:
105 self.default_slider_scale = scale
106 self.emit("default-slider-scale-changed", self.default_slider_scale)
107 else:
108 print "Ignoring GConf default_slider_scale setting, because \"%s\" scale is not known" % scale_id
110 def set_vumeter_color(self, color, from_gconf=False):
111 if gconf and not from_gconf:
112 self.gconf_client.set_string('/apps/jack_mixer/vumeter_color', color)
113 else:
114 self.vumeter_color = color
115 self.emit('vumeter-color-changed', self.vumeter_color)
117 def on_gconf_vumeter_color_change(self, client, connection_id, entry, args):
118 color = entry.get_value().get_string()
119 self.set_vumeter_color(color, from_gconf=True)
121 def set_vumeter_color_scheme(self, color_scheme, from_gconf=False):
122 if gconf and not from_gconf:
123 self.gconf_client.set_string('/apps/jack_mixer/vumeter_color_scheme', color_scheme)
124 else:
125 self.vumeter_color_scheme = color_scheme
126 self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
128 def on_gconf_vumeter_color_scheme_change(self, client, connection_id, entry, args):
129 color_scheme = entry.get_value().get_string()
130 self.set_vumeter_color_scheme(color_scheme, from_gconf=True)
132 def set_use_custom_widgets(self, use_custom, from_gconf=False):
133 if gconf and not from_gconf:
134 self.gconf_client.set_bool('/apps/jack_mixer/use_custom_widgets', use_custom)
135 else:
136 self.use_custom_widgets = use_custom
137 self.emit('use-custom-widgets-changed', self.use_custom_widgets)
139 def on_gconf_use_custom_widgets_change(self, client, connection_id, entry, args):
140 use_custom = entry.get_value().get_bool()
141 self.set_use_custom_widgets(use_custom, from_gconf=True)
143 def get_default_meter_scale(self):
144 return self.default_meter_scale
146 def get_default_slider_scale(self):
147 return self.default_slider_scale
149 def get_vumeter_color(self):
150 return self.vumeter_color
152 def get_vumeter_color_scheme(self):
153 return self.vumeter_color_scheme
155 def get_use_custom_widgets(self):
156 return self.use_custom_widgets
158 gobject.signal_new("default-meter-scale-changed", Factory,
159 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
160 gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
161 gobject.signal_new("default-slider-scale-changed", Factory,
162 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
163 gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
164 gobject.signal_new('vumeter-color-changed', Factory,
165 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
166 gobject.TYPE_NONE, [str])
167 gobject.signal_new('vumeter-color-scheme-changed', Factory,
168 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
169 gobject.TYPE_NONE, [str])
170 gobject.signal_new('use-custom-widgets-changed', Factory,
171 gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
172 gobject.TYPE_NONE, [bool])