only allow transitions to be added when the last object isn't a transition
authorBrandon Lewis <brandon@collabora.co.uk>
Tue, 3 Aug 2010 17:31:23 +0000 (19:31 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Thu, 2 Sep 2010 16:04:29 +0000 (18:04 +0200)
tests/examples/ges-ui.c
tests/examples/ges-ui.glade

index 0a24319e07e4305c39ab022d4cff1134d56f347a..d6c602868cbd5b7abe66d878b0d947c8736b6ce0 100644 (file)
@@ -72,6 +72,8 @@ void app_add_title (App * app);
 
 void app_add_test (App * app);
 
+void app_add_transition (App * app);
+
 GList *app_get_selected_objects (App * app);
 
 void app_delete_objects (App * app, GList * objects);
@@ -92,6 +94,8 @@ void add_text_activate_cb (GtkAction * item, App * app);
 
 void add_test_activate_cb (GtkAction * item, App * app);
 
+void add_transition_activate_cb (GtkAction * item, App * app);
+
 void app_selection_changed_cb (GtkTreeSelection * selection, App * app);
 
 void app_toggle_playback (App * app);
@@ -150,7 +154,8 @@ static void
 update_add_transition_sensitivity (App * app)
 {
   gtk_action_set_sensitive (app->add_transition,
-      (app->can_add_transition) && (app->state != GST_STATE_PLAYING));
+      (app->can_add_transition) &&
+      (app->state != GST_STATE_PLAYING) && (app->n_objects));
 }
 
 /* UI callbacks  ************************************************************/
@@ -215,6 +220,12 @@ add_test_activate_cb (GtkAction * item, App * app)
   app_add_test (app);
 }
 
+void
+add_transition_activate_cb (GtkAction * item, App * app)
+{
+  app_add_transition (app);
+}
+
 void
 play_activate_cb (GtkAction * item, App * app)
 {
@@ -570,6 +581,21 @@ app_add_test (App * app)
       (app->layer), obj, -1);
 }
 
+void
+app_add_transition (App * app)
+{
+  GESTimelineObject *obj;
+
+  GST_DEBUG ("adding transition");
+
+  obj = GES_TIMELINE_OBJECT (ges_timeline_transition_new
+      (GES_VIDEO_TRANSITION_TYPE_CROSSFADE));
+  g_object_set (G_OBJECT (obj), "duration", GST_SECOND, NULL);
+
+  ges_simple_timeline_layer_add_object (GES_SIMPLE_TIMELINE_LAYER
+      (app->layer), obj, -1);
+}
+
 App *
 app_new (void)
 {
@@ -738,12 +764,19 @@ layer_object_added_cb (GESTimelineLayer * layer, GESTimelineObject * object,
     gtk_list_store_set (app->model, &iter, 2, object, 0, "Test Source", -1);
   }
 
+  else if (GES_IS_TIMELINE_TRANSITION (object)) {
+    gtk_list_store_set (app->model, &iter, 2, object, 0, "Transition", -1);
+  }
+
   g_signal_connect (G_OBJECT (object), "notify::duration",
       G_CALLBACK (timeline_object_notify_duration_cb), app);
   timeline_object_notify_duration_cb (object, NULL, app);
 
   app->n_objects++;
   object_count_changed (app);
+
+  app->can_add_transition = !GES_IS_TIMELINE_TRANSITION (object);
+  update_add_transition_sensitivity (app);
 }
 
 static void
@@ -751,6 +784,7 @@ layer_object_removed_cb (GESTimelineLayer * layer, GESTimelineObject * object,
     App * app)
 {
   GtkTreeIter iter;
+  GList *tmp;
 
   GST_INFO ("layer object removed cb %p %p %p", layer, object, app);
 
@@ -762,6 +796,11 @@ layer_object_removed_cb (GESTimelineLayer * layer, GESTimelineObject * object,
   object_count_changed (app);
 
   gtk_list_store_remove (app->model, &iter);
+  tmp = g_list_last (GES_SIMPLE_TIMELINE_LAYER (app->layer)->objects);
+  if (tmp) {
+    app->can_add_transition = !GES_IS_TIMELINE_TRANSITION (tmp->data);
+  }
+  update_add_transition_sensitivity (app);
 }
 
 static void
index bb22dcb379a63fc6df6466d9c6e66db91bef6e39..754fbea3cc6310d4b2ce411d3939242a3f7a0283 100644 (file)
     <property name="label">Add Transtion</property>
     <property name="short_label">Add Transition</property>
     <property name="icon_name">media-playlist-shuffle</property>
+    <signal name="activate" handler="add_transition_activate_cb"/>
   </object>
 </interface>