]> git.0d.be Git - jack_mixer.git/blob - gui.py
Allow manual setting of MIDI control change numbers (#8)
[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 from gi.repository import GObject
20 import os
21 import configparser
22
23 try:
24     import xdg
25     from xdg import BaseDirectory
26 except:
27     xdg = None
28
29 def lookup_scale(scales, scale_id):
30     for scale in scales:
31         if scale_id == scale.scale_id:
32             return scale
33     return None
34
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
41
42         if xdg:
43             self.config = configparser.ConfigParser()
44             self.path = os.path.join(BaseDirectory.save_config_path('jack_mixer'), 'preferences.ini')
45             if os.path.isfile(self.path):
46                 self.read_preferences()
47             else:
48                 self.set_default_preferences()
49                 self.write_preferences()
50         else:
51             print("Cannot load PyXDG. Your preferences will not be preserved across jack_mixer invocations")
52             self.set_default_preferences()
53
54     def set_default_preferences(self):
55         self.default_meter_scale = self.meter_scales[0]
56         self.default_slider_scale = self.slider_scales[0]
57         self.vumeter_color = '#ccb300'
58         self.vumeter_color_scheme = 'default'
59         self.use_custom_widgets = False
60
61     def read_preferences(self):
62         self.config.read(self.path)
63         scale_id = self.config['Preferences']['default_meter_scale']
64         self.default_meter_scale = lookup_scale(self.meter_scales, scale_id)
65         if not self.default_meter_scale:
66             self.default_meter_scale = meter_scales[0]
67
68         scale_id = self.config['Preferences']['default_slider_scale']
69         self.default_slider_scale = lookup_scale(self.slider_scales, scale_id)
70         if not self.default_slider_scale:
71             self.default_slider_scale = slider_scales[0]
72
73         self.vumeter_color_scheme = self.config['Preferences']['vumeter_color_scheme']
74         if not self.vumeter_color_scheme:
75             self.vumeter_color_scheme = 'default'
76
77         self.vumeter_color = self.config['Preferences']['vumeter_color']
78         if not self.vumeter_color:
79             self.vumeter_color = '#ccb300'
80
81         self.use_custom_widgets = self.config["Preferences"]["use_custom_widgets"] == 'True'
82
83     def write_preferences(self):
84         self.config['Preferences'] = {}
85         self.config['Preferences']['default_meter_scale'] = self.default_meter_scale.scale_id
86         self.config['Preferences']['default_slider_scale'] = self.default_slider_scale.scale_id
87         self.config['Preferences']['vumeter_color_scheme'] = self.vumeter_color_scheme
88         self.config['Preferences']['vumeter_color'] = self.vumeter_color
89         self.config['Preferences']['use_custom_widgets'] = str(self.use_custom_widgets)
90         with open(self.path, 'w') as configfile:
91             self.config.write(configfile)
92
93     def set_default_meter_scale(self, scale):
94         if scale:
95             self.default_meter_scale = scale
96             if xdg:
97                 self.write_preferences()
98             self.emit("default-meter-scale-changed", self.default_meter_scale)
99         else:
100             print("Ignoring default_meter_scale setting, because \"%s\" scale is not known" % scale_id)
101
102     def set_default_slider_scale(self, scale):
103         if scale:
104             self.default_slider_scale = scale
105             if xdg:
106                 self.write_preferences()
107             self.emit("default-slider-scale-changed", self.default_slider_scale)
108         else:
109             print("Ignoring default_slider_scale setting, because \"%s\" scale is not known" % scale_id)
110
111     def set_vumeter_color(self, color):
112         self.vumeter_color = color
113         if xdg:
114             self.write_preferences()
115         self.emit('vumeter-color-changed', self.vumeter_color)
116
117     def set_vumeter_color_scheme(self, color_scheme):
118         self.vumeter_color_scheme = color_scheme
119         if xdg:
120             self.write_preferences()
121         self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
122
123     def set_use_custom_widgets(self, use_custom):
124         self.use_custom_widgets = use_custom
125         if xdg:
126             self.write_preferences()
127         self.emit('use-custom-widgets-changed', self.use_custom_widgets)
128
129     def get_default_meter_scale(self):
130         return self.default_meter_scale
131
132     def get_default_slider_scale(self):
133         return self.default_slider_scale
134
135     def get_vumeter_color(self):
136         return self.vumeter_color
137
138     def get_vumeter_color_scheme(self):
139         return self.vumeter_color_scheme
140
141     def get_use_custom_widgets(self):
142         return self.use_custom_widgets
143
144 GObject.signal_new("default-meter-scale-changed", Factory,
145                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
146                 None, [GObject.TYPE_PYOBJECT])
147 GObject.signal_new("default-slider-scale-changed", Factory,
148                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
149                 None, [GObject.TYPE_PYOBJECT])
150 GObject.signal_new('vumeter-color-changed', Factory,
151                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
152                 None, [str])
153 GObject.signal_new('vumeter-color-scheme-changed', Factory,
154                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
155                 None, [str])
156 GObject.signal_new('use-custom-widgets-changed', Factory,
157                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
158                 None, [bool])