From 97c56da95bf323995662f08924e36c32ffa55803 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Mon, 1 Dec 2014 00:38:07 +0100 Subject: [PATCH] timeline: Add a method to easily check if a timeline is empty API: + ges_timeline_is_empty --- docs/libs/ges-sections.txt | 1 + ges/ges-timeline.c | 29 +++++++++++++++++++++++++++++ ges/ges-timeline.h | 1 + 3 files changed, 31 insertions(+) diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt index 9229e6915d..570caba1a3 100644 --- a/docs/libs/ges-sections.txt +++ b/docs/libs/ges-sections.txt @@ -376,6 +376,7 @@ ges_timeline_set_auto_transition ges_timeline_get_snapping_distance ges_timeline_set_snapping_distance ges_timeline_get_element +ges_timeline_is_empty GESTimelinePrivate GESTimelineClass diff --git a/ges/ges-timeline.c b/ges/ges-timeline.c index 013d7fac1c..89563eee9c 100644 --- a/ges/ges-timeline.c +++ b/ges/ges-timeline.c @@ -3187,3 +3187,32 @@ ges_timeline_get_element (GESTimeline * timeline, const gchar * name) return NULL; } + +/** + * ges_timeline_is_empty: + * @timeline: a #GESTimeline + * + * Check whether a #GESTimelineElement is empty or not + * + * Returns: %TRUE if the timeline is empty %FALSE otherwize + */ +gboolean +ges_timeline_is_empty (GESTimeline * timeline) +{ + GHashTableIter iter; + gpointer key, value; + + g_return_val_if_fail (GES_IS_TIMELINE (timeline), FALSE); + + if (g_hash_table_size (timeline->priv->all_elements) == 0) + return TRUE; + + g_hash_table_iter_init (&iter, timeline->priv->all_elements); + while (g_hash_table_iter_next (&iter, &key, &value)) { + if (GES_IS_SOURCE (value) && + ges_track_element_is_active (GES_TRACK_ELEMENT (value))) + return FALSE; + } + + return TRUE; +} diff --git a/ges/ges-timeline.h b/ges/ges-timeline.h index f1d2bf811d..bbcc83aa3e 100644 --- a/ges/ges-timeline.h +++ b/ges/ges-timeline.h @@ -126,6 +126,7 @@ void ges_timeline_set_auto_transition (GESTimeline * timeline, gboolean auto_tra GstClockTime ges_timeline_get_snapping_distance (GESTimeline * timeline); void ges_timeline_set_snapping_distance (GESTimeline * timeline, GstClockTime snapping_distance); GESTimelineElement * ges_timeline_get_element (GESTimeline * timeline, const gchar *name); +gboolean ges_timeline_is_empty (GESTimeline * timeline); G_END_DECLS