3 # This file is part of jack_mixer
5 # Copyright (C) 2006 Nedko Arnaudov <nedko@arnaudov.name>
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
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.
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.
26 print "Cannot load Python bindings for GConf, your preferences will not be preserved across jack_mixer invocations"
29 def lookup_scale(scales
, scale_id
):
31 if scale_id
== scale
.scale_id
:
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
43 self
.gconf_client
= gconf
.client_get_default()
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]
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]
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'
62 self
.use_custom_widgets
= self
.gconf_client
.get_bool(
63 '/apps/jack_mixer/use_custom_widgets')
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
)
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
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)
87 def set_default_meter_scale(self
, scale
, from_gconf
=False):
89 if gconf
and not from_gconf
:
90 self
.gconf_client
.set_string("/apps/jack_mixer/default_meter_scale", scale
.scale_id
)
92 self
.default_meter_scale
= scale
93 self
.emit("default-meter-scale-changed", self
.default_meter_scale
)
95 print "Ignoring GConf default_meter_scale setting, because \"%s\" scale is not known" % scale_id
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)
103 def set_default_slider_scale(self
, scale
, from_gconf
=False):
105 if gconf
and not from_gconf
:
106 self
.gconf_client
.set_string("/apps/jack_mixer/default_slider_scale", scale
.scale_id
)
108 self
.default_slider_scale
= scale
109 self
.emit("default-slider-scale-changed", self
.default_slider_scale
)
111 print "Ignoring GConf default_slider_scale setting, because \"%s\" scale is not known" % scale_id
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
)
117 self
.vumeter_color
= color
118 self
.emit('vumeter-color-changed', self
.vumeter_color
)
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)
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
)
128 self
.vumeter_color_scheme
= color_scheme
129 self
.emit('vumeter-color-scheme-changed', self
.vumeter_color_scheme
)
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)
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
)
139 self
.use_custom_widgets
= use_custom
140 self
.emit('use-custom-widgets-changed', self
.use_custom_widgets
)
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)
146 def get_default_meter_scale(self
):
147 return self
.default_meter_scale
149 def get_default_slider_scale(self
):
150 return self
.default_slider_scale
152 def get_vumeter_color(self
):
153 return self
.vumeter_color
155 def get_vumeter_color_scheme(self
):
156 return self
.vumeter_color_scheme
158 def get_use_custom_widgets(self
):
159 return self
.use_custom_widgets
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])