1 /* Demo Recorder for MAEMO 5
2 * Copyright (C) 2010 Dru Moore <usr@dru-id.co.uk>
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2,
5 * or (at your option) any later version, as published by the Free
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details
13 * You should have received a copy of the GNU General Public
14 * License along with this program; if not, write to the
15 * Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 public class TrackEffectsPopUp : Hildon.Dialog {
22 SettingsStructures.EchoSettings echo_settings;
23 SettingsStructures.DynamicsSettings dynamics_settings;
25 Hildon.Button dynamics_settings_btn;
26 Hildon.CheckButton dynamics_btn;
27 Hildon.Button echo_settings_btn;
28 Hildon.CheckButton echo_btn;
30 public signal void dynamics_toggled(bool state);
31 public signal void dynamics_mode_updated(string val);
32 public signal void dynamics_characteristics_updated(string val);
33 public signal void dynamics_ratio_updated(double val);
34 public signal void dynamics_threshold_updated(double val);
36 public signal void echo_toggled(bool state);
37 public signal void echo_max_delay_updated(uint64 val);
38 public signal void echo_delay_updated(uint64 val);
39 public signal void echo_feedback_updated(double val);
40 public signal void echo_intensity_updated(double val);
42 public TrackEffectsPopUp(string title, Gtk.Widget parent) {
43 this.set_title(title);
44 this.set_parent(parent);
45 this.echo_settings = SettingsStructures.EchoSettings();
46 this.dynamics_settings = SettingsStructures.DynamicsSettings();
47 this.construct_interface();
50 public TrackEffectsPopUp.with_settings(string title, Gtk.Widget parent, SettingsStructures.EchoSettings echo_settings, SettingsStructures.DynamicsSettings dynamics_settings) {
51 this.set_title(title);
52 this.set_parent(parent);
53 this.echo_settings = echo_settings;
54 this.dynamics_settings = dynamics_settings;
55 this.construct_interface();
58 private void construct_interface() {
59 this.set_default_response(Gtk.ResponseType.ACCEPT);
60 this.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.ACCEPT);
62 Gtk.VBox control_area = (Gtk.VBox)this.get_content_area();
64 Gtk.HBox dynamics_bar = new Gtk.HBox(false, 4);
65 dynamics_btn = new Hildon.CheckButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH);
66 dynamics_btn.set_label("Dynamics");
67 dynamics_btn.toggled.connect( (s) => {toggle_dynamics(s.get_active());} );
68 dynamics_bar.pack_start(dynamics_btn, true, false, 2);
69 dynamics_settings_btn = new Hildon.Button(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.AUTO_WIDTH, Hildon.ButtonArrangement.HORIZONTAL);
70 dynamics_settings_btn.set_text("Settings", "");
71 dynamics_settings_btn.set_image(new Gtk.Image.from_icon_name("general_settings", Gtk.IconSize.BUTTON));
72 dynamics_settings_btn.set_image_position(Gtk.PositionType.LEFT);
73 dynamics_settings_btn.clicked.connect(do_dynamics_popup);
74 dynamics_bar.pack_start(dynamics_settings_btn, true, false, 2);
76 control_area.pack_start(dynamics_bar, true, true , 2);
78 Gtk.HBox echo_bar = new Gtk.HBox(false, 4);
79 echo_btn = new Hildon.CheckButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH);
80 echo_btn.set_label("Echo / Reverb");
81 echo_btn.toggled.connect( (s) => {toggle_echo(s.get_active());} );
82 echo_bar.pack_start(echo_btn, true, false, 2);
83 echo_settings_btn = new Hildon.Button(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.AUTO_WIDTH, Hildon.ButtonArrangement.HORIZONTAL);
84 echo_settings_btn.set_text("Settings", "");
85 echo_settings_btn.set_image(new Gtk.Image.from_icon_name("general_settings", Gtk.IconSize.BUTTON));
86 echo_settings_btn.set_image_position(Gtk.PositionType.LEFT);
87 echo_settings_btn.clicked.connect(do_echo_popup);
88 echo_bar.pack_start(echo_settings_btn, true, false, 2);
90 control_area.pack_start(echo_bar, true, true , 2);
96 private void toggle_dynamics(bool state) {
98 dynamics_settings_btn.set_sensitive(false);
99 // reset to pass through
100 dynamics_toggled(false);
103 dynamics_settings_btn.set_sensitive(true);
104 dynamics_toggled(true);
108 private void do_dynamics_popup() {
109 DynamicsPopUp dlg = new DynamicsPopUp.with_settings("Track Dynamics settings", this, this.dynamics_settings);
110 dlg.set_transient_for(this.get_transient_for());
111 dlg.mode_updated.connect(dynamics_update_mode_callback);
112 dlg.characteristics_updated.connect(dynamics_update_characteristics_callback);
113 dlg.ratio_updated.connect(dynamics_update_ratio_callback);
114 dlg.threshold_updated.connect(dynamics_update_threshold_callback);
118 private void dynamics_update_mode_callback(DynamicsPopUp sender, string val) {
119 dynamics_settings.mode = val;
121 dynamics_mode_updated(val);
123 private void dynamics_update_characteristics_callback(DynamicsPopUp sender, string val) {
124 dynamics_settings.characteristics = val;
126 dynamics_characteristics_updated(val);
128 private void dynamics_update_ratio_callback(DynamicsPopUp sender, double val) {
129 dynamics_settings.ratio = val;
131 dynamics_ratio_updated(val);
133 private void dynamics_update_threshold_callback(DynamicsPopUp sender, double val) {
134 dynamics_settings.threshold = val;
136 dynamics_threshold_updated(val);
139 private void toggle_echo(bool state) {
141 echo_settings_btn.set_sensitive(false);
142 // reset to pass through
147 echo_settings_btn.set_sensitive(true);
152 private void do_echo_popup() {
153 EchoPopUp dlg = new EchoPopUp.with_settings("Track Echo / Reverb settings", this, this.echo_settings);
154 dlg.set_transient_for(this.get_transient_for());
155 dlg.delay_updated.connect(echo_update_delay_callback);
156 dlg.feedback_updated.connect(echo_update_feedback_callback);
157 dlg.intensity_updated.connect(echo_update_intensity_callback);
161 private void echo_update_delay_callback(EchoPopUp sender, uint64 val) {
162 echo_settings.delay = val;
164 echo_delay_updated(val);
166 private void echo_update_feedback_callback(EchoPopUp sender, double val) {
167 echo_settings.feedback = val;
169 echo_feedback_updated(val);
171 private void echo_update_intensity_callback(EchoPopUp sender, double val) {
172 echo_settings.intensity = val;
174 echo_intensity_updated(val);