X-Git-Url: http://git.maemo.org/git/?p=demorecorder;a=blobdiff_plain;f=src%2FPlayerTransport.vala;fp=src%2FPlayerTransport.vala;h=9aa22f5c3f9e0913053619318bf6d2bc63e34bc7;hp=0000000000000000000000000000000000000000;hb=804630a4e0d41b182d8540f2aec69cf25ca0acfd;hpb=753fb925588aeeacdd74a163672acf2bf362a99e diff --git a/src/PlayerTransport.vala b/src/PlayerTransport.vala new file mode 100644 index 0000000..9aa22f5 --- /dev/null +++ b/src/PlayerTransport.vala @@ -0,0 +1,205 @@ +/* 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 PlayerTransport : Gtk.HBox { + + public Gtk.Window window; + + //Gtk.HScale progress; + Gtk.Label label_position; + Gtk.Label label_duration; + Gtk.ToggleButton record; + Gtk.Button play; + Gtk.ToggleButton pause; + Gtk.Button stop; + + double volume; + public double get_volume() { + return volume; + } + public void set_volume(double volume) { + this.volume = volume; + } + + double panorama; + public double get_panorama() { + return panorama; + } + public void set_panorama(double panorama) { + this.panorama = panorama; + } + /* + bool record_state; + public bool get_record_state() { + return record_state; + } + public void set_record_state(bool state) { + this.record_state = state; + } + + bool pause_state; + public bool get_pause_state() { + return pause_state; + } + public void set_pause_state(bool state) { + this.pause_state = state; + } + */ + public signal void record_toggled(bool val); + public signal void play_clicked(); + public signal void stop_clicked(); + public signal void pause_toggled(bool val); + public signal void volume_updated(double val); + public signal void panorama_updated(double val); + public signal void eq_updated(int band, double val); + + private void show_volume_and_pan() { + VolumeAndPanPopUp dlg = new VolumeAndPanPopUp("Mixer Volume", this); + dlg.set_transient_for(this.window); + dlg.set_volume(this.volume); + dlg.set_panorama(this.panorama); + dlg.volume_updated.connect(volume_updated_callback); + dlg.panorama_updated.connect(panorama_updated_callback); + dlg.run(); + dlg.destroy(); + dlg = null; + } + + private void show_equalizer() { + EqualizerPopUp dlg = new EqualizerPopUp("Mixer EQ", this); + dlg.set_transient_for(this.window); + dlg.eq_updated.connect(eq_updated_callback); + dlg.run(); + dlg.destroy(); + dlg = null; + } + + private void volume_updated_callback(VolumeAndPanPopUp sender, double volume) + { + this.volume = volume; + volume_updated(this.volume); + } + + private void panorama_updated_callback(VolumeAndPanPopUp sender, double panorama) + { + this.panorama = panorama; + panorama_updated(this.panorama); + } + + private void eq_updated_callback(EqualizerPopUp sender, int band, double val) + { + eq_updated(band, val); + } + + /*private static string time_to_string(int64 t) { + uint64 ut = (uint64)t / Time.Nanoseconds.MILLISECOND; + return Time.CLOCK_FORMAT.printf((ut / Time.Milliseconds.MINUTE), (ut / Time.Milliseconds.SECOND) % Time.Seconds.MINUTE, (ut % Time.Milliseconds.SECOND) / 100); + }*/ + public void position_duration_callback(int64 position, int64 duration) { + label_position.set_text("%s\n%s".printf(Time.time_to_string(position), Time.time_to_string(duration))); + } + + construct { + //record_state = false; + //pause_state = false; + volume = 1.0; + panorama = 0.0; + Gtk.HBox transport = new Gtk.HBox(true, 0); + //transport.add(new Gtk.Label("Test")); + label_position = new Gtk.Label((Time.CLOCK_FORMAT + "\n" + Time.CLOCK_FORMAT).printf((uint64)0,(uint64)0,(uint64)0,(uint64)0,(uint64)0,(uint64)0)); + transport.pack_end(label_position, false, false, 0); + /*progress = new Gtk.HScale.with_range(0.0, 100.0, 0.1); + progress.set_draw_value(false); + progress.value_changed.connect((s) => { label_position.set_text("%02.2f".printf(s.get_value())); }); + transport.pack_start(progress, true, true, 2); + label_duration = new Gtk.Label("100.0"); + transport.pack_start(label_duration, false, false, 0);*/ + Gtk.HButtonBox buttons = new Gtk.HButtonBox(); + record = new Gtk.ToggleButton(); //.with_label("Re"); + record.set_image(new Gtk.Image.from_icon_name("camera_video_recording", Gtk.IconSize.BUTTON)); + record.toggled.connect((b) => { record_toggled(b.active); set_recording(); }); + buttons.add(record); + play = new Gtk.Button(); //.with_label("Pl"); + play.set_image(new Gtk.Image.from_icon_name("camera_playback", Gtk.IconSize.BUTTON)); + play.clicked.connect((b) => { play_clicked(); set_playing(); }); + buttons.add(play); + pause = new Gtk.ToggleButton(); //.with_label("Pa"); + pause.set_image(new Gtk.Image.from_icon_name("camera_video_pause", Gtk.IconSize.BUTTON)); + pause.toggled.connect((b) => { pause_toggled(b.active); set_paused(); }); + buttons.add(pause); + stop = new Gtk.Button(); //.with_label("St"); + stop.set_image(new Gtk.Image.from_icon_name("camera_video_stop", Gtk.IconSize.BUTTON)); + stop.clicked.connect((b) => { stop_clicked(); set_idle(); }); + buttons.add(stop); + Gtk.Button vol = new Gtk.Button(); //.with_label("Vo"); + //Gtk.Image vol_img = new Gtk.Image.from_icon_name("general_gtalk", Gtk.IconSize.BUTTON); + vol.set_image(new Gtk.Image.from_icon_name("statusarea_volumelevel4", Gtk.IconSize.BUTTON)); + vol.clicked.connect(show_volume_and_pan); + buttons.add(vol); + Gtk.Button eq = new Gtk.Button.with_label("EQ"); + eq.clicked.connect(show_equalizer); + buttons.add(eq); + this.pack_start(buttons, false, false, 0); + this.pack_start(transport, true, true, 0); + set_idle(); + } + + private void set_recording() { + play.set_sensitive(true); + record.set_sensitive(true); + pause.set_sensitive(false); + stop.set_sensitive(false); + } + private void set_playing() { + play.set_sensitive(false); + record.set_sensitive(false); + pause.set_sensitive(true); + stop.set_sensitive(true); + } + private void set_idle() { + play.set_sensitive(true); + record.set_sensitive(true); + record.set_active(false); + pause.set_sensitive(false); + stop.set_sensitive(false); + } + private void set_paused() { + play.set_sensitive(false); + record.set_sensitive(false); + pause.set_sensitive(true); + stop.set_sensitive(true); + } + + private override void add(Gtk.Widget w) { + base.add(w); + } + + private new void pack_start(Gtk.Widget w, bool expand, bool fill, uint padding = 0) { + base.pack_start(w, expand, fill, padding); + } + + private new void pack_end(Gtk.Widget w, bool expand, bool fill, uint padding = 0) { + base.pack_start(w, expand, fill, padding); + } + + + +} + +}