release: 12
[jack_mixer.git] / gui.py
blob9b555e1c3cbd9e67b8da478301c1a69ff661902c
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 gi
19 gi.require_version('GConf', '2.0')
20 from gi.repository import GObject
22 try:
23 from gi.repository import GConf
24 except:
25 print("Cannot load Python bindings for GConf, your preferences will not be preserved across jack_mixer invocations")
26 GConf = None
28 def lookup_scale(scales, scale_id):
29 for scale in scales:
30 if scale_id == scale.scale_id:
31 return scale
32 return None
34 class Factory(GObject.GObject):
35 def __init__(self, topwindow, meter_scales, slider_scales):
36 GObject.GObject.__init__(self)
37 self.topwindow = topwindow
38 self.meter_scales = meter_scales
39 self.slider_scales = slider_scales
41 if GConf:
42 self.gconf_client = GConf.Client.get_default()
44 scale_id = self.gconf_client.get_string("/apps/jack_mixer/default_meter_scale")
45 self.default_meter_scale = lookup_scale(meter_scales, scale_id)
46 if not self.default_meter_scale:
47 self.default_meter_scale = meter_scales[0]
49 scale_id = self.gconf_client.get_string("/apps/jack_mixer/default_slider_scale")
50 self.default_slider_scale = lookup_scale(slider_scales, scale_id)
51 if not self.default_slider_scale:
52 self.default_slider_scale = slider_scales[0]
54 self.vumeter_color_scheme = self.gconf_client.get_string(
55 '/apps/jack_mixer/vumeter_color_scheme')
56 self.vumeter_color = self.gconf_client.get_string(
57 '/apps/jack_mixer/vumeter_color')
58 if not self.vumeter_color:
59 self.vumeter_color = '#ccb300'
61 self.use_custom_widgets = self.gconf_client.get_bool(
62 '/apps/jack_mixer/use_custom_widgets')
64 self.gconf_client.add_dir("/apps/jack_mixer", GConf.ClientPreloadType.PRELOAD_NONE)
65 self.gconf_client.notify_add("/apps/jack_mixer/default_meter_scale", self.on_gconf_default_meter_scale_changed)
66 self.gconf_client.notify_add("/apps/jack_mixer/default_slider_scale", self.on_gconf_default_slider_scale_changed)
67 self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color', self.on_gconf_vumeter_color_change)
68 self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color_scheme', self.on_gconf_vumeter_color_scheme_change)
69 self.gconf_client.notify_add('/apps/jack_mixer/use_custom_widgets', self.on_gconf_use_custom_widgets_change)
70 else:
71 self.default_meter_scale = meter_scales[0]
72 self.default_slider_scale = slider_scales[0]
73 self.vumeter_color = '#ccb300'
74 self.vumeter_color_scheme = 'default'
75 self.use_custom_widgets = False
77 def on_gconf_default_meter_scale_changed(self, client, connection_id, entry):
78 #print "GConf default_meter_scale changed"
79 scale_id = entry.get_value().get_string()
80 scale = lookup_scale(self.meter_scales, scale_id)
81 self.set_default_meter_scale(scale, from_gconf=True)
83 def set_default_meter_scale(self, scale, from_gconf=False):
84 if scale:
85 if GConf and not from_gconf:
86 self.gconf_client.set_string("/apps/jack_mixer/default_meter_scale", scale.scale_id)
87 else:
88 self.default_meter_scale = scale
89 self.emit("default-meter-scale-changed", self.default_meter_scale)
90 else:
91 print("Ignoring GConf default_meter_scale setting, because \"%s\" scale is not known" % scale_id)
93 def on_gconf_default_slider_scale_changed(self, client, connection_id, entry):
94 #print "GConf default_slider_scale changed"
95 scale_id = entry.get_value().get_string()
96 scale = lookup_scale(self.slider_scales, scale_id)
97 self.set_default_slider_scale(scale, from_gconf=True)
99 def set_default_slider_scale(self, scale, from_gconf=False):
100 if scale:
101 if GConf and not from_gconf:
102 self.gconf_client.set_string("/apps/jack_mixer/default_slider_scale", scale.scale_id)
103 else:
104 self.default_slider_scale = scale
105 self.emit("default-slider-scale-changed", self.default_slider_scale)
106 else:
107 print("Ignoring GConf default_slider_scale setting, because \"%s\" scale is not known" % scale_id)
109 def set_vumeter_color(self, color, from_gconf=False):
110 if GConf and not from_gconf:
111 self.gconf_client.set_string('/apps/jack_mixer/vumeter_color', color)
112 else:
113 self.vumeter_color = color
114 self.emit('vumeter-color-changed', self.vumeter_color)
116 def on_gconf_vumeter_color_change(self, client, connection_id, entry):
117 color = entry.get_value().get_string()
118 self.set_vumeter_color(color, from_gconf=True)
120 def set_vumeter_color_scheme(self, color_scheme, from_gconf=False):
121 if GConf and not from_gconf:
122 self.gconf_client.set_string('/apps/jack_mixer/vumeter_color_scheme', color_scheme)
123 else:
124 self.vumeter_color_scheme = color_scheme
125 self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
127 def on_gconf_vumeter_color_scheme_change(self, client, connection_id, entry):
128 color_scheme = entry.get_value().get_string()
129 self.set_vumeter_color_scheme(color_scheme, from_gconf=True)
131 def set_use_custom_widgets(self, use_custom, from_gconf=False):
132 if GConf and not from_gconf:
133 self.gconf_client.set_bool('/apps/jack_mixer/use_custom_widgets', use_custom)
134 else:
135 self.use_custom_widgets = use_custom
136 self.emit('use-custom-widgets-changed', self.use_custom_widgets)
138 def on_gconf_use_custom_widgets_change(self, client, connection_id, entry):
139 use_custom = entry.get_value().get_bool()
140 self.set_use_custom_widgets(use_custom, from_gconf=True)
142 def get_default_meter_scale(self):
143 return self.default_meter_scale
145 def get_default_slider_scale(self):
146 return self.default_slider_scale
148 def get_vumeter_color(self):
149 return self.vumeter_color
151 def get_vumeter_color_scheme(self):
152 return self.vumeter_color_scheme
154 def get_use_custom_widgets(self):
155 return self.use_custom_widgets
158 GObject.signal_new("default-meter-scale-changed", Factory,
159 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
160 None, [GObject.TYPE_PYOBJECT])
161 GObject.signal_new("default-slider-scale-changed", Factory,
162 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
163 None, [GObject.TYPE_PYOBJECT])
164 GObject.signal_new('vumeter-color-changed', Factory,
165 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
166 None, [str])
167 GObject.signal_new('vumeter-color-scheme-changed', Factory,
168 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
169 None, [str])
170 GObject.signal_new('use-custom-widgets-changed', Factory,
171 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
172 None, [bool])