summaryrefslogtreecommitdiff
path: root/src/gui/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/core')
-rw-r--r--src/gui/core/global.c103
-rw-r--r--src/gui/core/global.h22
-rw-r--r--src/gui/core/items.c158
-rw-r--r--src/gui/core/items.h10
4 files changed, 78 insertions, 215 deletions
diff --git a/src/gui/core/global.c b/src/gui/core/global.c
index 89a2d90..30dc174 100644
--- a/src/gui/core/global.c
+++ b/src/gui/core/global.c
@@ -31,21 +31,16 @@ static GtkWindow *_editor = NULL;
/* Barre de statut principale */
static GtkStatusStack *_status = NULL;
-/* Binaire en cours d'étude ou NULL */
-static GLoadedBinary *_current_binary = NULL;
+/* Contenu en cours d'étude ou NULL */
+static GLoadedContent *_current_content = NULL;
-G_LOCK_DEFINE_STATIC(_cb_mutex);
+G_LOCK_DEFINE_STATIC(_cc_mutex);
/* Suivi du panneau d'affichage courant ou NULL */
static GLoadedPanel *_current_view = NULL;
G_LOCK_DEFINE_STATIC(_cv_mutex);
-/* Suivi des changements de position ou NULL */
-static GObject *_caret_instance = NULL;
-
-G_LOCK_DEFINE_STATIC(_ci_mutex);
-
/******************************************************************************
@@ -145,9 +140,9 @@ GtkStatusStack *get_global_status(void)
/******************************************************************************
* *
-* Paramètres : binary = instance de binaire chargé. *
+* Paramètres : content = instance de contenu chargé. *
* *
-* Description : Définit le binaire actif en cours d'étude. *
+* Description : Définit le contenu actif en cours d'étude. *
* *
* Retour : - *
* *
@@ -155,16 +150,16 @@ GtkStatusStack *get_global_status(void)
* *
******************************************************************************/
-void set_current_binary(GLoadedBinary *binary)
+void set_current_content(GLoadedContent *content)
{
- G_LOCK(_cb_mutex);
+ G_LOCK(_cc_mutex);
- if (_current_binary != NULL)
- g_object_unref(G_OBJECT(_current_binary));
+ if (_current_content != NULL)
+ g_object_unref(G_OBJECT(_current_content));
- _current_binary = binary;
+ _current_content = content;
- G_UNLOCK(_cb_mutex);
+ G_UNLOCK(_cc_mutex);
}
@@ -173,26 +168,26 @@ void set_current_binary(GLoadedBinary *binary)
* *
* Paramètres : - *
* *
-* Description : Fournit le binaire actif en cours d'étude. *
+* Description : Fournit le contenu actif en cours d'étude. *
* *
-* Retour : Instance courante de binaire étudié ou NULL. *
+* Retour : Instance courante de contenu étudié ou NULL. *
* *
* Remarques : - *
* *
******************************************************************************/
-GLoadedBinary *get_current_binary(void)
+GLoadedContent *get_current_content(void)
{
- GLoadedBinary *result; /* Instance à retourner */
+ GLoadedContent *result; /* Instance à retourner */
- G_LOCK(_cb_mutex);
+ G_LOCK(_cc_mutex);
- result = _current_binary;
+ result = _current_content;
if (result != NULL)
g_object_ref(G_OBJECT(result));
- G_UNLOCK(_cb_mutex);
+ G_UNLOCK(_cc_mutex);
return result;
@@ -201,9 +196,9 @@ GLoadedBinary *get_current_binary(void)
/******************************************************************************
* *
-* Paramètres : view = représentation courante de binaire. *
+* Paramètres : view = représentation courante de contenu. *
* *
-* Description : Définit l'affichage de binaire courant. *
+* Description : Définit l'affichage de contenu courant. *
* *
* Retour : - *
* *
@@ -229,7 +224,7 @@ void set_current_view(GLoadedPanel *view)
* *
* Paramètres : - *
* *
-* Description : Fournit l'affichage de binaire courant. *
+* Description : Fournit l'affichage de contenu courant. *
* *
* Retour : Instance en place ou NULL si aucune. *
* *
@@ -253,59 +248,3 @@ GLoadedPanel *get_current_view(void)
return result;
}
-
-
-/******************************************************************************
-* *
-* Paramètres : caret = instance graphique à mémoriser. *
-* *
-* Description : Définit le support contenant la position active. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void set_caret_instance(GObject *caret)
-{
- G_LOCK(_ci_mutex);
-
- if (_caret_instance != NULL)
- g_object_unref(_caret_instance);
-
- _caret_instance = caret;
-
- G_UNLOCK(_ci_mutex);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Fournit le support contenant la position active. *
-* *
-* Retour : Instance en place ou NULL si aucune. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GObject *get_caret_instance(void)
-{
- GObject *result; /* Instance à retourner */
-
- G_LOCK(_ci_mutex);
-
- result = _caret_instance;
-
- if (result != NULL)
- g_object_ref(result);
-
- G_UNLOCK(_ci_mutex);
-
- return result;
-
-}
diff --git a/src/gui/core/global.h b/src/gui/core/global.h
index 5e9d902..ee66399 100644
--- a/src/gui/core/global.h
+++ b/src/gui/core/global.h
@@ -1,5 +1,5 @@
-/* Chrysalide - Outil d'analyse de fichiers binaires
+/* Chrysalide - Outil d'analyse de fichiers contenus
* global.h - prototypes pour la conservation de variables globales à vocation graphique
*
* Copyright (C) 2016-2017 Cyrille Bagard
@@ -25,7 +25,7 @@
#define _GUI_CORE_GLOBAL_H
-#include "../../analysis/binary.h"
+#include "../../analysis/loaded.h"
#include "../../glibext/gloadedpanel.h"
#include "../../gtkext/gtkstatusstack.h"
@@ -46,24 +46,18 @@ void set_global_status(GtkStatusStack *);
/* Fournit l'adresse de la barre de statut principale. */
GtkStatusStack *get_global_status(void);
-/* Définit le binaire actif en cours d'étude. */
-void set_current_binary(GLoadedBinary *);
+/* Définit le contenu actif en cours d'étude. */
+void set_current_content(GLoadedContent *);
-/* Fournit le binaire actif en cours d'étude. */
-GLoadedBinary *get_current_binary(void);
+/* Fournit le contenu actif en cours d'étude. */
+GLoadedContent *get_current_content(void);
-/* Définit l'affichage de binaire courant. */
+/* Définit l'affichage de contenu courant. */
void set_current_view(GLoadedPanel *);
-/* Fournit l'affichage de binaire courant. */
+/* Fournit l'affichage de contenu courant. */
GLoadedPanel *get_current_view(void);
-/* Définit le support contenant la position active. */
-void set_caret_instance(GObject *);
-
-/* Fournit le support contenant la position active. */
-GObject *get_caret_instance(void);
-
#endif /* _GUI_CORE_GLOBAL_H */
diff --git a/src/gui/core/items.c b/src/gui/core/items.c
index a25d1b9..ad2de2c 100644
--- a/src/gui/core/items.c
+++ b/src/gui/core/items.c
@@ -34,14 +34,11 @@
static GEditorItem *_editem_list = NULL;
-/* Suit les changements de focus des panneaux d'affichage. */
-static gboolean notify_view_panel_focus_change(GLoadedPanel *, GdkEventFocus *, gpointer);
-
/* Lance une procédure de déplacement de la position courante. */
static void start_moving_to_cursor_in_loaded_panel(GLoadedPanel *, const GLineCursor *, gboolean, gpointer);
/* Suit les changements de position dans du code d'assembleur. */
-static void track_caret_address_on_view_panel(GtkDisplayPanel *, const vmpa2t *, gpointer);
+static void track_cursor_on_view_panel(GLoadedPanel *, const GLineCursor *, gpointer);
@@ -66,9 +63,9 @@ void register_editor_item(GEditorItem *item)
/******************************************************************************
* *
-* Paramètres : binary = nouvelle instance de binaire analysé. *
+* Paramètres : content = nouvelle instance de contenu analysé. *
* *
-* Description : Lance une actualisation du fait d'un changement de binaire. *
+* Description : Lance une actualisation du fait d'un changement de contenu. *
* *
* Retour : - *
* *
@@ -76,49 +73,26 @@ void register_editor_item(GEditorItem *item)
* *
******************************************************************************/
-void change_editor_items_current_binary(GLoadedBinary *binary)
+void change_editor_items_current_content(GLoadedContent *content)
{
+ GLoadedContent *old; /* Ancien contenu */
GEditorItem *iter; /* Boucle de parcours */
- GEditorItemClass *klass; /* Classe correspondante */
- set_current_binary(binary);
+ old = get_current_content();
- editem_list_for_each(iter, _editem_list)
+ if (content != old)
{
- klass = G_EDITOR_ITEM_GET_CLASS(iter);
-
- if (klass->update_binary != NULL)
- klass->update_binary(iter, binary);
-
- }
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : panel = composant d'affichage concerné par l'opération. *
-* event = informations liées à l'événement. *
-* unused = adresse non utilisée ici. *
-* *
-* Description : Suit les changements de focus des panneaux d'affichage. *
-* *
-* Retour : FALSE pour continuer la propagation. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
+ set_current_content(content);
-static gboolean notify_view_panel_focus_change(GLoadedPanel *panel, GdkEventFocus *event, gpointer unused)
-{
- GEditorItem *iter; /* Boucle de parcours */
+ editem_list_for_each(iter, _editem_list)
+ {
+ g_editor_item_change_content(iter, old, content);
+ }
- editem_list_for_each(iter, _editem_list)
- {
- notify_focus_change_for_editor_item(iter, event->in ? panel : NULL);
}
- return FALSE;
+ if (old != NULL)
+ g_object_unref(G_OBJECT(old));
}
@@ -157,7 +131,7 @@ static void start_moving_to_cursor_in_loaded_panel(GLoadedPanel *panel, const GL
}
else
- gtk_display_panel_scroll_to_cursor(panel, cursor, SPT_CENTER);
+ g_loaded_panel_scroll_to_cursor(panel, cursor, SPT_CENTER, true);
if (src != NULL)
g_object_unref(G_OBJECT(src));
@@ -168,7 +142,7 @@ static void start_moving_to_cursor_in_loaded_panel(GLoadedPanel *panel, const GL
/******************************************************************************
* *
* Paramètres : panel = composant d'affichage parcouru. *
-* addr = nouvelle adresse du curseur courant. *
+* cursor = nouvel emplacement du curseur courant. *
* unused = adresse non utilisée ici. *
* *
* Description : Suit les changements de position dans du code d'assembleur. *
@@ -179,18 +153,13 @@ static void start_moving_to_cursor_in_loaded_panel(GLoadedPanel *panel, const GL
* *
******************************************************************************/
-static void track_caret_address_on_view_panel(GtkDisplayPanel *panel, const vmpa2t *addr, gpointer unused)
+static void track_cursor_on_view_panel(GLoadedPanel *panel, const GLineCursor *cursor, gpointer unused)
{
GEditorItem *iter; /* Boucle de parcours */
- GEditorItemClass *klass; /* Classe correspondante */
editem_list_for_each(iter, _editem_list)
{
- klass = G_EDITOR_ITEM_GET_CLASS(iter);
-
- if (klass->track_caret != NULL)
- klass->track_caret(iter, panel, addr);
-
+ g_editor_item_track_cursor(iter, panel, cursor);
}
}
@@ -210,59 +179,32 @@ static void track_caret_address_on_view_panel(GtkDisplayPanel *panel, const vmpa
void change_editor_items_current_view(GLoadedPanel *panel)
{
- GLoadedPanel *view; /* Affichage actif */
+ GLoadedPanel *old; /* Ancien affichage */
GEditorItem *iter; /* Boucle de parcours */
- GEditorItemClass *klass; /* Classe correspondante */
- GObject *caret; /* Support du curseur actif */
/* Suivi des affichages */
- view = get_current_view();
+ old = get_current_view();
- if (view != NULL)
+ if (panel != old)
{
- g_signal_handlers_disconnect_by_func(view, G_CALLBACK(notify_view_panel_focus_change), NULL);
- g_signal_handlers_disconnect_by_func(view, G_CALLBACK(notify_view_panel_focus_change), NULL);
+ set_current_view(panel);
- g_object_unref(view);
-
- }
-
- set_current_view(panel);
-
- editem_list_for_each(iter, _editem_list)
- {
- klass = G_EDITOR_ITEM_GET_CLASS(iter);
-
- if (klass->update_view != NULL)
- klass->update_view(iter, panel);
-
- }
-
- if (panel != NULL)
- {
- g_signal_connect(panel, "focus-in-event", G_CALLBACK(notify_view_panel_focus_change), NULL);
- g_signal_connect(panel, "focus-out-event", G_CALLBACK(notify_view_panel_focus_change), NULL);
- }
+ editem_list_for_each(iter, _editem_list)
+ {
+ g_editor_item_change_view(iter, old, panel);
+ }
- /* Suivi du curseur */
+ /* Suivi du curseur */
- if (GTK_IS_DISPLAY_PANEL(panel))
- {
- caret = get_caret_instance();
-
- if (caret != NULL)
+ if (old != NULL)
{
- g_signal_handlers_disconnect_by_func(caret,
+ g_signal_handlers_disconnect_by_func(old,
G_CALLBACK(start_moving_to_cursor_in_loaded_panel),
NULL);
- g_signal_handlers_disconnect_by_func(caret,
- G_CALLBACK(track_caret_address_on_view_panel),
+ g_signal_handlers_disconnect_by_func(old,
+ G_CALLBACK(track_cursor_on_view_panel),
NULL);
-
- set_caret_instance(NULL);
- g_object_unref(caret);
-
}
if (panel != NULL)
@@ -271,19 +213,16 @@ void change_editor_items_current_view(GLoadedPanel *panel)
G_CALLBACK(start_moving_to_cursor_in_loaded_panel),
NULL);
- g_signal_connect(panel, "caret-moved",
- G_CALLBACK(track_caret_address_on_view_panel),
+ g_signal_connect(panel, "cursor-moved",
+ G_CALLBACK(track_cursor_on_view_panel),
NULL);
-
- caret = G_OBJECT(panel);
-
- g_object_ref(caret);
- set_caret_instance(caret);
-
}
}
+ if (old != NULL)
+ g_object_unref(G_OBJECT(old));
+
}
@@ -299,18 +238,13 @@ void change_editor_items_current_view(GLoadedPanel *panel)
* *
******************************************************************************/
-void change_editor_items_current_view_content(GLoadedPanel *panel)
+void update_editor_items_current_view(GLoadedPanel *panel)
{
GEditorItem *iter; /* Boucle de parcours */
- GEditorItemClass *klass; /* Classe correspondante */
editem_list_for_each(iter, _editem_list)
{
- klass = G_EDITOR_ITEM_GET_CLASS(iter);
-
- if (klass->update_content != NULL)
- klass->update_content(iter, panel);
-
+ g_editor_item_update_view(iter, panel);
}
}
@@ -318,9 +252,9 @@ void change_editor_items_current_view_content(GLoadedPanel *panel)
/******************************************************************************
* *
-* Paramètres : binary = binaire contenant l'adresse à représenter. *
-* addr = adresse mémoire à mettre en avant. *
-* source = composant à l'origine du changement. *
+* Paramètres : content = contenu contenant le curseur à représenter. *
+* cursor = nouvel emplacement du curseur courant. *
+* source = composant à l'origine du changement. *
* *
* Description : Concentre l'attention de l'ensemble sur une adresse donnée. *
* *
@@ -330,18 +264,14 @@ void change_editor_items_current_view_content(GLoadedPanel *panel)
* *
******************************************************************************/
-void focus_address_in_editor_items(GLoadedBinary *binary, const vmpa2t *addr, GEditorItem *source)
+void focus_cursor_in_editor_items(GLoadedContent *content, const GLineCursor *cursor, GEditorItem *source)
{
GEditorItem *iter; /* Boucle de parcours */
- GEditorItemClass *klass; /* Classe correspondante */
editem_list_for_each(iter, _editem_list)
{
- klass = G_EDITOR_ITEM_GET_CLASS(iter);
-
- if (klass->focus_addr != NULL && iter != source)
- klass->focus_addr(iter, binary, addr);
-
+ if (iter != source)
+ g_editor_item_focus_cursor(iter, content, cursor);
}
}
diff --git a/src/gui/core/items.h b/src/gui/core/items.h
index a738ac9..86350c7 100644
--- a/src/gui/core/items.h
+++ b/src/gui/core/items.h
@@ -26,7 +26,7 @@
#include "../editem.h"
-#include "../../analysis/binary.h"
+#include "../../analysis/loaded.h"
#include "../../analysis/project.h"
#include "../../glibext/gloadedpanel.h"
@@ -35,17 +35,17 @@
/* Procède à l'enregistrement d'un élément reactif de l'éditeur. */
void register_editor_item(GEditorItem *);
-/* Lance une actualisation du fait d'un changement de binaire. */
-void change_editor_items_current_binary(GLoadedBinary *);
+/* Lance une actualisation du fait d'un changement de contenu. */
+void change_editor_items_current_content(GLoadedContent *);
/* Lance une actualisation du fait d'un changement de vue. */
void change_editor_items_current_view(GLoadedPanel *);
/* Lance une actualisation du fait d'un changement de contenu. */
-void change_editor_items_current_view_content(GLoadedPanel *);
+void update_editor_items_current_view(GLoadedPanel *);
/* Concentre l'attention de l'ensemble sur une adresse donnée. */
-void focus_address_in_editor_items(GLoadedBinary *, const vmpa2t *, GEditorItem *);
+void focus_cursor_in_editor_items(GLoadedContent *, const GLineCursor *, GEditorItem *);
/* Lance une actualisation relative à l'étendue du projet. */
void update_project_area(GStudyProject *);