RecordPipeline recordpipeline;
PlayerTransport player;
MixerBin mixer;
- uint track_counter;
+ uint track_counter { get { return (null != tracks) ? tracks.get_children().length() : 0; }}
bool recording;
bool playing;
bool encoding;
project = SettingsStructures.ProjectSettings();
recording = false;
playing = false;
- track_counter = 0;
window = new Hildon.StackableWindow();
window.destroy.connect(Gtk.main_quit);
window.delete_event.connect(on_delete_event);
}
private bool keep_screen_on() {
- if (this.recording) {
+ if (this.recording || this.playing) {
Osso.Status status = this.osso_context.display_blanking_pause();
/*if (Osso.Status.OK == status) {
stdout.printf("%s\n", "OK");
int idx = 0;
if (0 < project.tracks.length()) {
this.playing = true;
-// for (int i = 0; i < tracks.children.length(); ++i) {
-// TrackTransport tt = tracks.children.nth_data(i) as TrackTransport;
-// if (null != tt) {
-// if (tt.get_active_state()) {
-// stdout.printf("Track %s active and has been added\n", i.to_string());
-// //track.bin.set_start_time((Gst.ClockTime)(Time.Nanoseconds.SECOND * idx));
-// mixer.add_track(tt.track_bin);
-// }
-// }
-// tt = null;
-// }
- while (idx < project.tracks.length()) {
+ keep_screen_on();
+ if (0 != screen_timer_id) Source.remove(screen_timer_id);
+ screen_timer_id = Timeout.add ((uint)Time.Milliseconds.SECOND * 20, keep_screen_on);
+ var children = tracks.get_children();
+ foreach (var child in children) {
+ TrackTransport tt = child as TrackTransport;
+ if (null != tt && tt.get_active_state()) {
+ mixer.add_track(tt.track_bin);
+ }
+ }
+ //for (int i = 0; i < tracks.children.length(); ++i) {
+ //Object tt = tracks.children.nth_data(i);
+ //stdout.printf("Type %s\n",tt.get_type().name());
+ //if (null != tt) {
+ //if (tt.track_bin.IsActive) {
+ //stdout.printf("Track %s active and has been added\n", i.to_string());
+ //track.bin.set_start_time((Gst.ClockTime)(Time.Nanoseconds.SECOND * idx));
+ //mixer.add_track(tt.track_bin);
+ //}
+ //}
+ //tt = null;
+ //}
+ /*while (idx < project.tracks.length()) {
Track track = project.tracks.nth_data(idx);
if (track.active) {
- stdout.printf("Track %s active and has been added\n", idx.to_string());
+ //stdout.printf("Track %s active and has been added\n", idx.to_string());
+ stdout.printf("Track_bin %s active and has been added\n", track.bin.IsActive.to_string());
//track.bin.set_start_time((Gst.ClockTime)(Time.Nanoseconds.SECOND * idx));
mixer.add_track(track.bin);
}
++idx;
- }
+ }*/
playpipeline = new PlayPipeline("player", mixer);
this.playback_position_duration.connect(player.position_duration_callback);
playpipeline.position_duration.connect(playpipeline_position_duration_callback);
playback_timer_id = Timeout.add ((uint)Time.Milliseconds.SECOND / 10, update_time_and_duration_play_pipeline);
}
if (this.recording) {
- keep_screen_on();
- if (0 != screen_timer_id) Source.remove(screen_timer_id);
- screen_timer_id = Timeout.add ((uint)Time.Milliseconds.SECOND * 20, keep_screen_on);
+ if (!this.playing) {
+ keep_screen_on();
+ if (0 != screen_timer_id) Source.remove(screen_timer_id);
+ screen_timer_id = Timeout.add ((uint)Time.Milliseconds.SECOND * 20, keep_screen_on);
+ }
this.playback_position_duration.disconnect(player.position_duration_callback);
this.recording_position_duration.connect(player.position_duration_callback);
recordpipeline.position_duration.connect(recordpipeline_position_duration_callback);
var btnSettings = new Gtk.Button.with_label("Settings");
btnSettings.clicked.connect(show_settings);
menu.append(btnSettings);
+ var btnAbout = new Gtk.Button.with_label("About");
+ btnAbout.clicked.connect(show_about);
+ menu.append(btnAbout);
menu.show_all();
window.set_app_menu(menu);
}
+ private void show_about() {
+ AboutDialog dlg = new AboutDialog(window);
+ dlg.set_transient_for(window);
+ dlg.run();
+ dlg.destroy();
+ dlg = null;
+ }
private void show_settings() {
File settings = File.new_for_path(Environment.get_home_dir() + "/.demorecorder/settings.xml");
string errors = "";
for (int idx = ((int)project.tracks.length()) - 1; idx > -1; --idx) {
project.tracks.delete_link(project.tracks.nth(idx));
}
+ player.position_duration_callback(0, 0);
}
private void remove_track_interactive(TrackTransport tt) {
string message = "";
private void remove_track(TrackTransport tt) {
project.tracks.remove(tt.track);
tracks.remove(tt);
+ // rebuild project.tracks
+ for (int idx = (int)project.tracks.length(); idx >= 0; --idx) {
+ project.tracks.remove_link(project.tracks.nth(idx));
+ }
+ foreach (var child in tracks.get_children()) {
+ project.tracks.append(((TrackTransport)child).track);
+ }
+ project_dirty = true;
tt = null;
}
private void save_project() {
+ // rebuild track settings
+ for (int idx = (int)project.tracks.length(); idx >= 0; --idx) {
+ project.tracks.remove_link(project.tracks.nth(idx));
+ }
+ foreach (var child in tracks.get_children()) {
+ project.tracks.append(((TrackTransport)child).track);
+ }
if (0 < project.location.length) {
save_project_settings(project.location);
}