Reworked AboutDialog.
[demorecorder] / src / TrackEffectsPopUp.vala
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
6 *   Software Foundation
7 *
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
12 *
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.
17 */
18 namespace IdWorks {
19
20 public class TrackEffectsPopUp : Hildon.Dialog {
21
22   SettingsStructures.EchoSettings echo_settings;
23   SettingsStructures.DynamicsSettings dynamics_settings;
24   
25   Hildon.Button dynamics_settings_btn;
26   Hildon.CheckButton dynamics_btn;
27   Hildon.Button echo_settings_btn;
28   Hildon.CheckButton echo_btn;
29   
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);
35   
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);
41   
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();
48   }
49   
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();
56   }
57   
58   private void construct_interface() {    
59     this.set_default_response(Gtk.ResponseType.ACCEPT);
60     this.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.ACCEPT);
61     
62     Gtk.VBox control_area = (Gtk.VBox)this.get_content_area();
63     
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);
75     
76     control_area.pack_start(dynamics_bar, true, true , 2);
77     
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);
89     
90     control_area.pack_start(echo_bar, true, true , 2);
91     
92     
93     this.show_all();
94   }
95   
96   private void toggle_dynamics(bool state) {
97     if (!state) {
98       dynamics_settings_btn.set_sensitive(false);
99       // reset to pass through
100       dynamics_toggled(false);
101     }
102     else {
103       dynamics_settings_btn.set_sensitive(true);
104       dynamics_toggled(true);
105     }
106   }
107   
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);
115     dlg.run();
116     dlg.destroy();
117   }
118   private void dynamics_update_mode_callback(DynamicsPopUp sender, string val) {
119     dynamics_settings.mode = val;
120     // emit signal
121     dynamics_mode_updated(val);
122   }
123   private void dynamics_update_characteristics_callback(DynamicsPopUp sender, string val) {
124     dynamics_settings.characteristics = val;
125     // emit signal
126     dynamics_characteristics_updated(val);
127   }
128   private void dynamics_update_ratio_callback(DynamicsPopUp sender, double val) {
129     dynamics_settings.ratio = val;
130     // emit callback
131     dynamics_ratio_updated(val);
132   }
133   private void dynamics_update_threshold_callback(DynamicsPopUp sender, double val) {
134     dynamics_settings.threshold = val;
135     // emit signal
136     dynamics_threshold_updated(val);
137   }
138   
139   private void toggle_echo(bool state) {
140     if (!state) {
141       echo_settings_btn.set_sensitive(false);
142       // reset to pass through
143       echo_toggled(false);
144       
145     }
146     else {
147       echo_settings_btn.set_sensitive(true);
148       echo_toggled(true);
149     }
150   }
151   
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);
158     dlg.run();
159     dlg.destroy();
160   }
161   private void echo_update_delay_callback(EchoPopUp sender, uint64 val) {
162     echo_settings.delay = val;
163     // emit signal
164     echo_delay_updated(val);
165   }
166   private void echo_update_feedback_callback(EchoPopUp sender, double val) {
167     echo_settings.feedback = val;
168     // emit signal
169     echo_feedback_updated(val);
170   }
171   private void echo_update_intensity_callback(EchoPopUp sender, double val) {
172     echo_settings.intensity = val;
173     // emit signal
174     echo_intensity_updated(val);
175   }
176
177 }
178
179 }