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.
19 gi
.require_version('GConf', '2.0')
20 from gi
.repository
import GObject
23 from gi
.repository
import GConf
25 print("Cannot load Python bindings for GConf, your preferences will not be preserved across jack_mixer invocations")
28 def lookup_scale(scales
, scale_id
):
30 if scale_id
== scale
.scale_id
:
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
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
)
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):
85 if GConf
and not from_gconf
:
86 self
.gconf_client
.set_string("/apps/jack_mixer/default_meter_scale", scale
.scale_id
)
88 self
.default_meter_scale
= scale
89 self
.emit("default-meter-scale-changed", self
.default_meter_scale
)
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):
101 if GConf
and not from_gconf
:
102 self
.gconf_client
.set_string("/apps/jack_mixer/default_slider_scale", scale
.scale_id
)
104 self
.default_slider_scale
= scale
105 self
.emit("default-slider-scale-changed", self
.default_slider_scale
)
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
)
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
)
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
)
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
,
167 GObject
.signal_new('vumeter-color-scheme-changed', Factory
,
168 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,
170 GObject
.signal_new('use-custom-widgets-changed', Factory
,
171 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,