diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gui/panels/panel-int.h | 29 | ||||
| -rw-r--r-- | src/gui/panels/panel.c | 182 | ||||
| -rw-r--r-- | src/gui/panels/panel.h | 34 | 
3 files changed, 245 insertions, 0 deletions
| diff --git a/src/gui/panels/panel-int.h b/src/gui/panels/panel-int.h index 33b0746..d95485c 100644 --- a/src/gui/panels/panel-int.h +++ b/src/gui/panels/panel-int.h @@ -34,9 +34,13 @@  #include "../editem-int.h"  #include "../../common/dllist.h" +#include "../../glibext/delayed-int.h" +/* ------------------------- BASE D'UN PANNEAU POUR EDITEUR ------------------------- */ + +  /* Place un panneau dans l'ensemble affiché. */  typedef void (* ack_dock_process_fc) (GPanelItem *item); @@ -86,4 +90,29 @@ struct _GPanelItemClass +/* ---------------------------- AIDE POUR LA MISE A JOUR ---------------------------- */ + + +/* Procédure de mise à jour de panneau graphique (instance) */ +struct _GPanelUpdate +{ +    GDelayedWork parent;                    /* A laisser en premier        */ + +    GPanelItem *panel;                      /* Panneau à manipuler         */ +    pu_fallback_cb internal;                /* Traitement sous-traité      */ + +    const char *msg;                        /* Description de l'opération  */ +    size_t max;                             /* Nombre d'éléments à traiter */ + +}; + +/* Procédure de mise à jour de panneau graphique (classe) */ +struct _GPanelUpdateClass +{ +    GDelayedWorkClass parent;               /* A laisser en premier        */ + +}; + + +  #endif  /* _GUI_PANELS_PANEL_INT_H */ diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c index e70d57b..c9d5ecf 100644 --- a/src/gui/panels/panel.c +++ b/src/gui/panels/panel.c @@ -59,6 +59,31 @@ static char *gtk_panel_item_build_configuration_key(const GPanelItem *, const ch +/* ---------------------------- AIDE POUR LA MISE A JOUR ---------------------------- */ + + +/* Initialise la classe des tâches des mises à jour de panneaux. */ +static void g_panel_update_class_init(GPanelUpdateClass *); + +/* Initialise une tâche d'étude de routines. */ +static void g_panel_update_init(GPanelUpdate *); + +/* Supprime toutes les références externes. */ +static void g_panel_update_dispose(GPanelUpdate *); + +/* Procède à la libération totale de la mémoire. */ +static void g_panel_update_finalize(GPanelUpdate *); + +/* Assure la mise à jour d'un panneau en différé. */ +static void g_panel_update_process(GPanelUpdate *, GtkStatusStack *); + + + +/* ---------------------------------------------------------------------------------- */ +/*                           BASE D'UN PANNEAU POUR EDITEUR                           */ +/* ---------------------------------------------------------------------------------- */ + +  /* Indique le type défini pour un élément destiné à un panneau. */  G_DEFINE_TYPE_WITH_CODE(GPanelItem, g_panel_item, G_TYPE_EDITOR_ITEM,                          G_IMPLEMENT_INTERFACE(GTK_TYPE_DOCKABLE, g_panel_item_dockable_interface_init)) @@ -550,3 +575,160 @@ void g_panel_item_undock(GPanelItem *item)          G_PANEL_ITEM_GET_CLASS(item)->ack_undock(item);  } + + + +/* ---------------------------------------------------------------------------------- */ +/*                              AIDE POUR LA MISE A JOUR                              */ +/* ---------------------------------------------------------------------------------- */ + + +/* Indique le type défini pour les tâches d'étude de routines. */ +G_DEFINE_TYPE(GPanelUpdate, g_panel_update, G_TYPE_DELAYED_WORK); + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : klass = classe à initialiser.                                * +*                                                                             * +*  Description : Initialise la classe des tâches des mises à jour de panneaux.* +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_panel_update_class_init(GPanelUpdateClass *klass) +{ +    GObjectClass *object;                   /* Autre version de la classe  */ +    GDelayedWorkClass *work;                /* Version en classe parente   */ + +    object = G_OBJECT_CLASS(klass); + +    object->dispose = (GObjectFinalizeFunc/* ! */)g_panel_update_dispose; +    object->finalize = (GObjectFinalizeFunc)g_panel_update_finalize; + +    work = G_DELAYED_WORK_CLASS(klass); + +    work->run = (run_task_fc)g_panel_update_process; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : update = instance à initialiser.                             * +*                                                                             * +*  Description : Initialise une tâche d'étude de routines.                    * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_panel_update_init(GPanelUpdate *update) +{ + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : update = instance d'objet GLib à traiter.                    * +*                                                                             * +*  Description : Supprime toutes les références externes.                     * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_panel_update_dispose(GPanelUpdate *update) +{ +    g_object_unref(G_OBJECT(update->panel)); + +    G_OBJECT_CLASS(g_panel_update_parent_class)->dispose(G_OBJECT(update)); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : update = instance d'objet GLib à traiter.                    * +*                                                                             * +*  Description : Procède à la libération totale de la mémoire.                * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_panel_update_finalize(GPanelUpdate *update) +{ +    G_OBJECT_CLASS(g_panel_update_parent_class)->finalize(G_OBJECT(update)); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : panel    = panneau graphique devant être actualisé.          * +*                msg      = description de l'activité à présenter.            * +*                max      = marge de progression à attendre.                  * +*                internal = procédure de sous-traitance à appeler.            * +*                                                                             * +*  Description : Crée une tâche de mise à jour non bloquante.                 * +*                                                                             * +*  Retour      : Tâche créée.                                                 * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +GPanelUpdate *g_panel_update_new(GPanelItem *panel, const char *msg, size_t max, pu_fallback_cb internal) +{ +    GPanelUpdate *result;                   /* Tâche à retourner           */ + +    result = g_object_new(G_TYPE_PANEL_UPDATE, NULL); + +    g_object_ref(G_OBJECT(panel)); +    result->panel = panel; + +    result->internal = internal; + +    result->msg = msg; +    result->max = max; + +    return result; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : update = étude de routines à mener.                          * +*                status = barre de statut à tenir informée.                   * +*                                                                             * +*  Description : Assure la mise à jour d'un panneau en différé.               * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_panel_update_process(GPanelUpdate *update, GtkStatusStack *status) +{ +    activity_id_t id;                       /* Identifiant de progression  */ + +    id = gtk_status_stack_add_activity(status, update->msg, update->max); + +    update->internal(update->panel, status, id); + +    gtk_status_stack_remove_activity(status, id); + +} diff --git a/src/gui/panels/panel.h b/src/gui/panels/panel.h index bdeffcc..b293fd3 100644 --- a/src/gui/panels/panel.h +++ b/src/gui/panels/panel.h @@ -31,9 +31,13 @@  #include "../editem.h"  #include "../../glibext/configuration.h" +#include "../../gtkext/gtkstatusstack.h" +/* ------------------------- BASE D'UN PANNEAU POUR EDITEUR ------------------------- */ + +  #define G_TYPE_PANEL_ITEM               g_panel_item_get_type()  #define G_PANEL_ITEM(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_panel_item_get_type(), GPanelItem))  #define G_IS_PANEL_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_panel_item_get_type())) @@ -101,4 +105,34 @@ void g_panel_item_undock(GPanelItem *); +/* ---------------------------- AIDE POUR LA MISE A JOUR ---------------------------- */ + + +#define G_TYPE_PANEL_UPDATE            g_panel_update_get_type() +#define G_PANEL_UPDATE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_PANEL_UPDATE, GRoutinesStudy)) +#define G_IS_PANEL_UPDATE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_PANEL_UPDATE)) +#define G_PANEL_UPDATE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_PANEL_UPDATE, GRoutinesStudyClass)) +#define G_IS_PANEL_UPDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_PANEL_UPDATE)) +#define G_PANEL_UPDATE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_PANEL_UPDATE, GRoutinesStudyClass)) + + +/* Procédure de mise à jour de panneau graphique (instance) */ +typedef struct _GPanelUpdate GPanelUpdate; + +/* Procédure de mise à jour de panneau graphique (classe) */ +typedef struct _GPanelUpdateClass GPanelUpdateClass; + + +/* Assure l'étude des routines en différé. */ +typedef void (* pu_fallback_cb) (GPanelItem *, GtkStatusStack *, activity_id_t); + + +/* Indique le type défini pour les tâches d'étude de routines. */ +GType g_panel_update_get_type(void); + +/* Crée une tâche de mise à jour non bloquante. */ +GPanelUpdate *g_panel_update_new(GPanelItem *, const char *, size_t, pu_fallback_cb); + + +  #endif  /* _GUI_PANELS_PANEL_H */ | 
