diff options
Diffstat (limited to 'src/gtkext/graph')
-rw-r--r-- | src/gtkext/graph/cluster.c | 70 | ||||
-rw-r--r-- | src/gtkext/graph/cluster.h | 3 |
2 files changed, 72 insertions, 1 deletions
diff --git a/src/gtkext/graph/cluster.c b/src/gtkext/graph/cluster.c index 7872000..8220bfe 100644 --- a/src/gtkext/graph/cluster.c +++ b/src/gtkext/graph/cluster.c @@ -264,6 +264,8 @@ static void set_y_for_graph_rank(const graph_rank_t *, gint *); /* Détermine les ordonnées de tous les liens en place. */ static void compute_loop_link_with_graph_rank(const graph_rank_t *, const GtkAllocation *); +/* Recherche le groupe de blocs avec un composant comme chef. */ +static GGraphCluster *find_cluster_by_widget_in_graph_rank(const graph_rank_t *, GtkWidget *); /* -------------------------- DEFINITION D'UN CHEF DE FILE -------------------------- */ @@ -1776,7 +1778,7 @@ static void set_y_for_graph_rank(const graph_rank_t *grank, gint *base) static void compute_loop_link_with_graph_rank(const graph_rank_t *grank, const GtkAllocation *needed) { - size_t i; /* Boucle de parcours #1 */ + size_t i; /* Boucle de parcours */ for (i = 0; i < grank->count; i++) g_graph_cluster_compute_link_y_positions(grank->clusters[i]); @@ -1786,6 +1788,34 @@ static void compute_loop_link_with_graph_rank(const graph_rank_t *grank, const G } +/****************************************************************************** +* * +* Paramètres : grank = ensemble de blocs de même rang à analyser. * +* widget = composant graphique à retrouver. * +* * +* Description : Recherche le groupe de blocs avec un composant comme chef. * +* * +* Retour : Groupe trouvé ou NULL en cas d'échec. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static GGraphCluster *find_cluster_by_widget_in_graph_rank(const graph_rank_t *grank, GtkWidget *widget) +{ + GGraphCluster *result; /* Trouvaille à retourner */ + size_t i; /* Boucle de parcours */ + + result = NULL; + + for (i = 0; i < grank->count && result == NULL; i++) + result = g_graph_cluster_find_by_widget(grank->clusters[i], widget); + + return result; + +} + + /* ---------------------------------------------------------------------------------- */ /* DEFINITION D'UN CHEF DE FILE */ @@ -3361,6 +3391,44 @@ static void g_graph_cluster_resolve_links(const GGraphCluster *cluster) } +/****************************************************************************** +* * +* Paramètres : cluster = graphique de blocs à analyser. * +* widget = composant graphique à retrouver. * +* * +* Description : Recherche le groupe de blocs avec un composant comme chef. * +* * +* Retour : Groupe trouvé ou NULL en cas d'échec. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GGraphCluster *g_graph_cluster_find_by_widget(GGraphCluster *cluster, GtkWidget *widget) +{ + GGraphCluster *result; /* Trouvaille à retourner */ + size_t i; /* Boucle de parcours */ + + if (cluster->display == widget) + { + result = cluster; + g_object_ref(G_OBJECT(result)); + } + + else + { + result = NULL; + + for (i = 0; i < cluster->ranks_count && result == NULL; i++) + result = find_cluster_by_widget_in_graph_rank(&cluster->ranks[i], widget); + + } + + return result; + +} + + /* ---------------------------------------------------------------------------------- */ /* CALCUL DE REPARTITION DE BLOCS */ diff --git a/src/gtkext/graph/cluster.h b/src/gtkext/graph/cluster.h index 00c6d82..2a48b25 100644 --- a/src/gtkext/graph/cluster.h +++ b/src/gtkext/graph/cluster.h @@ -64,6 +64,9 @@ GtkWidget *g_graph_cluster_get_widget(GGraphCluster *); /* Dispose chaque noeud sur la surface de destination donnée. */ void g_graph_cluster_place(GGraphCluster *, GtkGraphDisplay *); +/* Recherche le groupe de blocs avec un composant comme chef. */ +GGraphCluster *g_graph_cluster_find_by_widget(GGraphCluster *, GtkWidget *); + /* ------------------------- CALCUL DE REPARTITION DE BLOCS ------------------------- */ |