Reworked track settings.
[demorecorder] / src / DemoRecorder.vala
index d0172da..56b9001 100644 (file)
@@ -29,7 +29,7 @@ public class DemoRecorder : Hildon.Program {
   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;
@@ -112,7 +112,6 @@ public class DemoRecorder : Hildon.Program {
     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);
@@ -152,7 +151,7 @@ public class DemoRecorder : Hildon.Program {
   }
   
   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");
@@ -181,26 +180,38 @@ public class DemoRecorder : Hildon.Program {
     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);
@@ -212,9 +223,11 @@ public class DemoRecorder : Hildon.Program {
       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);
@@ -304,9 +317,19 @@ public class DemoRecorder : Hildon.Program {
     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 = "";
@@ -437,6 +460,7 @@ public class DemoRecorder : Hildon.Program {
     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 = "";
@@ -479,10 +503,25 @@ public class DemoRecorder : Hildon.Program {
   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);
     }