summaryrefslogtreecommitdiff
path: root/src/gtkext/grid.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkext/grid.c')
-rw-r--r--src/gtkext/grid.c431
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