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
23 class PreferencesDialog(Gtk
.Dialog
):
24 def __init__(self
, parent
):
26 GObject
.GObject
.__init
__(self
)
29 self
.connect('response', self
.on_response_cb
)
30 self
.connect('delete-event', self
.on_response_cb
)
32 def create_frame(self
, label
, child
):
35 frame
.set_border_width(3)
36 frame
.set_shadow_type(Gtk
.ShadowType
.NONE
)
37 frame
.get_label_widget().set_markup('<b>%s</b>' % label
)
39 alignment
= Gtk
.Alignment
.new(0, 0, 12, 0)
49 interface_vbox
= Gtk
.VBox()
50 self
.confirm_quit_checkbutton
= Gtk
.CheckButton('Confirm quit')
51 self
.confirm_quit_checkbutton
.set_tooltip_text("Always ask for confirmation before "
52 "quitting the application")
53 self
.confirm_quit_checkbutton
.set_active(self
.app
.gui_factory
.get_confirm_quit())
54 self
.confirm_quit_checkbutton
.connect('toggled', self
.on_confirm_quit_toggled
)
55 interface_vbox
.pack_start(self
.confirm_quit_checkbutton
, True, True, 0)
57 self
.custom_widgets_checkbutton
= Gtk
.CheckButton('Use custom widgets')
58 self
.custom_widgets_checkbutton
.set_active(
59 self
.app
.gui_factory
.get_use_custom_widgets())
60 self
.custom_widgets_checkbutton
.connect('toggled',
61 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')
67 self
.vumeter_color_checkbutton
.connect('toggled',
68 self
.on_vumeter_color_change
)
69 interface_vbox
.pack_start(self
.vumeter_color_checkbutton
, True, True, 0)
71 interface_vbox
.pack_start(hbox
, True, True, 0)
72 self
.custom_color_box
= hbox
73 self
.custom_color_box
.set_sensitive(
74 self
.vumeter_color_checkbutton
.get_active() == True)
75 hbox
.pack_start(Gtk
.Label('Custom color:'), True, True, 0)
76 self
.vumeter_color_picker
= Gtk
.ColorButton()
77 self
.vumeter_color_picker
.set_color(Gdk
.color_parse(
78 self
.app
.gui_factory
.get_vumeter_color()))
79 self
.vumeter_color_picker
.connect('color-set',
80 self
.on_vumeter_color_change
)
81 hbox
.pack_start(self
.vumeter_color_picker
, True, True, 0)
83 vbox
.pack_start(self
.create_frame('Interface', interface_vbox
), True, True, 0)
85 table
= Gtk
.Table(2, 2, False)
86 table
.set_row_spacings(5)
87 table
.set_col_spacings(5)
89 table
.attach(Gtk
.Label(label
='Meter scale'), 0, 1, 0, 1)
90 self
.meter_scale_combo
= self
.create_meter_store_and_combo()
91 table
.attach(self
.meter_scale_combo
, 1, 2, 0, 1)
93 table
.attach(Gtk
.Label(label
='Slider scale'), 0, 1, 1, 2)
94 self
.slider_scale_combo
= self
.create_slider_store_and_combo()
95 table
.attach(self
.slider_scale_combo
, 1, 2, 1, 2)
97 vbox
.pack_start(self
.create_frame('Scales', table
), True, True, 0)
99 table
= Gtk
.Table(1, 2, False)
100 table
.set_row_spacings(5)
101 table
.set_col_spacings(5)
103 table
.attach(Gtk
.Label(label
='Control Behavior'), 0, 1, 0, 1)
104 self
.midi_behavior_combo
= self
.create_midi_behavior_combo()
105 table
.attach(self
.midi_behavior_combo
, 1, 2, 0, 1)
107 vbox
.pack_start(self
.create_frame('MIDI', table
), True, True, 0)
110 self
.add_button(Gtk
.STOCK_CLOSE
, Gtk
.ResponseType
.CLOSE
)
112 def create_meter_store_and_combo(self
):
113 store
= Gtk
.ListStore(GObject
.TYPE_STRING
, GObject
.TYPE_PYOBJECT
)
114 for scale
in self
.app
.meter_scales
:
115 row
= scale
.scale_id
, scale
116 current_iter
= store
.append(row
)
117 if scale
is self
.app
.gui_factory
.get_default_meter_scale():
118 active_iter
= current_iter
119 self
.meter_store
= store
121 meter_scale_combo
= Gtk
.ComboBox
.new_with_model(store
)
122 cell
= Gtk
.CellRendererText()
123 meter_scale_combo
.pack_start(cell
, True)
124 meter_scale_combo
.add_attribute(cell
, 'text', 0)
125 meter_scale_combo
.set_active_iter(active_iter
)
126 meter_scale_combo
.connect('changed',
127 self
.on_meter_scale_combo_changed
)
129 return meter_scale_combo
131 def create_slider_store_and_combo(self
):
132 store
= Gtk
.ListStore(GObject
.TYPE_STRING
, GObject
.TYPE_PYOBJECT
)
133 for scale
in self
.app
.slider_scales
:
134 row
= scale
.scale_id
, scale
135 current_iter
= store
.append(row
)
136 if scale
is self
.app
.gui_factory
.get_default_slider_scale():
137 active_iter
= current_iter
138 self
.slider_store
= store
140 slider_scale_combo
= Gtk
.ComboBox
.new_with_model(store
)
141 cell
= Gtk
.CellRendererText()
142 slider_scale_combo
.pack_start(cell
, True)
143 slider_scale_combo
.add_attribute(cell
, 'text', 0)
144 slider_scale_combo
.set_active_iter(active_iter
)
145 slider_scale_combo
.connect('changed',
146 self
.on_slider_scale_combo_changed
)
148 return slider_scale_combo
150 def create_midi_behavior_combo(self
):
151 combo
= Gtk
.ComboBoxText()
152 for i
, mode
in enumerate(self
.app
.gui_factory
.midi_behavior_modes
):
153 combo
.append(str(i
), mode
)
154 combo
.set_active(self
.app
.gui_factory
.get_midi_behavior_mode())
155 combo
.connect('changed', self
.on_midi_behavior_combo_changed
)
158 def on_response_cb(self
, dlg
, response_id
, *args
):
159 self
.app
.preferences_dialog
= None
162 def on_meter_scale_combo_changed(self
, *args
):
163 active_iter
= self
.meter_scale_combo
.get_active_iter()
164 scale
= self
.meter_store
.get(active_iter
, 1)[0]
165 self
.app
.gui_factory
.set_default_meter_scale(scale
)
167 def on_slider_scale_combo_changed(self
, *args
):
168 active_iter
= self
.slider_scale_combo
.get_active_iter()
169 scale
= self
.slider_store
.get(active_iter
, 1)[0]
170 self
.app
.gui_factory
.set_default_slider_scale(scale
)
172 def on_midi_behavior_combo_changed(self
, *args
):
173 active
= self
.midi_behavior_combo
.get_active()
174 self
.app
.gui_factory
.set_midi_behavior_mode(active
)
176 def on_vumeter_color_change(self
, *args
):
177 color_scheme
= 'default'
178 if self
.vumeter_color_checkbutton
.get_active():
179 color_scheme
= 'solid'
180 self
.app
.gui_factory
.set_vumeter_color_scheme(color_scheme
)
182 color
= self
.vumeter_color_picker
.get_color().to_string()
183 self
.app
.gui_factory
.set_vumeter_color(color
)
185 self
.custom_color_box
.set_sensitive(
186 self
.vumeter_color_checkbutton
.get_active() == True)
188 def on_confirm_quit_toggled(self
, *args
):
189 self
.app
.gui_factory
.set_confirm_quit(self
.confirm_quit_checkbutton
.get_active())
191 def on_custom_widget_toggled(self
, *args
):
192 self
.app
.gui_factory
.set_use_custom_widgets(
193 self
.custom_widgets_checkbutton
.get_active())