]> git.0d.be Git - jack_mixer.git/blob - preferences.py
Add a midi out port
[jack_mixer.git] / preferences.py
1 # This file is part of jack_mixer
2 #
3 # Copyright (C) 2006 Nedko Arnaudov <nedko@arnaudov.name>
4 # Copyright (C) 2009 Frederic Peters <fpeters@0d.be>
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; version 2 of the License
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
19 import gtk
20 import gobject
21
22 try:
23     import gconf
24 except ImportError:
25     gconf = None
26
27 def lookup_scale(scales, scale_id):
28     for scale in scales:
29         if scale_id == scale.scale_id:
30             return scale
31     return None
32
33 class PreferencesDialog(gtk.Dialog):
34     def __init__(self, parent):
35         self.app = parent
36         gtk.Dialog.__init__(self, '', self.app.window)
37         self.create_ui()
38         self.connect('response', self.on_response_cb)
39         self.connect('delete-event', self.on_response_cb)
40
41     def create_frame(self, label, child):
42         frame = gtk.Frame('')
43         frame.set_border_width(3)
44         frame.set_shadow_type(gtk.SHADOW_NONE)
45         frame.get_label_widget().set_markup('<b>%s</b>' % label)
46
47         alignment = gtk.Alignment()
48         alignment.set_padding(0, 0, 12, 0)
49         frame.add(alignment)
50         alignment.add(child)
51
52         return frame
53
54     def create_ui(self):
55         vbox = gtk.VBox()
56         self.vbox.add(vbox)
57
58         interface_vbox = gtk.VBox()
59         self.custom_widgets_checkbutton = gtk.CheckButton('Use custom widgets')
60         self.custom_widgets_checkbutton.set_active(
61                         self.app.gui_factory.get_use_custom_widgets())
62         self.custom_widgets_checkbutton.connect('toggled',
63                         self.on_custom_widget_toggled)
64         interface_vbox.pack_start(self.custom_widgets_checkbutton)
65
66         self.vumeter_color_checkbutton = gtk.CheckButton('Use custom vumeter color')
67         self.vumeter_color_checkbutton.set_active(
68                         self.app.gui_factory.get_vumeter_color_scheme() == 'solid')
69         self.vumeter_color_checkbutton.connect('toggled',
70                         self.on_vumeter_color_change)
71         interface_vbox.pack_start(self.vumeter_color_checkbutton)
72         hbox = gtk.HBox()
73         interface_vbox.pack_start(hbox)
74         self.custom_color_box = hbox
75         self.custom_color_box.set_sensitive(
76                         self.vumeter_color_checkbutton.get_active() == True)
77         hbox.pack_start(gtk.Label('Custom color:'))
78         self.vumeter_color_picker = gtk.ColorButton()
79         self.vumeter_color_picker.set_color(gtk.gdk.color_parse(
80                                 self.app.gui_factory.get_vumeter_color()))
81         self.vumeter_color_picker.connect('color-set',
82                         self.on_vumeter_color_change)
83         hbox.pack_start(self.vumeter_color_picker)
84         vbox.pack_start(self.create_frame('Interface', interface_vbox))
85
86         table = gtk.Table(2, 2, False)
87         table.set_row_spacings(5)
88         table.set_col_spacings(5)
89
90         table.attach(gtk.Label('Meter scale'), 0, 1, 0, 1)
91         self.meter_scale_combo = self.create_meter_store_and_combo()
92         table.attach(self.meter_scale_combo, 1, 2, 0, 1)
93
94         table.attach(gtk.Label('Slider scale'), 0, 1, 1, 2)
95         self.slider_scale_combo = self.create_slider_store_and_combo()
96         table.attach(self.slider_scale_combo, 1, 2, 1, 2)
97
98         vbox.pack_start(self.create_frame('Scales', table))
99
100         self.vbox.show_all()
101
102         self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
103
104     def create_meter_store_and_combo(self):
105         store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
106         for scale in self.app.meter_scales:
107             row = scale.scale_id, scale
108             current_iter = store.append(row)
109             if scale is self.app.gui_factory.get_default_meter_scale():
110                 active_iter = current_iter
111         self.meter_store = store
112
113         meter_scale_combo = gtk.ComboBox(store)
114         cell = gtk.CellRendererText()
115         meter_scale_combo.pack_start(cell, True)
116         meter_scale_combo.add_attribute(cell, 'text', 0)
117         meter_scale_combo.set_active_iter(active_iter)
118         meter_scale_combo.connect('changed',
119                         self.on_meter_scale_combo_changed)
120
121         return meter_scale_combo
122
123     def create_slider_store_and_combo(self):
124         store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
125         for scale in self.app.slider_scales:
126             row = scale.scale_id, scale
127             current_iter = store.append(row)
128             if scale is self.app.gui_factory.get_default_slider_scale():
129                 active_iter = current_iter
130         self.slider_store = store
131
132         slider_scale_combo = gtk.ComboBox(store)
133         cell = gtk.CellRendererText()
134         slider_scale_combo.pack_start(cell, True)
135         slider_scale_combo.add_attribute(cell, 'text', 0)
136         slider_scale_combo.set_active_iter(active_iter)
137         slider_scale_combo.connect('changed',
138                         self.on_slider_scale_combo_changed)
139
140         return slider_scale_combo
141
142     def on_response_cb(self, dlg, response_id, *args):
143         self.app.preferences_dialog = None
144         self.destroy()
145
146     def on_meter_scale_combo_changed(self, *args):
147         active_iter = self.meter_scale_combo.get_active_iter()
148         scale = self.meter_store.get(active_iter, 1)[0]
149         self.app.gui_factory.set_default_meter_scale(scale)
150
151     def on_slider_scale_combo_changed(self, *args):
152         active_iter = self.slider_scale_combo.get_active_iter()
153         scale = self.slider_store.get(active_iter, 1)[0]
154         self.app.gui_factory.set_default_slider_scale(scale)
155
156     def on_vumeter_color_change(self, *args):
157         color_scheme = 'default'
158         if self.vumeter_color_checkbutton.get_active():
159             color_scheme = 'solid'
160         self.app.gui_factory.set_vumeter_color_scheme(color_scheme)
161
162         color = self.vumeter_color_picker.get_color().to_string()
163         self.app.gui_factory.set_vumeter_color(color)
164
165         self.custom_color_box.set_sensitive(
166                         self.vumeter_color_checkbutton.get_active() == True)
167
168     def on_custom_widget_toggled(self, *args):
169         self.app.gui_factory.set_use_custom_widgets(
170                         self.custom_widgets_checkbutton.get_active())