/* Demo Recorder for MAEMO 5 * Copyright (C) 2010 Dru Moore * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, * or (at your option) any later version, as published by the Free * Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ namespace IdWorks { public class TrackEffectsPopUp : Hildon.Dialog { SettingsStructures.EchoSettings echo_settings; SettingsStructures.DynamicsSettings dynamics_settings; Hildon.Button dynamics_settings_btn; Hildon.CheckButton dynamics_btn; Hildon.Button echo_settings_btn; Hildon.CheckButton echo_btn; public signal void dynamics_toggled(bool state); public signal void dynamics_mode_updated(string val); public signal void dynamics_characteristics_updated(string val); public signal void dynamics_ratio_updated(double val); public signal void dynamics_threshold_updated(double val); public signal void echo_toggled(bool state); public signal void echo_max_delay_updated(uint64 val); public signal void echo_delay_updated(uint64 val); public signal void echo_feedback_updated(double val); public signal void echo_intensity_updated(double val); public TrackEffectsPopUp(string title, Gtk.Widget parent) { this.set_title(title); this.set_parent(parent); this.echo_settings = SettingsStructures.EchoSettings(); this.dynamics_settings = SettingsStructures.DynamicsSettings(); this.construct_interface(); } public TrackEffectsPopUp.with_settings(string title, Gtk.Widget parent, SettingsStructures.EchoSettings echo_settings, SettingsStructures.DynamicsSettings dynamics_settings) { this.set_title(title); this.set_parent(parent); this.echo_settings = echo_settings; this.dynamics_settings = dynamics_settings; this.construct_interface(); } private void construct_interface() { this.set_default_response(Gtk.ResponseType.ACCEPT); this.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.ACCEPT); Gtk.VBox control_area = (Gtk.VBox)this.get_content_area(); Gtk.HBox dynamics_bar = new Gtk.HBox(false, 4); dynamics_btn = new Hildon.CheckButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH); dynamics_btn.set_label("Dynamics"); dynamics_btn.toggled.connect( (s) => {toggle_dynamics(s.get_active());} ); dynamics_bar.pack_start(dynamics_btn, true, false, 2); dynamics_settings_btn = new Hildon.Button(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.AUTO_WIDTH, Hildon.ButtonArrangement.HORIZONTAL); dynamics_settings_btn.set_text("Settings", ""); dynamics_settings_btn.set_image(new Gtk.Image.from_icon_name("general_settings", Gtk.IconSize.BUTTON)); dynamics_settings_btn.set_image_position(Gtk.PositionType.LEFT); dynamics_settings_btn.clicked.connect(do_dynamics_popup); dynamics_bar.pack_start(dynamics_settings_btn, true, false, 2); control_area.pack_start(dynamics_bar, true, true , 2); Gtk.HBox echo_bar = new Gtk.HBox(false, 4); echo_btn = new Hildon.CheckButton(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.HALFSCREEN_WIDTH); echo_btn.set_label("Echo / Reverb"); echo_btn.toggled.connect( (s) => {toggle_echo(s.get_active());} ); echo_bar.pack_start(echo_btn, true, false, 2); echo_settings_btn = new Hildon.Button(Hildon.SizeType.FINGER_HEIGHT | Hildon.SizeType.AUTO_WIDTH, Hildon.ButtonArrangement.HORIZONTAL); echo_settings_btn.set_text("Settings", ""); echo_settings_btn.set_image(new Gtk.Image.from_icon_name("general_settings", Gtk.IconSize.BUTTON)); echo_settings_btn.set_image_position(Gtk.PositionType.LEFT); echo_settings_btn.clicked.connect(do_echo_popup); echo_bar.pack_start(echo_settings_btn, true, false, 2); control_area.pack_start(echo_bar, true, true , 2); this.show_all(); } private void toggle_dynamics(bool state) { if (!state) { dynamics_settings_btn.set_sensitive(false); // reset to pass through dynamics_toggled(false); } else { dynamics_settings_btn.set_sensitive(true); dynamics_toggled(true); } } private void do_dynamics_popup() { DynamicsPopUp dlg = new DynamicsPopUp.with_settings("Track Dynamics settings", this, this.dynamics_settings); dlg.set_transient_for(this.get_transient_for()); dlg.mode_updated.connect(dynamics_update_mode_callback); dlg.characteristics_updated.connect(dynamics_update_characteristics_callback); dlg.ratio_updated.connect(dynamics_update_ratio_callback); dlg.threshold_updated.connect(dynamics_update_threshold_callback); dlg.run(); dlg.destroy(); } private void dynamics_update_mode_callback(DynamicsPopUp sender, string val) { dynamics_settings.mode = val; // emit signal dynamics_mode_updated(val); } private void dynamics_update_characteristics_callback(DynamicsPopUp sender, string val) { dynamics_settings.characteristics = val; // emit signal dynamics_characteristics_updated(val); } private void dynamics_update_ratio_callback(DynamicsPopUp sender, double val) { dynamics_settings.ratio = val; // emit callback dynamics_ratio_updated(val); } private void dynamics_update_threshold_callback(DynamicsPopUp sender, double val) { dynamics_settings.threshold = val; // emit signal dynamics_threshold_updated(val); } private void toggle_echo(bool state) { if (!state) { echo_settings_btn.set_sensitive(false); // reset to pass through echo_toggled(false); } else { echo_settings_btn.set_sensitive(true); echo_toggled(true); } } private void do_echo_popup() { EchoPopUp dlg = new EchoPopUp.with_settings("Track Echo / Reverb settings", this, this.echo_settings); dlg.set_transient_for(this.get_transient_for()); dlg.delay_updated.connect(echo_update_delay_callback); dlg.feedback_updated.connect(echo_update_feedback_callback); dlg.intensity_updated.connect(echo_update_intensity_callback); dlg.run(); dlg.destroy(); } private void echo_update_delay_callback(EchoPopUp sender, uint64 val) { echo_settings.delay = val; // emit signal echo_delay_updated(val); } private void echo_update_feedback_callback(EchoPopUp sender, double val) { echo_settings.feedback = val; // emit signal echo_feedback_updated(val); } private void echo_update_intensity_callback(EchoPopUp sender, double val) { echo_settings.intensity = val; // emit signal echo_intensity_updated(val); } } }