]> git.0d.be Git - jack_mixer.git/blob - gui.py
python2 -> python3 initial changes
[jack_mixer.git] / gui.py
1 # This file is part of jack_mixer
2 #
3 # Copyright (C) 2006 Nedko Arnaudov <nedko@arnaudov.name>
4 #
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
8 #
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.
13 #
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.
17
18 import gi
19 gi.require_version('GConf', '2.0')
20 from gi.repository import GObject
21
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
27
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
33
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
40
41         if GConf:
42             self.gconf_client = GConf.Client.get_default()
43
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]
48
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]
53
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'
60
61             self.use_custom_widgets = self.gconf_client.get_bool(
62                             '/apps/jack_mixer/use_custom_widgets')
63
64             self.minimize_to_tray = self.gconf_client.get_bool(
65                             '/apps/jack_mixer/minimize_to_tray')
66
67             self.gconf_client.add_dir("/apps/jack_mixer", GConf.ClientPreloadType.PRELOAD_NONE)
68             self.gconf_client.notify_add("/apps/jack_mixer/default_meter_scale", self.on_gconf_default_meter_scale_changed)
69             self.gconf_client.notify_add("/apps/jack_mixer/default_slider_scale", self.on_gconf_default_slider_scale_changed)
70             self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color', self.on_gconf_vumeter_color_change)
71             self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color_scheme', self.on_gconf_vumeter_color_scheme_change)
72             self.gconf_client.notify_add('/apps/jack_mixer/use_custom_widgets', self.on_gconf_use_custom_widgets_change)
73             self.gconf_client.notify_add('/apps/jack_mixer/minimize_to_tray', self.on_gconf_minimize_to_tray_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             self.minimize_to_tray = True
81
82     def on_gconf_default_meter_scale_changed(self, client, connection_id, entry):
83         #print "GConf default_meter_scale changed"
84         scale_id = entry.get_value().get_string()
85         scale = lookup_scale(self.meter_scales, scale_id)
86         self.set_default_meter_scale(scale, from_gconf=True)
87
88     def set_default_meter_scale(self, scale, from_gconf=False):
89         if scale:
90             if GConf and not from_gconf:
91                 self.gconf_client.set_string("/apps/jack_mixer/default_meter_scale", scale.scale_id)
92             else:
93                 self.default_meter_scale = scale
94                 self.emit("default-meter-scale-changed", self.default_meter_scale)
95         else:
96             print("Ignoring GConf default_meter_scale setting, because \"%s\" scale is not known" % scale_id)
97
98     def on_gconf_default_slider_scale_changed(self, client, connection_id, entry):
99         #print "GConf default_slider_scale changed"
100         scale_id = entry.get_value().get_string()
101         scale = lookup_scale(self.slider_scales, scale_id)
102         self.set_default_slider_scale(scale, from_gconf=True)
103
104     def set_default_slider_scale(self, scale, from_gconf=False):
105         if scale:
106             if GConf and not from_gconf:
107                 self.gconf_client.set_string("/apps/jack_mixer/default_slider_scale", scale.scale_id)
108             else:
109                 self.default_slider_scale = scale
110                 self.emit("default-slider-scale-changed", self.default_slider_scale)
111         else:
112             print("Ignoring GConf default_slider_scale setting, because \"%s\" scale is not known" % scale_id)
113
114     def set_vumeter_color(self, color, from_gconf=False):
115         if GConf and not from_gconf:
116             self.gconf_client.set_string('/apps/jack_mixer/vumeter_color', color)
117         else:
118             self.vumeter_color = color
119             self.emit('vumeter-color-changed', self.vumeter_color)
120
121     def on_gconf_vumeter_color_change(self, client, connection_id, entry):
122         color = entry.get_value().get_string()
123         self.set_vumeter_color(color, from_gconf=True)
124
125     def set_vumeter_color_scheme(self, color_scheme, from_gconf=False):
126         if GConf and not from_gconf:
127             self.gconf_client.set_string('/apps/jack_mixer/vumeter_color_scheme', color_scheme)
128         else:
129             self.vumeter_color_scheme = color_scheme
130             self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
131
132     def on_gconf_vumeter_color_scheme_change(self, client, connection_id, entry):
133         color_scheme = entry.get_value().get_string()
134         self.set_vumeter_color_scheme(color_scheme, from_gconf=True)
135
136     def set_use_custom_widgets(self, use_custom, from_gconf=False):
137         if GConf and not from_gconf:
138             self.gconf_client.set_bool('/apps/jack_mixer/use_custom_widgets', use_custom)
139         else:
140             self.use_custom_widgets = use_custom
141             self.emit('use-custom-widgets-changed', self.use_custom_widgets)
142
143     def on_gconf_use_custom_widgets_change(self, client, connection_id, entry):
144         use_custom = entry.get_value().get_bool()
145         self.set_use_custom_widgets(use_custom, from_gconf=True)
146
147     def set_minimize_to_tray(self, minimize_to_tray, from_gconf=False):
148         if GConf and not from_gconf:
149             self.gconf_client.set_bool('/apps/jack_mixer/minimize_to_tray', minimize_to_tray)
150         else:
151             self.minimize_to_tray = minimize_to_tray
152             self.emit('minimize-to-tray-changed', self.minimize_to_tray)
153
154     def on_gconf_minimize_to_tray_change(self, client, connection_id, entry):
155         minimize_to_tray = entry.get_value().get_bool()
156         self.set_minimize_to_tray(minimize_to_tray, from_gconf=True)
157
158     def get_default_meter_scale(self):
159         return self.default_meter_scale
160
161     def get_default_slider_scale(self):
162         return self.default_slider_scale
163
164     def get_vumeter_color(self):
165         return self.vumeter_color
166
167     def get_vumeter_color_scheme(self):
168         return self.vumeter_color_scheme
169
170     def get_use_custom_widgets(self):
171         return self.use_custom_widgets
172
173     def get_minimize_to_tray(self):
174         return self.minimize_to_tray
175
176 GObject.signal_new("default-meter-scale-changed", Factory,
177                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
178                 None, [GObject.TYPE_PYOBJECT])
179 GObject.signal_new("default-slider-scale-changed", Factory,
180                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
181                 None, [GObject.TYPE_PYOBJECT])
182 GObject.signal_new('vumeter-color-changed', Factory,
183                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
184                 None, [str])
185 GObject.signal_new('vumeter-color-scheme-changed', Factory,
186                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
187                 None, [str])
188 GObject.signal_new('use-custom-widgets-changed', Factory,
189                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
190                 None, [bool])
191 GObject.signal_new('minimize-to-tray-changed', Factory,
192                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
193                 None, [bool])