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 from gi.repository import GObject
22 from serialization import SerializedObject
26 from xdg import BaseDirectory
30 def lookup_scale(scales, scale_id):
32 if scale_id == scale.scale_id:
36 class Factory(GObject.GObject, SerializedObject):
38 def __init__(self, topwindow, meter_scales, slider_scales):
39 self.midi_behavior_modes = [ 'Jump To Value', 'Pick Up' ]
40 GObject.GObject.__init__(self)
41 self.topwindow = topwindow
42 self.meter_scales = meter_scales
43 self.slider_scales = slider_scales
44 self.set_default_preferences()
46 self.config = configparser.ConfigParser()
47 self.path = os.path.join(BaseDirectory.save_config_path('jack_mixer'), 'preferences.ini')
48 if os.path.isfile(self.path):
49 self.read_preferences()
51 self.write_preferences()
53 print("Cannot load PyXDG. Your preferences will not be preserved across jack_mixer invocations")
55 def set_default_preferences(self):
56 self.default_meter_scale = self.meter_scales[0]
57 self.default_slider_scale = self.slider_scales[0]
58 self.vumeter_color = '#ccb300'
59 self.vumeter_color_scheme = 'default'
60 self.use_custom_widgets = False
61 self.midi_behavior_mode = 0
63 def read_preferences(self):
64 self.config.read(self.path)
65 scale_id = self.config['Preferences']['default_meter_scale']
66 self.default_meter_scale = lookup_scale(self.meter_scales, scale_id)
67 if not self.default_meter_scale:
68 self.default_meter_scale = meter_scales[0]
70 scale_id = self.config['Preferences']['default_slider_scale']
71 self.default_slider_scale = lookup_scale(self.slider_scales, scale_id)
72 if not self.default_slider_scale:
73 self.default_slider_scale = slider_scales[0]
75 self.vumeter_color_scheme = self.config['Preferences']['vumeter_color_scheme']
76 if not self.vumeter_color_scheme:
77 self.vumeter_color_scheme = 'default'
79 self.vumeter_color = self.config['Preferences']['vumeter_color']
80 if not self.vumeter_color:
81 self.vumeter_color = '#ccb300'
83 self.use_custom_widgets = self.config["Preferences"]["use_custom_widgets"] == 'True'
85 def write_preferences(self):
86 self.config['Preferences'] = {}
87 self.config['Preferences']['default_meter_scale'] = self.default_meter_scale.scale_id
88 self.config['Preferences']['default_slider_scale'] = self.default_slider_scale.scale_id
89 self.config['Preferences']['vumeter_color_scheme'] = self.vumeter_color_scheme
90 self.config['Preferences']['vumeter_color'] = self.vumeter_color
91 self.config['Preferences']['use_custom_widgets'] = str(self.use_custom_widgets)
92 with open(self.path, 'w') as configfile:
93 self.config.write(configfile)
95 def set_default_meter_scale(self, scale):
97 self.default_meter_scale = scale
99 self.write_preferences()
100 self.emit("default-meter-scale-changed", self.default_meter_scale)
102 print("Ignoring default_meter_scale setting, because \"%s\" scale is not known" % scale_id)
104 def set_default_slider_scale(self, scale):
106 self.default_slider_scale = scale
108 self.write_preferences()
109 self.emit("default-slider-scale-changed", self.default_slider_scale)
111 print("Ignoring default_slider_scale setting, because \"%s\" scale is not known" % scale_id)
113 def set_vumeter_color(self, color):
114 self.vumeter_color = color
116 self.write_preferences()
117 self.emit('vumeter-color-changed', self.vumeter_color)
119 def set_vumeter_color_scheme(self, color_scheme):
120 self.vumeter_color_scheme = color_scheme
122 self.write_preferences()
123 self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
125 def set_use_custom_widgets(self, use_custom):
126 self.use_custom_widgets = use_custom
128 self.write_preferences()
129 self.emit('use-custom-widgets-changed', self.use_custom_widgets)
131 def set_midi_behavior_mode(self, mode):
132 self.midi_behavior_mode = mode
133 self.emit("midi-behavior-mode-changed", self.midi_behavior_mode)
135 def get_default_meter_scale(self):
136 return self.default_meter_scale
138 def get_default_slider_scale(self):
139 return self.default_slider_scale
141 def get_vumeter_color(self):
142 return self.vumeter_color
144 def get_vumeter_color_scheme(self):
145 return self.vumeter_color_scheme
147 def get_use_custom_widgets(self):
148 return self.use_custom_widgets
150 def get_midi_behavior_mode(self):
151 return self.midi_behavior_mode
154 def serialization_name(cls):
157 def serialize(self, object_backend):
158 object_backend.add_property("midi_behavior_mode",
159 self.midi_behavior_modes[self.get_midi_behavior_mode()])
161 def unserialize_property(self, name, value):
162 if name == "midi_behavior_mode":
163 self.set_midi_behavior_mode(self.midi_behavior_modes.index(value))
167 GObject.signal_new("default-meter-scale-changed", Factory,
168 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
169 None, [GObject.TYPE_PYOBJECT])
170 GObject.signal_new("default-slider-scale-changed", Factory,
171 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
172 None, [GObject.TYPE_PYOBJECT])
173 GObject.signal_new('vumeter-color-changed', Factory,
174 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
176 GObject.signal_new('vumeter-color-scheme-changed', Factory,
177 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
179 GObject.signal_new('use-custom-widgets-changed', Factory,
180 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
182 GObject.signal_new('midi-behavior-mode-changed', Factory,
183 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,