diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2020-08-08 21:37:21 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2020-08-08 21:37:21 (GMT) |
commit | 4370d2d77d623f560c7df94a3bc15b1395e4878b (patch) | |
tree | 57cc6268f504c19aaac3b1adda4295ed3b1ddc7f /src/gui/core | |
parent | 34d28c7418342d3c67be4747b13cdcb124edda32 (diff) |
Updated all the code relative to GUI items.
Diffstat (limited to 'src/gui/core')
-rw-r--r-- | src/gui/core/items.c | 106 | ||||
-rw-r--r-- | src/gui/core/items.h | 6 | ||||
-rw-r--r-- | src/gui/core/panels.c | 9 |
3 files changed, 80 insertions, 41 deletions
diff --git a/src/gui/core/items.c b/src/gui/core/items.c index 71e7df0..9c82100 100644 --- a/src/gui/core/items.c +++ b/src/gui/core/items.c @@ -24,14 +24,18 @@ #include "items.h" +#include <malloc.h> +#include <string.h> + + #include "global.h" -#include "../editem-int.h" #include "../../analysis/db/items/move.h" /* Liste des éléments enregistrés */ -static GEditorItem *_editem_list = NULL; +static GEditorItem **_item_list = NULL; +static size_t _item_count = 0; /* Initialisations premières de façon unique */ static bool _first_content_change = true; @@ -60,7 +64,50 @@ static void track_cursor_on_view_panel(GLoadedPanel *, const GLineCursor *, gpoi void register_editor_item(GEditorItem *item) { - editem_list_add_tail(item, &_editem_list); + _item_list = realloc(_item_list, ++_item_count * sizeof(GEditorItem *)); + + _item_list[_item_count - 1] = item; + + g_object_ref(G_OBJECT(item)); + +} + + +/****************************************************************************** +* * +* Paramètres : target = désignation de l'élément réactif à retrouver. * +* * +* Description : Retrouve un élément reactif de l'éditeur par son nom clef. * +* * +* Retour : Elément retrouvé ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GEditorItem *find_editor_item_by_key(const char *target) +{ + GEditorItem *result; /* Elément à retourner */ + size_t i; /* Boucle de parcours */ + char *key; /* Nom d'un élément à analyser */ + + result = NULL; + + for (i = 0; i < _item_count && result == NULL; i++) + { + key = g_editor_item_get_key(_item_list[i]); + + if (strcmp(key, target) == 0) + { + result = _item_list[i]; + g_object_ref(G_OBJECT(result)); + } + + free(key); + + } + + return result; } @@ -80,7 +127,7 @@ void register_editor_item(GEditorItem *item) void change_editor_items_current_content(GLoadedContent *content) { GLoadedContent *old; /* Ancien contenu */ - GEditorItem *iter; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ old = get_current_content(); @@ -93,10 +140,8 @@ void change_editor_items_current_content(GLoadedContent *content) set_current_content(content); - editem_list_for_each(iter, _editem_list) - { - g_editor_item_change_content(iter, old, content); - } + for (i = 0; i < _item_count; i++) + g_editor_item_change_content(_item_list[i], old, content); } @@ -164,12 +209,10 @@ static void start_moving_to_cursor_in_loaded_panel(GLoadedPanel *panel, const GL static void track_cursor_on_view_panel(GLoadedPanel *panel, const GLineCursor *cursor, gpointer unused) { - GEditorItem *iter; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ - editem_list_for_each(iter, _editem_list) - { - g_editor_item_track_cursor(iter, panel, cursor); - } + for (i = 0; i < _item_count; i++) + g_editor_item_track_cursor(_item_list[i], panel, cursor); } @@ -189,7 +232,7 @@ static void track_cursor_on_view_panel(GLoadedPanel *panel, const GLineCursor *c void change_editor_items_current_view(GLoadedPanel *panel) { GLoadedPanel *old; /* Ancien affichage */ - GEditorItem *iter; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ /* Suivi des affichages */ @@ -204,10 +247,8 @@ void change_editor_items_current_view(GLoadedPanel *panel) set_current_view(panel); - editem_list_for_each(iter, _editem_list) - { - g_editor_item_change_view(iter, old, panel); - } + for (i = 0; i < _item_count; i++) + g_editor_item_change_view(_item_list[i], old, panel); /* Suivi du curseur */ @@ -254,12 +295,10 @@ void change_editor_items_current_view(GLoadedPanel *panel) void update_editor_items_current_view(GLoadedPanel *panel) { - GEditorItem *iter; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ - editem_list_for_each(iter, _editem_list) - { - g_editor_item_update_view(iter, panel); - } + for (i = 0; i < _item_count; i++) + g_editor_item_update_view(_item_list[i], panel); } @@ -280,12 +319,12 @@ void update_editor_items_current_view(GLoadedPanel *panel) void focus_cursor_in_editor_items(GLoadedContent *content, const GLineCursor *cursor, GEditorItem *source) { - GEditorItem *iter; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ - editem_list_for_each(iter, _editem_list) + for (i = 0; i < _item_count; i++) { - if (iter != source) - g_editor_item_focus_cursor(iter, content, cursor); + if (_item_list[i] != source) + g_editor_item_focus_cursor(_item_list[i], content, cursor); } } @@ -305,16 +344,9 @@ void focus_cursor_in_editor_items(GLoadedContent *content, const GLineCursor *cu void update_project_area(GStudyProject *project) { - GEditorItem *iter; /* Boucle de parcours */ - GEditorItemClass *klass; /* Classe correspondante */ - - editem_list_for_each(iter, _editem_list) - { - klass = G_EDITOR_ITEM_GET_CLASS(iter); + size_t i; /* Boucle de parcours */ - if (klass->update_project != NULL) - klass->update_project(iter, project); - - } + for (i = 0; i < _item_count; i++) + g_editor_item_update_project_area(_item_list[i], project); } diff --git a/src/gui/core/items.h b/src/gui/core/items.h index 37ccde8..7509b3b 100644 --- a/src/gui/core/items.h +++ b/src/gui/core/items.h @@ -25,9 +25,8 @@ #define _GUI_CORE_ITEMS_H -#include "../editem.h" +#include "../item.h" #include "../../analysis/loaded.h" -#include "../../analysis/project.h" #include "../../glibext/gloadedpanel.h" @@ -35,6 +34,9 @@ /* Procède à l'enregistrement d'un élément reactif de l'éditeur. */ void register_editor_item(GEditorItem *); +/* Retrouve un élément reactif de l'éditeur par son nom clef. */ +GEditorItem *find_editor_item_by_key(const char *); + /* Lance une actualisation du fait d'un changement de contenu. */ void change_editor_items_current_content(GLoadedContent *); diff --git a/src/gui/core/panels.c b/src/gui/core/panels.c index 9cc0592..8505f37 100644 --- a/src/gui/core/panels.c +++ b/src/gui/core/panels.c @@ -25,6 +25,9 @@ #include "panels.h" +#include <malloc.h> + + #include "global.h" #include "items.h" #include "../panel-int.h" @@ -221,10 +224,10 @@ GPanelItem *get_panel_item_by_name(const char *name) bool look_for_named_panel(GPanelItem *item, GPanelItem **found) { - const char *key; /* Clef à utiliser */ + char *key; /* Clef à utiliser */ bool status; /* Bilan de la comparaison */ - key = g_editor_item_get_name(G_EDITOR_ITEM(item)); + key = g_editor_item_get_key(G_EDITOR_ITEM(item)); if (strcmp(key, name) == 0) { @@ -234,6 +237,8 @@ GPanelItem *get_panel_item_by_name(const char *name) else status = true; + free(key); + return status; } |