summaryrefslogtreecommitdiff
path: root/src/gui/core/items.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/core/items.c')
-rw-r--r--src/gui/core/items.c50
1 files changed, 40 insertions, 10 deletions
diff --git a/src/gui/core/items.c b/src/gui/core/items.c
index 9c82100..6c57b7b 100644
--- a/src/gui/core/items.c
+++ b/src/gui/core/items.c
@@ -24,6 +24,7 @@
#include "items.h"
+#include <assert.h>
#include <malloc.h>
#include <string.h>
@@ -33,7 +34,7 @@
-/* Liste des éléments enregistrés */
+/* Liste des éléments en place */
static GEditorItem **_item_list = NULL;
static size_t _item_count = 0;
@@ -52,7 +53,7 @@ static void track_cursor_on_view_panel(GLoadedPanel *, const GLineCursor *, gpoi
/******************************************************************************
* *
-* Paramètres : - *
+* Paramètres : item = élément de l'interface graphique à intégrer. *
* *
* Description : Procède à l'enregistrement d'un élément reactif de l'éditeur.*
* *
@@ -75,9 +76,9 @@ void register_editor_item(GEditorItem *item)
/******************************************************************************
* *
-* Paramètres : target = désignation de l'élément réactif à retrouver. *
+* Paramètres : target = type de l'élément réactif à retrouver. *
* *
-* Description : Retrouve un élément reactif de l'éditeur par son nom clef. *
+* Description : Retrouve un élément reactif de l'éditeur par son type. *
* *
* Retour : Elément retrouvé ou NULL. *
* *
@@ -85,26 +86,24 @@ void register_editor_item(GEditorItem *item)
* *
******************************************************************************/
-GEditorItem *find_editor_item_by_key(const char *target)
+GEditorItem *find_editor_item_by_type(GType target)
{
GEditorItem *result; /* Elément à retourner */
size_t i; /* Boucle de parcours */
- char *key; /* Nom d'un élément à analyser */
+ GType type; /* Type d'un élément analysé */
result = NULL;
for (i = 0; i < _item_count && result == NULL; i++)
{
- key = g_editor_item_get_key(_item_list[i]);
+ type = G_TYPE_FROM_INSTANCE(_item_list[i]);
- if (strcmp(key, target) == 0)
+ if (type == target)
{
result = _item_list[i];
g_object_ref(G_OBJECT(result));
}
- free(key);
-
}
return result;
@@ -114,6 +113,37 @@ GEditorItem *find_editor_item_by_key(const char *target)
/******************************************************************************
* *
+* Paramètres : item = élément de l'interface graphique à oublier. *
+* *
+* Description : Retire un des éléments reactifs de l'éditeur. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void unregister_editor_item(GEditorItem *item)
+{
+ size_t i; /* Boucle de parcours */
+
+ for (i = 0; i < _item_count; i++)
+ if (_item_list[i] == item)
+ break;
+
+ assert(i < _item_count);
+
+ g_object_unref(G_OBJECT(item));
+
+ memmove(&_item_list[i], &_item_list[i + 1], (_item_count - i - 1) * sizeof(GEditorItem *));
+
+ _item_list = realloc(_item_list, --_item_count * sizeof(GEditorItem *));
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : content = nouvelle instance de contenu analysé. *
* *
* Description : Lance une actualisation du fait d'un changement de contenu. *