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