summaryrefslogtreecommitdiff
path: root/src/gtkext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-08-28 21:42:49 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-08-28 21:42:49 (GMT)
commit279ed42e7b1b8d9d0ae95c67972c7009e504cc92 (patch)
tree834976b6c830a4a57c06ecfff6e6ca388efb50f0 /src/gtkext
parent6b25e01d08db15c039a17ce00ac4c103d61364f5 (diff)
Used a GtkStack widget to display the editor status information.
Diffstat (limited to 'src/gtkext')
-rw-r--r--src/gtkext/gtkstatusstack.c79
1 files changed, 29 insertions, 50 deletions
diff --git a/src/gtkext/gtkstatusstack.c b/src/gtkext/gtkstatusstack.c
index 789661e..cf9e525 100644
--- a/src/gtkext/gtkstatusstack.c
+++ b/src/gtkext/gtkstatusstack.c
@@ -52,20 +52,22 @@ typedef struct _progress_info progress_info;
/* Abstration d'une gestion de barre de statut (instance) */
struct _GtkStatusStack
{
- GtkBin parent; /* A laisser en premier */
+ GtkBox parent; /* A laisser en premier */
- GtkWidget *asm_status; /* Barre de status d'assemblage*/
- assembly_info *asm_info; /* Informations courantes */
+ GtkStack *main; /* Pile d'informations associée*/
- GtkWidget *prog_status; /* Barre de status d'activité */
- progress_info *prog_info; /* Informations courantes */
+ GObject *asm_ref; /* Espace de référencements #1 */
+ assembly_info *asm_info; /* Informations courantes #1 */
+
+ GObject *prog_ref; /* Espace de référencements #2 */
+ progress_info *prog_info; /* Informations courantes #2 */
};
/* Abstration d'une gestion de barre de statut (classe) */
struct _GtkStatusStackClass
{
- GtkBinClass parent; /* A laisser en premier */
+ GtkBoxClass parent; /* A laisser en premier */
};
@@ -82,9 +84,6 @@ static void gtk_status_stack_dispose(GtkStatusStack *);
/* Procède à la libération totale de la mémoire. */
static void gtk_status_stack_finalize(GtkStatusStack *);
-/* S'assure de l'affichage du niveau de pile attendu. */
-static void gtk_status_stack_switch(GtkStatusStack *, GtkWidget *);
-
/* -------------------- STATUT DES INFORMATIONS DE DESASSEMBLAGE -------------------- */
@@ -178,7 +177,7 @@ static gboolean gtk_status_stack_show_current_activity(GtkStatusStack *);
/* Détermine le type de la barre de statut améliorée. */
-G_DEFINE_TYPE(GtkStatusStack, gtk_status_stack, GTK_TYPE_BIN)
+G_DEFINE_TYPE(GtkStatusStack, gtk_status_stack, GTK_TYPE_BOX)
/******************************************************************************
@@ -219,12 +218,26 @@ static void gtk_status_stack_class_init(GtkStatusStackClass *klass)
static void gtk_status_stack_init(GtkStatusStack *stack)
{
- stack->asm_status = build_assembly_status_stack(stack);
+ GtkWidget *layer; /* Couche à empiler */
+
+ gtk_orientable_set_orientation(GTK_ORIENTABLE(stack), GTK_ORIENTATION_HORIZONTAL);
+
+ stack->main = GTK_STACK(gtk_stack_new());
+ gtk_widget_show(GTK_WIDGET(stack->main));
+ gtk_box_pack_start(GTK_BOX(stack), GTK_WIDGET(stack->main), TRUE, TRUE, 8);
+
+ layer = build_assembly_status_stack(stack);
+ gtk_stack_add_named(stack->main, layer, "asm_info");
+
+ stack->asm_ref = G_OBJECT(layer);
stack->asm_info = (assembly_info *)calloc(1, sizeof(assembly_info));
reset_assembly_info(stack->asm_info);
- stack->prog_status = build_progress_status_stack(stack);
+ layer = build_progress_status_stack(stack);
+ gtk_stack_add_named(stack->main, layer, "prog_info");
+
+ stack->prog_ref = G_OBJECT(layer);
stack->prog_info = (progress_info *)calloc(1, sizeof(progress_info));
reset_progress_info(stack->prog_info);
@@ -248,8 +261,6 @@ static void gtk_status_stack_init(GtkStatusStack *stack)
static void gtk_status_stack_dispose(GtkStatusStack *stack)
{
- g_object_unref(G_OBJECT(stack->asm_status));
-
G_OBJECT_CLASS(gtk_status_stack_parent_class)->dispose(G_OBJECT(stack));
}
@@ -299,38 +310,6 @@ GtkWidget *gtk_status_stack_new(void)
}
-/******************************************************************************
-* *
-* Paramètres : stack = pile de statuts à considérer. *
-* next = niveau de pile à afficher désormais. *
-* *
-* Description : S'assure de l'affichage du niveau de pile attendu. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void gtk_status_stack_switch(GtkStatusStack *stack, GtkWidget *next)
-{
- GtkWidget *child; /* Support courant */
-
- child = gtk_bin_get_child(GTK_BIN(stack));
-
- if (child != next)
- {
- if (child != NULL)
- gtk_container_remove(GTK_CONTAINER(stack), child);
-
- g_object_ref(G_OBJECT(next));
- gtk_container_add(GTK_CONTAINER(stack), next);
-
- }
-
-}
-
-
/* ---------------------------------------------------------------------------------- */
/* STATUT DES INFORMATIONS DE DESASSEMBLAGE */
@@ -665,9 +644,9 @@ static gboolean gtk_status_stack_show_current_instruction(GtkStatusStack *stack)
char raw_pos[6 + VMPA_MAX_LEN + 1]; /* Formatage final en direct */
char *content; /* Contenu dynamique */
- gtk_status_stack_switch(stack, stack->asm_status);
+ gtk_stack_set_visible_child_name(stack->main, "asm_info");
- ref = G_OBJECT(stack->asm_status);
+ ref = stack->asm_ref;
info = stack->asm_info;
/* Première partie : navigation */
@@ -1139,9 +1118,9 @@ static gboolean gtk_status_stack_show_current_activity(GtkStatusStack *stack)
if (!g_source_is_destroyed(g_main_current_source()))
{
- gtk_status_stack_switch(stack, stack->prog_status);
+ gtk_stack_set_visible_child_name(stack->main, "prog_info");
- ref = G_OBJECT(stack->prog_status);
+ ref = stack->prog_ref;
info = stack->prog_info;
g_mutex_lock(&info->access);