diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-07-14 17:58:45 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-07-14 17:58:45 (GMT) |
commit | 9d0d5edf372a9f681bbfd0a3639ee8fc367ce96d (patch) | |
tree | 58493507927e69bb0fb9f337845fb010900f35e3 /src/gtkext/grid.c | |
parent | beb69108d4efcebc5a6d70d0de6bdc9ea8026960 (diff) |
Setup basic features for framework GUI panels.
Diffstat (limited to 'src/gtkext/grid.c')
-rw-r--r-- | src/gtkext/grid.c | 431 |
1 files changed, 217 insertions, 214 deletions
diff --git a/src/gtkext/grid.c b/src/gtkext/grid.c index 22b2680..1b9c909 100644 --- a/src/gtkext/grid.c +++ b/src/gtkext/grid.c @@ -1,8 +1,8 @@ /* Chrysalide - Outil d'analyse de fichiers binaires - * tiledgrid.c - composant d'affichage avec des chemins vers les composants contenus + * grid.c - composant d'affichage avec des chemins vers les composants contenus * - * Copyright (C) 2018-2019 Cyrille Bagard + * Copyright (C) 2018-2024 Cyrille Bagard * * This file is part of Chrysalide. * @@ -21,36 +21,17 @@ */ -#include "tiledgrid.h" +#include "grid.h" -#include <assert.h> -#include <ctype.h> -#include <malloc.h> -#include <string.h> - +#include "grid-int.h" -#include "../core/logs.h" /* -------------------------- GESTION DES TUILES AFFICHEES -------------------------- */ -/* Informations concernant une tuile */ -typedef struct _grid_tile_t -{ - struct _grid_tile_t *parent; /* Tuile parente */ - - GtkWidget *widget; /* Support d'affichage */ - - char *path; /* Chemin d'accès */ - - struct _grid_tile_t *children[2]; /* Tuiles encastrées ou 2xNULL */ - -} grid_tile_t; - - #define IS_LEAF_TILE(t) \ ({ \ bool __result; \ @@ -60,6 +41,214 @@ typedef struct _grid_tile_t }) +/* Supprime une tuile de la mémoire. */ +static void delete_tile(grid_tile_t *); + + + +/* --------------------------- INTERFACE DU COMPOSANT GTK --------------------------- */ + + +/* Initialise la classe des conteneurs d'affichage en tuiles. */ +static void gtk_tiling_grid_class_init(GtkTilingGridClass *); + +/* Initialise une instance de conteneur d'affichage en tuiles. */ +static void gtk_tiling_grid_init(GtkTilingGrid *); + +/* Supprime toutes les références externes. */ +static void gtk_tiling_grid_dispose(GtkTilingGrid *); + +/* Procède à la libération totale de la mémoire. */ +static void gtk_tiling_grid_finalize(GtkTilingGrid *); + + + + + +/* ---------------------------------------------------------------------------------- */ +/* GESTION DES TUILES AFFICHEES */ +/* ---------------------------------------------------------------------------------- */ + + +/****************************************************************************** +* * +* Paramètres : tile = tuile à supprimer. * +* * +* Description : Supprime une tuile de la mémoire. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void delete_tile(grid_tile_t *tile) +{ + if (!IS_LEAF_TILE(tile)) + { + delete_tile(tile->children[0]); + delete_tile(tile->children[1]); + } + + else + free(tile->path); + + unref_object(tile->widget); + + free(tile); + +} + + + +/* ---------------------------------------------------------------------------------- */ +/* INTERFACE DU COMPOSANT GTK */ +/* ---------------------------------------------------------------------------------- */ + + +/* Détermine le type du conteneur d'affichage en tuiles nommées. */ +G_DEFINE_TYPE(GtkTilingGrid, gtk_tiling_grid, GTK_TYPE_WIDGET) + + +/****************************************************************************** +* * +* Paramètres : klass = classe GTK à initialiser. * +* * +* Description : Initialise la classe des conteneurs d'affichage en tuiles. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_tiling_grid_class_init(GtkTilingGridClass *klass) +{ + GObjectClass *object; /* Autre version de la classe */ + + object = G_OBJECT_CLASS(klass); + + object->dispose = (GObjectFinalizeFunc/* ! */)gtk_tiling_grid_dispose; + object->finalize = (GObjectFinalizeFunc)gtk_tiling_grid_finalize; + + g_signal_new("station-created", + GTK_TYPE_TILING_GRID, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(GtkTilingGridClass, station_created), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, GTK_TYPE_WIDGET/*DOCK_STATION FIXME */); + +} + + +/****************************************************************************** +* * +* Paramètres : tgrid = instance GTK à initialiser. * +* * +* Description : Initialise une instance de conteneur d'affichage en tuiles. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_tiling_grid_init(GtkTilingGrid *tgrid) +{ + tgrid->tiles = NULL; + + tgrid->def_panel = NULL; + +} + + +/****************************************************************************** +* * +* Paramètres : grid = instance d'objet GLib à traiter. * +* * +* Description : Supprime toutes les références externes. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_tiling_grid_dispose(GtkTilingGrid *grid) +{ + if (grid->tiles != NULL) + { + delete_tile(grid->tiles); + grid->tiles = NULL; + } + + g_clear_object(&grid->def_panel); + + G_OBJECT_CLASS(gtk_tiling_grid_parent_class)->dispose(G_OBJECT(grid)); + +} + + +/****************************************************************************** +* * +* Paramètres : grid = instance d'objet GLib à traiter. * +* * +* Description : Procède à la libération totale de la mémoire. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_tiling_grid_finalize(GtkTilingGrid *grid) +{ + G_OBJECT_CLASS(gtk_tiling_grid_parent_class)->finalize(G_OBJECT(grid)); + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Crée une nouvelle instance de conteneur avec tuiles. * +* * +* Retour : Composant GTK mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget *gtk_tiling_grid_new(void) +{ + GtkWidget *result; /* Instance à retourner */ + + result = g_object_new(GTK_TYPE_TILING_GRID, NULL); + + return result; + +} + + + + + + +#if 0 + + +#include <assert.h> +#include <ctype.h> +#include <malloc.h> +#include <string.h> + + +#include "../core/logs.h" + + + /* Valide un chemin d'accès à une tuile. */ static bool is_valid_tile_path(const char *); @@ -70,7 +259,7 @@ static grid_tile_t *create_leaf_tile(const char *, GtkTiledGrid *); static grid_tile_t *create_inter_tile(grid_tile_t *, bool, grid_tile_t *, grid_tile_t *); /* Supprime une tuile de la mémoire. */ -static void delete_tile(grid_tile_t *); +//static void delete_tile(grid_tile_t *); /* Calcule la taille comme entre un chemin et celui d'une tuile. */ static size_t compute_tile_score(const grid_tile_t *, const char *); @@ -92,40 +281,6 @@ static void collapse_tile(grid_tile_t *, grid_tile_t *); /* --------------------------- INTERFACE DU COMPOSANT GTK --------------------------- */ -/* Conteneur pour un affichage en tuiles nommées (instance) */ -struct _GtkTiledGrid -{ - GtkBin parent; /* A laisser en premier */ - - grid_tile_t *tiles; /* Tuiles représentées */ - - GPanelItem *def_panel; /* Panneau principal par défaut*/ - -}; - -/* Conteneur pour un affichage en tuiles nommées (classe) */ -struct _GtkTiledGridClass -{ - GtkBinClass parent; /* A laisser en premier */ - - /* Signaux */ - - void (* station_created) (GtkTiledGrid *, GtkDockStation *, gpointer); - -}; - - -/* Initialise la classe des conteneurs d'affichage en tuiles. */ -static void gtk_tiled_grid_class_init(GtkTiledGridClass *); - -/* Initialise une instance de conteneur d'affichage en tuiles. */ -static void gtk_tiled_grid_init(GtkTiledGrid *); - -/* Supprime toutes les références externes. */ -static void gtk_tiled_grid_dispose(GtkTiledGrid *); - -/* Procède à la libération totale de la mémoire. */ -static void gtk_tiled_grid_finalize(GtkTiledGrid *); @@ -186,7 +341,7 @@ static bool is_valid_tile_path(const char *path) /****************************************************************************** * * * Paramètres : path = chemin d'accès à la future tuile. * -* Paramètres : tgrid = conteneur d'affichage en tuiles à manipuler. * +* tgrid = conteneur d'affichage en tuiles à manipuler. * * * * Description : Crée une tuile finale d'affichage de panneaux. * * * @@ -278,35 +433,6 @@ static grid_tile_t *create_inter_tile(grid_tile_t *parent, bool horiz, grid_tile } -/****************************************************************************** -* * -* Paramètres : tile = tuile à supprimer. * -* * -* Description : Supprime une tuile de la mémoire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void delete_tile(grid_tile_t *tile) -{ - if (!IS_LEAF_TILE(tile)) - { - delete_tile(tile->children[0]); - delete_tile(tile->children[1]); - } - - else - free(tile->path); - - g_object_unref(G_OBJECT(tile->widget)); - - free(tile); - -} - /****************************************************************************** * * @@ -659,132 +785,6 @@ static grid_tile_t *find_tile_for_widget(grid_tile_t *tile, GtkWidget *widget) -/* ---------------------------------------------------------------------------------- */ -/* INTERFACE DU COMPOSANT GTK */ -/* ---------------------------------------------------------------------------------- */ - - -/* Détermine le type du conteneur d'affichage en tuiles nommées. */ -G_DEFINE_TYPE(GtkTiledGrid, gtk_tiled_grid, GTK_TYPE_BIN) - - -/****************************************************************************** -* * -* Paramètres : klass = classe GTK à initialiser. * -* * -* Description : Initialise la classe des conteneurs d'affichage en tuiles. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_tiled_grid_class_init(GtkTiledGridClass *klass) -{ - GObjectClass *object; /* Autre version de la classe */ - - object = G_OBJECT_CLASS(klass); - - object->dispose = (GObjectFinalizeFunc/* ! */)gtk_tiled_grid_dispose; - object->finalize = (GObjectFinalizeFunc)gtk_tiled_grid_finalize; - - g_signal_new("station-created", - GTK_TYPE_TILED_GRID, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GtkTiledGridClass, station_created), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, GTK_TYPE_DOCK_STATION); - -} - - -/****************************************************************************** -* * -* Paramètres : tgrid = instance GTK à initialiser. * -* * -* Description : Initialise une instance de conteneur d'affichage en tuiles. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_tiled_grid_init(GtkTiledGrid *tgrid) -{ - tgrid->tiles = NULL; - - tgrid->def_panel = NULL; - -} - - -/****************************************************************************** -* * -* Paramètres : tgrid = instance d'objet GLib à traiter. * -* * -* Description : Supprime toutes les références externes. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_tiled_grid_dispose(GtkTiledGrid *tgrid) -{ - if (tgrid->tiles != NULL) - { - delete_tile(tgrid->tiles); - tgrid->tiles = NULL; - } - - g_clear_object(&tgrid->def_panel); - - G_OBJECT_CLASS(gtk_tiled_grid_parent_class)->dispose(G_OBJECT(tgrid)); - -} - - -/****************************************************************************** -* * -* Paramètres : tgrid = instance d'objet GLib à traiter. * -* * -* Description : Procède à la libération totale de la mémoire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void gtk_tiled_grid_finalize(GtkTiledGrid *tgrid) -{ - G_OBJECT_CLASS(gtk_tiled_grid_parent_class)->finalize(G_OBJECT(tgrid)); - -} - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Crée une nouvelle instance de conteneur avec tuiles. * -* * -* Retour : Composant GTK mis en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkWidget *gtk_tiled_grid_new(void) -{ - return g_object_new(GTK_TYPE_TILED_GRID, NULL); - -} - /****************************************************************************** * * @@ -1141,3 +1141,6 @@ void gtk_tiled_grid_save_positions(const GtkTiledGrid *tgrid, GGenConfig *config visit_tiles_for_saving(tgrid->tiles, "gui.panels.positions.R"); } + + +#endif |