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.
27 def lookup_scale(scales
, scale_id
):
29 if scale_id
== scale
.scale_id
:
33 class PreferencesDialog(gtk
.Dialog
):
34 def __init__(self
, parent
):
36 gtk
.Dialog
.__init
__(self
, '', self
.app
.window
)
38 self
.connect('response', self
.on_response_cb
)
39 self
.connect('delete-event', self
.on_response_cb
)
41 def create_frame(self
, label
, child
):
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
)
47 alignment
= gtk
.Alignment()
48 alignment
.set_padding(0, 0, 12, 0)
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
)
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
)
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
))
86 table
= gtk
.Table(2, 2, False)
87 table
.set_row_spacings(5)
88 table
.set_col_spacings(5)
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)
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)
98 vbox
.pack_start(self
.create_frame('Scales', table
))
102 self
.add_button(gtk
.STOCK_CLOSE
, gtk
.RESPONSE_CLOSE
)
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
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
)
121 return meter_scale_combo
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
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
)
140 return slider_scale_combo
142 def on_response_cb(self
, dlg
, response_id
, *args
):
143 self
.app
.preferences_dialog
= None
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
)
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
)
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
)
162 color
= self
.vumeter_color_picker
.get_color().to_string()
163 self
.app
.gui_factory
.set_vumeter_color(color
)
165 self
.custom_color_box
.set_sensitive(
166 self
.vumeter_color_checkbutton
.get_active() == True)
168 def on_custom_widget_toggled(self
, *args
):
169 self
.app
.gui_factory
.set_use_custom_widgets(
170 self
.custom_widgets_checkbutton
.get_active())