diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-07-20 23:23:43 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-07-20 23:23:43 (GMT) |
commit | e4ccb9e56e822628e299527fee0b7325f0d25662 (patch) | |
tree | 10d5eb35fad4ba01b757d4c403c912f209eacb3e /src/gui/panel.c | |
parent | 9d0d5edf372a9f681bbfd0a3639ee8fc367ce96d (diff) |
Prepare a welcome screen.
Diffstat (limited to 'src/gui/panel.c')
-rw-r--r-- | src/gui/panel.c | 300 |
1 files changed, 194 insertions, 106 deletions
diff --git a/src/gui/panel.c b/src/gui/panel.c index 5b21620..6621c4e 100644 --- a/src/gui/panel.c +++ b/src/gui/panel.c @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * panel.c - gestion des éléments réactifs spécifiques aux panneaux * - * Copyright (C) 2019 Cyrille Bagard + * Copyright (C) 2019-2024 Cyrille Bagard * * This file is part of Chrysalide. * @@ -25,24 +25,14 @@ #include "panel.h" -#include <assert.h> -#include <stdio.h> -#include <string.h> +#include "panel-int.h" -#include "panel-int.h" -#include "core/global.h" -#include "core/items.h" -#include "../common/extstr.h" -#include "../core/params.h" -#include "../gtkext/gtkdockable-int.h" -#include "../gtkext/named.h" -#include "../plugins/dt.h" -#include "../plugins/pglist.h" + +/* ---------------------- MANIPULATIONS D'UN PANNEAU GRAPHIQUE ---------------------- */ -/* ------------------------- COEUR DES PANNEAUX D'AFFICHAGE ------------------------- */ /* Initialise la classe des panneaux graphiques de l'éditeur. */ @@ -51,51 +41,18 @@ static void g_panel_item_class_init(GPanelItemClass *); /* Initialise une instance de panneau graphique pour l'éditeur. */ static void g_panel_item_init(GPanelItem *); -/* Procède à l'initialisation de l'interface d'incrustation. */ -static void g_panel_item_dockable_interface_init(GtkDockableInterface *); - /* Supprime toutes les références externes. */ static void g_panel_item_dispose(GPanelItem *); /* Procède à la libération totale de la mémoire. */ static void g_panel_item_finalize(GPanelItem *); -/* Construit la chaîne d'accès à un élément de configuration. */ -static char *gtk_panel_item_class_build_configuration_key(const GPanelItemClass *, const char *); -/* Fournit le nom court du composant encapsulable. */ -static char *gtk_panel_item_get_name(const GPanelItem *); -/* Fournit le nom long du composant encapsulable. */ -static char *gtk_panel_item_get_desc(const GPanelItem *); - -/* Détermine si un panneau peut être filtré. */ -static bool gtk_panel_item_can_search(const GPanelItem *); - -/* Fournit le composant graphique intégrable dans un ensemble. */ -static GtkWidget *gtk_panel_item_get_widget(GPanelItem *); - -/* Démarre l'actualisation du filtrage du contenu. */ -static void gtk_panel_item_update_filtered(GPanelItem *, const char *); - - - -/* ---------------------- MECANISMES DE MISE A JOUR DE PANNEAU ---------------------- */ - - -/* Présente une copie de l'affichage du composant rafraîchi. */ -static gboolean g_panel_item_draw_mask(GtkWidget *, cairo_t *, GPanelItem *); - - - -/* ---------------------------------------------------------------------------------- */ -/* COEUR DES PANNEAUX D'AFFICHAGE */ -/* ---------------------------------------------------------------------------------- */ /* 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)); +G_DEFINE_TYPE(GPanelItem, g_panel_item, G_TYPE_OBJECT); /****************************************************************************** @@ -113,37 +70,12 @@ G_DEFINE_TYPE_WITH_CODE(GPanelItem, g_panel_item, G_TYPE_EDITOR_ITEM, static void g_panel_item_class_init(GPanelItemClass *class) { GObjectClass *object; /* Autre version de la classe */ - GEditorItemClass *item; /* Encore une autre vision... */ object = G_OBJECT_CLASS(class); object->dispose = (GObjectFinalizeFunc/* ! */)g_panel_item_dispose; object->finalize = (GObjectFinalizeFunc)g_panel_item_finalize; - item = G_EDITOR_ITEM_CLASS(class); - - item->get_widget = (get_item_widget_fc)gtk_panel_item_get_widget; - - class->get_personality = gtk_panel_item_class_get_personality_singleton; - class->dock_at_startup = gtk_panel_item_class_return_true; - class->can_search = gtk_panel_item_class_return_false; - - g_signal_new("dock-request", - G_TYPE_PANEL_ITEM, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GPanelItemClass, dock_request), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - g_signal_new("undock-request", - G_TYPE_PANEL_ITEM, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GPanelItemClass, undock_request), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - } @@ -161,23 +93,23 @@ static void g_panel_item_class_init(GPanelItemClass *class) static void g_panel_item_init(GPanelItem *item) { - item->docked = false; + //item->docked = false; - item->widget = NULL; - item->cached_widget = NULL; + //item->widget = NULL; + //item->cached_widget = NULL; - item->filter = NULL; + //item->filter = NULL; - g_atomic_int_set(&item->switched, 0); + //g_atomic_int_set(&item->switched, 0); } /****************************************************************************** * * -* Paramètres : iface = interface GTK à initialiser. * +* Paramètres : item = instance d'objet GLib à traiter. * * * -* Description : Procède à l'initialisation de l'interface d'incrustation. * +* Description : Supprime toutes les références externes. * * * * Retour : - * * * @@ -185,14 +117,12 @@ static void g_panel_item_init(GPanelItem *item) * * ******************************************************************************/ -static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface) +static void g_panel_item_dispose(GPanelItem *item) { - iface->get_name = (get_dockable_name_fc)gtk_panel_item_get_name; - iface->get_desc = (get_dockable_desc_fc)gtk_panel_item_get_desc; - iface->can_search = (can_dockable_search_fc)gtk_panel_item_can_search; + //g_clear_object(&item->widget); + //g_clear_object(&item->cached_widget); - iface->get_widget = (get_dockable_widget_fc)gtk_panel_item_get_widget; - iface->update_filtered = (update_filtered_data_fc)gtk_panel_item_update_filtered; + G_OBJECT_CLASS(g_panel_item_parent_class)->dispose(G_OBJECT(item)); } @@ -201,7 +131,7 @@ static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface) * * * Paramètres : item = instance d'objet GLib à traiter. * * * -* Description : Supprime toutes les références externes. * +* Description : Procède à la libération totale de la mémoire. * * * * Retour : - * * * @@ -209,58 +139,99 @@ static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface) * * ******************************************************************************/ -static void g_panel_item_dispose(GPanelItem *item) +static void g_panel_item_finalize(GPanelItem *item) { - g_clear_object(&item->widget); - g_clear_object(&item->cached_widget); + G_OBJECT_CLASS(g_panel_item_parent_class)->finalize(G_OBJECT(item)); - G_OBJECT_CLASS(g_panel_item_parent_class)->dispose(G_OBJECT(item)); +} + + +/****************************************************************************** +* * +* Paramètres : item = définition de panneau à consulter. * +* * +* Description : Fournit une indication sur la personnalité du panneau. * +* * +* Retour : Identifiant lié à la nature du panneau. * +* * +* Remarques : - * +* * +******************************************************************************/ + +PanelItemPersonality g_panel_item_get_personality(const GPanelItem *item) +{ + PanelItemPersonality result; /* Personnalité à retourner */ + GPanelItemClass *class; /* Classe à actionner */ + + class = G_PANEL_ITEM_GET_CLASS(item); + + result = class->get_personality(item); + + return result; } /****************************************************************************** * * -* Paramètres : item = instance d'objet GLib à traiter. * +* Paramètres : item = définition de panneau à manipuler. * * * -* Description : Procède à la libération totale de la mémoire. * +* Description : Fournit un composant pour lancer l'activité d'un panneau. * * * -* Retour : - * +* Retour : Composant GTK (déjà ?) mis en place. * * * * Remarques : - * * * ******************************************************************************/ -static void g_panel_item_finalize(GPanelItem *item) +GtkWidget *g_panel_item_get_launcher(GPanelItem *item) { - if (item->filter != NULL) - free(item->filter); + GtkWidget *result; /* Composant à retourner */ + GPanelItemClass *class; /* Classe à actionner */ - if (item->surface != NULL) - cairo_surface_destroy(item->surface); + if (item->launcher == NULL) + { + class = G_PANEL_ITEM_GET_CLASS(item); + item->launcher = class->get_launcher(item); + } - G_OBJECT_CLASS(g_panel_item_parent_class)->finalize(G_OBJECT(item)); + result = item->launcher; + + if (result != NULL) + ref_object(result); + + return result; } /****************************************************************************** * * -* Paramètres : class = classe à consulter. * +* Paramètres : item = définition de panneau à manipuler. * * * -* Description : Fournit une indication sur la personnalité du panneau. * +* Description : Fournit un composant pour paramétrer l'activité d'un panneau.* * * -* Retour : Identifiant lié à la nature du panneau. * +* Retour : Composant GTK (déjà ?) mis en place. * * * * Remarques : - * * * ******************************************************************************/ -PanelItemPersonality gtk_panel_item_class_get_personality(const GPanelItemClass *class) +GtkWidget *g_panel_item_get_properties(GPanelItem *item) { - PanelItemPersonality result; /* Personnalité à retourner */ + GtkWidget *result; /* Composant à retourner */ + GPanelItemClass *class; /* Classe à actionner */ + + if (item->properties == NULL) + { + class = G_PANEL_ITEM_GET_CLASS(item); + item->properties = class->get_properties(item); + } - result = class->get_personality(class); + result = item->properties; + + if (result != NULL) + ref_object(result); return result; @@ -269,6 +240,120 @@ PanelItemPersonality gtk_panel_item_class_get_personality(const GPanelItemClass /****************************************************************************** * * +* Paramètres : item = définition de panneau à manipuler. * +* * +* Description : Fournit un composant représentant un panneau graphique. * +* * +* Retour : Composant GTK (déjà ?) mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkTiledPanel *g_panel_item_get_panel(GPanelItem *item) +{ + GtkTiledPanel *result; /* Composant à retourner */ + GPanelItemClass *class; /* Classe à actionner */ + + if (item->pcount == 0 /* || !singleton */) + { + class = G_PANEL_ITEM_GET_CLASS(item); + result = class->get_panel(item, item->properties); + + if (result != NULL) + { + item->panels = realloc(item->panels, ++item->pcount * sizeof(GtkTiledPanel *)); + item->panels[item->pcount - 1] = result; + } + + } + + else + result = item->panels[item->pcount - 1]; + + if (result != NULL) + ref_object(result); + + return result; + +} + + + + + + + + + + + + + +#if 0 + + +#include <assert.h> +#include <stdio.h> +#include <string.h> + + +#include "panel-int.h" +#include "core/global.h" +#include "core/items.h" +#include "../common/extstr.h" +#include "../core/params.h" +#include "../gtkext/gtkdockable-int.h" +#include "../gtkext/named.h" +#include "../plugins/dt.h" +#include "../plugins/pglist.h" + + + +/* ------------------------- COEUR DES PANNEAUX D'AFFICHAGE ------------------------- */ + + + + +/* ------------------------- COEUR D'UN PANNEAU D'AFFICHAGE ------------------------- */ + + +/* Construit la chaîne d'accès à un élément de configuration. */ +static char *gtk_panel_item_class_build_configuration_key(const GPanelItemClass *, const char *); + +/* Fournit le nom court du composant encapsulable. */ +static char *gtk_panel_item_get_name(const GPanelItem *); + +/* Fournit le nom long du composant encapsulable. */ +static char *gtk_panel_item_get_desc(const GPanelItem *); + +/* Détermine si un panneau peut être filtré. */ +static bool gtk_panel_item_can_search(const GPanelItem *); + +/* Fournit le composant graphique intégrable dans un ensemble. */ +static GtkWidget *gtk_panel_item_get_widget(GPanelItem *); + +/* Démarre l'actualisation du filtrage du contenu. */ +static void gtk_panel_item_update_filtered(GPanelItem *, const char *); + + + +/* ---------------------- MECANISMES DE MISE A JOUR DE PANNEAU ---------------------- */ + + +/* Présente une copie de l'affichage du composant rafraîchi. */ +static gboolean g_panel_item_draw_mask(GtkWidget *, cairo_t *, GPanelItem *); + + + +/* ---------------------------------------------------------------------------------- */ +/* COEUR DES PANNEAUX D'AFFICHAGE */ +/* ---------------------------------------------------------------------------------- */ + + + +/****************************************************************************** +* * * Paramètres : class = classe à consulter. * * * * Description : Fournit une indication sur la personnalité du panneau. * @@ -1117,3 +1202,6 @@ void g_panel_item_switch_to_updated_content(GPanelItem *item) g_atomic_int_dec_and_test(&item->switched); } + + +#endif |