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.
23 from gi
.repository
import GObject
24 from serialization
import SerializedObject
28 from xdg
import BaseDirectory
33 log
= logging
.getLogger(__name__
)
36 def lookup_scale(scales
, scale_id
):
38 if scale_id
== scale
.scale_id
:
43 class Factory(GObject
.GObject
, SerializedObject
):
45 def __init__(self
, topwindow
, meter_scales
, slider_scales
):
46 self
.midi_behavior_modes
= [ 'Jump To Value', 'Pick Up' ]
47 GObject
.GObject
.__init
__(self
)
48 self
.topwindow
= topwindow
49 self
.meter_scales
= meter_scales
50 self
.slider_scales
= slider_scales
51 self
.set_default_preferences()
53 self
.config
= configparser
.ConfigParser()
54 self
.path
= os
.path
.join(BaseDirectory
.save_config_path('jack_mixer'), 'preferences.ini')
55 if os
.path
.isfile(self
.path
):
56 self
.read_preferences()
58 self
.write_preferences()
60 log
.warning("Cannot load PyXDG. Your preferences will not be preserved across "
61 "jack_mixer invocations")
63 def set_default_preferences(self
):
64 self
.default_meter_scale
= self
.meter_scales
[0]
65 self
.default_slider_scale
= self
.slider_scales
[0]
66 self
.vumeter_color
= '#ccb300'
67 self
.vumeter_color_scheme
= 'default'
68 self
.use_custom_widgets
= False
69 self
.midi_behavior_mode
= 0
71 def read_preferences(self
):
72 self
.config
.read(self
.path
)
73 scale_id
= self
.config
['Preferences']['default_meter_scale']
74 self
.default_meter_scale
= lookup_scale(self
.meter_scales
, scale_id
)
75 if not self
.default_meter_scale
:
76 self
.default_meter_scale
= self
.meter_scales
[0]
78 scale_id
= self
.config
['Preferences']['default_slider_scale']
79 self
.default_slider_scale
= lookup_scale(self
.slider_scales
, scale_id
)
80 if not self
.default_slider_scale
:
81 self
.default_slider_scale
= slider_scales
[0]
83 self
.vumeter_color_scheme
= self
.config
['Preferences']['vumeter_color_scheme']
84 if not self
.vumeter_color_scheme
:
85 self
.vumeter_color_scheme
= 'default'
87 self
.vumeter_color
= self
.config
['Preferences']['vumeter_color']
88 if not self
.vumeter_color
:
89 self
.vumeter_color
= '#ccb300'
91 self
.use_custom_widgets
= self
.config
["Preferences"]["use_custom_widgets"] == 'True'
95 mode
= int(self
.config
["Preferences"]["midi_behavior_mode"])
98 self
.midi_behavior_mode
= mode
100 def write_preferences(self
):
101 self
.config
['Preferences'] = {}
102 self
.config
['Preferences']['default_meter_scale'] = self
.default_meter_scale
.scale_id
103 self
.config
['Preferences']['default_slider_scale'] = self
.default_slider_scale
.scale_id
104 self
.config
['Preferences']['vumeter_color_scheme'] = self
.vumeter_color_scheme
105 self
.config
['Preferences']['vumeter_color'] = self
.vumeter_color
106 self
.config
['Preferences']['use_custom_widgets'] = str(self
.use_custom_widgets
)
107 self
.config
['Preferences']['midi_behavior_mode'] = str(self
.midi_behavior_mode
)
108 with
open(self
.path
, 'w') as configfile
:
109 self
.config
.write(configfile
)
112 def set_default_meter_scale(self
, scale
):
114 self
.default_meter_scale
= scale
116 self
.write_preferences()
117 self
.emit("default-meter-scale-changed", self
.default_meter_scale
)
119 log
.warning('Ignoring default_meter_scale setting, because "%s" scale is not known.',
122 def set_default_slider_scale(self
, scale
):
124 self
.default_slider_scale
= scale
126 self
.write_preferences()
127 self
.emit("default-slider-scale-changed", self
.default_slider_scale
)
129 log
.warning('Ignoring default_slider_scale setting, because "%s" scale is not known.',
132 def set_vumeter_color(self
, color
):
133 self
.vumeter_color
= color
135 self
.write_preferences()
136 self
.emit('vumeter-color-changed', self
.vumeter_color
)
138 def set_vumeter_color_scheme(self
, color_scheme
):
139 self
.vumeter_color_scheme
= color_scheme
141 self
.write_preferences()
142 self
.emit('vumeter-color-scheme-changed', self
.vumeter_color_scheme
)
144 def set_use_custom_widgets(self
, use_custom
):
145 self
.use_custom_widgets
= use_custom
147 self
.write_preferences()
148 self
.emit('use-custom-widgets-changed', self
.use_custom_widgets
)
150 def set_midi_behavior_mode(self
, mode
):
151 self
.midi_behavior_mode
= int(mode
)
152 self
.emit_midi_behavior_mode()
154 def emit_midi_behavior_mode(self
):
155 self
.emit("midi-behavior-mode-changed", self
.midi_behavior_mode
)
157 def get_default_meter_scale(self
):
158 return self
.default_meter_scale
160 def get_default_slider_scale(self
):
161 return self
.default_slider_scale
163 def get_vumeter_color(self
):
164 return self
.vumeter_color
166 def get_vumeter_color_scheme(self
):
167 return self
.vumeter_color_scheme
169 def get_use_custom_widgets(self
):
170 return self
.use_custom_widgets
172 def get_midi_behavior_mode(self
):
173 return self
.midi_behavior_mode
176 def serialization_name(cls
):
179 def serialize(self
, object_backend
):
180 object_backend
.add_property("default_meter_scale",
181 self
.get_default_meter_scale().scale_id
)
182 object_backend
.add_property("default_slider_scale",
183 self
.get_default_slider_scale().scale_id
)
184 object_backend
.add_property("vumeter_color_scheme",
185 self
.get_vumeter_color_scheme())
186 object_backend
.add_property("vumeter_color",
187 self
.get_vumeter_color())
188 object_backend
.add_property("use_custom_widgets",
189 str(self
.get_use_custom_widgets()))
190 object_backend
.add_property("midi_behavior_mode",
191 str(self
.get_midi_behavior_mode()))
193 def unserialize_property(self
, name
, value
):
194 if name
== "default_meter_scale":
195 self
.set_default_meter_scale(lookup_scale(self
.meter_scales
, value
))
197 if name
== "default_slider_scale":
198 self
.set_default_slider_scale(lookup_scale(self
.slider_scales
, value
))
200 if name
== "vumeter_color_scheme":
201 self
.set_vumeter_color_scheme(value
)
203 if name
== "vumeter_color":
204 self
.set_vumeter_color(value
)
206 if name
== "use_custom_widgets":
207 self
.set_use_custom_widgets(value
== 'True')
209 if name
== "midi_behavior_mode":
210 self
.set_midi_behavior_mode(int(value
))
215 GObject
.signal_new("default-meter-scale-changed", Factory
,
216 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,
217 None, [GObject
.TYPE_PYOBJECT
])
218 GObject
.signal_new("default-slider-scale-changed", Factory
,
219 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,
220 None, [GObject
.TYPE_PYOBJECT
])
221 GObject
.signal_new('vumeter-color-changed', Factory
,
222 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,
224 GObject
.signal_new('vumeter-color-scheme-changed', Factory
,
225 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,
227 GObject
.signal_new('use-custom-widgets-changed', Factory
,
228 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,
230 GObject
.signal_new('midi-behavior-mode-changed', Factory
,
231 GObject
.SignalFlags
.RUN_FIRST | GObject
.SignalFlags
.ACTION
,