Minor fix for flake8 complaint about comment whitespace
[jack_mixer.git] / preferences.py
blobfaa130668dbcca8be9b04dfe7f79845c39d17881
1 # This file is part of jack_mixer
3 # Copyright (C) 2006 Nedko Arnaudov <nedko@arnaudov.name>
4 # Copyright (C) 2009 Frederic Peters <fpeters@0d.be>
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
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.
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.
19 from gi.repository import Gtk
20 from gi.repository import Gdk
21 from gi.repository import GObject
24 class PreferencesDialog(Gtk.Dialog):
25 def __init__(self, parent):
26 self.app = parent
27 GObject.GObject.__init__(self)
28 self.set_title("")
29 self.create_ui()
30 self.connect("response", self.on_response_cb)
31 self.connect("delete-event", self.on_response_cb)
33 def create_frame(self, label, child):
34 frame = Gtk.Frame()
35 frame.set_label("")
36 frame.set_border_width(3)
37 frame.set_shadow_type(Gtk.ShadowType.NONE)
38 frame.get_label_widget().set_markup("<b>%s</b>" % label)
40 alignment = Gtk.Alignment.new(0, 0, 12, 0)
41 frame.add(alignment)
42 alignment.add(child)
44 return frame
46 def create_ui(self):
47 vbox = Gtk.VBox()
48 self.vbox.add(vbox)
50 interface_vbox = Gtk.VBox()
51 self.confirm_quit_checkbutton = Gtk.CheckButton("Confirm quit")
52 self.confirm_quit_checkbutton.set_tooltip_text(
53 "Always ask for confirmation before " "quitting the application"
55 self.confirm_quit_checkbutton.set_active(self.app.gui_factory.get_confirm_quit())
56 self.confirm_quit_checkbutton.connect("toggled", self.on_confirm_quit_toggled)
57 interface_vbox.pack_start(self.confirm_quit_checkbutton, True, True, 0)
59 self.custom_widgets_checkbutton = Gtk.CheckButton("Use custom widgets")
60 self.custom_widgets_checkbutton.set_active(self.app.gui_factory.get_use_custom_widgets())
61 self.custom_widgets_checkbutton.connect("toggled", self.on_custom_widget_toggled)
62 interface_vbox.pack_start(self.custom_widgets_checkbutton, True, True, 0)
64 self.vumeter_color_checkbutton = Gtk.CheckButton("Use custom vumeter color")
65 self.vumeter_color_checkbutton.set_active(
66 self.app.gui_factory.get_vumeter_color_scheme() == "solid"
68 self.vumeter_color_checkbutton.connect("toggled", self.on_vumeter_color_change)
69 interface_vbox.pack_start(self.vumeter_color_checkbutton, True, True, 0)
70 hbox = Gtk.HBox()
71 interface_vbox.pack_start(hbox, True, True, 0)
72 self.custom_color_box = hbox
73 self.custom_color_box.set_sensitive(self.vumeter_color_checkbutton.get_active())
74 hbox.pack_start(Gtk.Label("Custom color:"), True, True, 0)
75 self.vumeter_color_picker = Gtk.ColorButton()
76 self.vumeter_color_picker.set_color(
77 Gdk.color_parse(self.app.gui_factory.get_vumeter_color())
79 self.vumeter_color_picker.connect("color-set", self.on_vumeter_color_change)
80 hbox.pack_start(self.vumeter_color_picker, True, True, 0)
82 vbox.pack_start(self.create_frame("Interface", interface_vbox), True, True, 0)
84 table = Gtk.Table(2, 2, False)
85 table.set_row_spacings(5)
86 table.set_col_spacings(5)
88 table.attach(Gtk.Label(label="Meter scale"), 0, 1, 0, 1)
89 self.meter_scale_combo = self.create_meter_store_and_combo()
90 table.attach(self.meter_scale_combo, 1, 2, 0, 1)
92 table.attach(Gtk.Label(label="Slider scale"), 0, 1, 1, 2)
93 self.slider_scale_combo = self.create_slider_store_and_combo()
94 table.attach(self.slider_scale_combo, 1, 2, 1, 2)
96 vbox.pack_start(self.create_frame("Scales", table), True, True, 0)
98 table = Gtk.Table(1, 2, False)
99 table.set_row_spacings(5)
100 table.set_col_spacings(5)
102 table.attach(Gtk.Label(label="Control Behavior"), 0, 1, 0, 1)
103 self.midi_behavior_combo = self.create_midi_behavior_combo()
104 table.attach(self.midi_behavior_combo, 1, 2, 0, 1)
106 vbox.pack_start(self.create_frame("MIDI", table), True, True, 0)
107 self.vbox.show_all()
109 self.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
111 def create_meter_store_and_combo(self):
112 store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_PYOBJECT)
113 for scale in self.app.meter_scales:
114 row = scale.scale_id, scale
115 current_iter = store.append(row)
116 if scale is self.app.gui_factory.get_default_meter_scale():
117 active_iter = current_iter
118 self.meter_store = store
120 meter_scale_combo = Gtk.ComboBox.new_with_model(store)
121 cell = Gtk.CellRendererText()
122 meter_scale_combo.pack_start(cell, True)
123 meter_scale_combo.add_attribute(cell, "text", 0)
124 meter_scale_combo.set_active_iter(active_iter)
125 meter_scale_combo.connect("changed", self.on_meter_scale_combo_changed)
127 return meter_scale_combo
129 def create_slider_store_and_combo(self):
130 store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_PYOBJECT)
131 for scale in self.app.slider_scales:
132 row = scale.scale_id, scale
133 current_iter = store.append(row)
134 if scale is self.app.gui_factory.get_default_slider_scale():
135 active_iter = current_iter
136 self.slider_store = store
138 slider_scale_combo = Gtk.ComboBox.new_with_model(store)
139 cell = Gtk.CellRendererText()
140 slider_scale_combo.pack_start(cell, True)
141 slider_scale_combo.add_attribute(cell, "text", 0)
142 slider_scale_combo.set_active_iter(active_iter)
143 slider_scale_combo.connect("changed", self.on_slider_scale_combo_changed)
145 return slider_scale_combo
147 def create_midi_behavior_combo(self):
148 combo = Gtk.ComboBoxText()
149 for i, mode in enumerate(self.app.gui_factory.midi_behavior_modes):
150 combo.append(str(i), mode)
151 combo.set_active(self.app.gui_factory.get_midi_behavior_mode())
152 combo.connect("changed", self.on_midi_behavior_combo_changed)
153 return combo
155 def on_response_cb(self, dlg, response_id, *args):
156 self.app.preferences_dialog = None
157 self.destroy()
159 def on_meter_scale_combo_changed(self, *args):
160 active_iter = self.meter_scale_combo.get_active_iter()
161 scale = self.meter_store.get(active_iter, 1)[0]
162 self.app.gui_factory.set_default_meter_scale(scale)
164 def on_slider_scale_combo_changed(self, *args):
165 active_iter = self.slider_scale_combo.get_active_iter()
166 scale = self.slider_store.get(active_iter, 1)[0]
167 self.app.gui_factory.set_default_slider_scale(scale)
169 def on_midi_behavior_combo_changed(self, *args):
170 active = self.midi_behavior_combo.get_active()
171 self.app.gui_factory.set_midi_behavior_mode(active)
173 def on_vumeter_color_change(self, *args):
174 color_scheme = "default"
175 if self.vumeter_color_checkbutton.get_active():
176 color_scheme = "solid"
177 self.app.gui_factory.set_vumeter_color_scheme(color_scheme)
179 color = self.vumeter_color_picker.get_color().to_string()
180 self.app.gui_factory.set_vumeter_color(color)
182 self.custom_color_box.set_sensitive(self.vumeter_color_checkbutton.get_active())
184 def on_confirm_quit_toggled(self, *args):
185 self.app.gui_factory.set_confirm_quit(self.confirm_quit_checkbutton.get_active())
187 def on_custom_widget_toggled(self, *args):
188 self.app.gui_factory.set_use_custom_widgets(self.custom_widgets_checkbutton.get_active())