summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sf.net>2010-10-12 18:24:30 +0300
committerStefan Kost <ensonic@users.sf.net>2010-10-12 18:24:30 +0300
commit924a270f2c5bc2d377573c57559ff8d324f9704b (patch)
treec69fffb46b45a12d97c3501b817682087209b1f1
parent4a17ecfa862ac08a915aabafc8730bb550d8f040 (diff)
ui: keep the graph local to refresh_layout
Remove the instance AGraph var. Create/update/free the graph completely in refresh_layout().
-rw-r--r--src/ui/main-window.c66
1 files changed, 30 insertions, 36 deletions
diff --git a/src/ui/main-window.c b/src/ui/main-window.c
index 4f9681e..fc9ce70 100644
--- a/src/ui/main-window.c
+++ b/src/ui/main-window.c
@@ -112,8 +112,7 @@ struct _GstTLMainWindowPrivate {
GtkToggleButton *record_button, *replay_button;
GtkButton *stop_button;
- /* the graph */
- Agraph_t *graph;
+ /* graphviz context */
GVC_t *gvc;
/* arrays pointing to GstTLElement, GstTLPad, GstTLLink */
GPtrArray *elements;
@@ -216,31 +215,8 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode)
* - never add ghost-proxy pad links
* - modify pad->proxypad link to pad->ghostpad links
*/
-
- // destroy old graph
- gvFreeLayout (self->priv->gvc,self->priv->graph);
- agclose (self->priv->graph);
- // reset graph items
- arr = self->priv->elements;
- for (i = 0; i < arr->len; i++) {
- GstTLElement *item = arr->pdata[i];
- if(item)
- item->graph = NULL;
- }
- arr = self->priv->pads;
- for (i = 0; i < arr->len; i++) {
- GstTLPad *item = arr->pdata[i];
- if(item)
- item->node = NULL;
- }
- arr = self->priv->links;
- for (i = 0; i < arr->len; i++) {
- GstTLLink *item = arr->pdata[i];
- if(item)
- item->edge = NULL;
- }
-
- self->priv->graph = root = agopen ("pipelines", AGDIGRAPH);
+
+ root = agopen ("pipelines", AGDIGRAPH);
/* set default attributes */
agsafeset (root, "rankdir", "LR", "LR");
agsafeset (root, "labelloc", "t", "t");
@@ -253,7 +229,7 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode)
agnodeattr (root, "margin", "0.0,0.0");
agnodeattr (root, "shape", "box");
- TRACE("refresh layout, root=%p, mode=%d",self->priv->graph,mode);
+ TRACE("refresh layout, root=%p, mode=%d",root,mode);
// add elements/bins
arr = self->priv->elements;
@@ -395,9 +371,9 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode)
gchar __fname[50];
sprintf (__fname, "/tmp/gsttl_%03d.dot", __ct);
- gvRenderFilename (self->priv->gvc, self->priv->graph, "dot", __fname);
+ gvRenderFilename (self->priv->gvc, root, "dot", __fname);
//sprintf (__fname, "/tmp/gsttl_%03d.png", __ct);
- //gvRenderFilename (self->priv->gvc, self->priv->graph, "png", "/tmp/gsttlgraph.png");
+ //gvRenderFilename (self->priv->gvc, root, "png", "/tmp/gsttlgraph.png");
__ct++;
}
#endif
@@ -713,6 +689,29 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode)
}
g_slice_free1 (sizeof(guint)*self->priv->elements->len, bin_z_order);
+
+ // destroy graph
+ gvFreeLayout (self->priv->gvc,root);
+ agclose (root);
+ // reset graph items
+ arr = self->priv->elements;
+ for (i = 0; i < arr->len; i++) {
+ GstTLElement *item = arr->pdata[i];
+ if(item)
+ item->graph = NULL;
+ }
+ arr = self->priv->pads;
+ for (i = 0; i < arr->len; i++) {
+ GstTLPad *item = arr->pdata[i];
+ if(item)
+ item->node = NULL;
+ }
+ arr = self->priv->links;
+ for (i = 0; i < arr->len; i++) {
+ GstTLLink *item = arr->pdata[i];
+ if(item)
+ item->edge = NULL;
+ }
}
/* event handler */
@@ -1203,9 +1202,6 @@ gsttl_main_window_finalize (GObject *object)
}
g_ptr_array_free (self->priv->links, TRUE);
- gvFreeLayout (self->priv->gvc,self->priv->graph);
- agclose (self->priv->graph);
-
gvFreeContext (self->priv->gvc);
}
@@ -1223,9 +1219,7 @@ gsttl_main_window_init (GstTLMainWindow *self)
self->priv->zoom = 1.0;
self->priv->gvc = gvContext ();
- // FIXME: do we want to hook pipeline creation and create a subgraph per pipe?
- // gst_bin_new() could also help us with other issues
- self->priv->graph = agopen ("pipelines", AGDIGRAPH);
+
self->priv->elements = g_ptr_array_new ();
self->priv->pads = g_ptr_array_new ();
self->priv->links = g_ptr_array_new ();