diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gtkext/gtkstatusstack.c | 79 | 
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);  | 
