summaryrefslogtreecommitdiff
path: root/src/gui/menus/edition.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/menus/edition.c')
-rw-r--r--src/gui/menus/edition.c493
1 files changed, 197 insertions, 296 deletions
diff --git a/src/gui/menus/edition.c b/src/gui/menus/edition.c
index cebb733..f18e4e4 100644
--- a/src/gui/menus/edition.c
+++ b/src/gui/menus/edition.c
@@ -32,6 +32,7 @@
#include "../agroup.h"
+#include "../menubar.h"
#include "../core/global.h"
#include "../dialogs/bookmark.h"
#include "../dialogs/goto.h"
@@ -85,162 +86,9 @@ static void mcb_edition_comment_enter_next(GtkMenuItem *, GMenuBar *);
/******************************************************************************
* *
-* Paramètres : ref = espace de référencement global. *
-* bar = barre de menu parente. *
+* Paramètres : builder = constructeur avec l'ensemble des références. *
* *
-* Description : Construit le menu "Edition". *
-* *
-* Retour : Panneau de menus mis en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GtkWidget *build_menu_edition(GObject *ref, GMenuBar *bar)
-{
- GtkWidget *result; /* Support à retourner */
- GtkWidget *menubar; /* Support pour éléments */
- GtkWidget *submenuitem; /* Sous-élément de menu #1 */
- GtkWidget *deepmenubar; /* Support pour éléments #2 */
- GtkWidget *deepmenuitem; /* Sous-élément de menu #2 */
-
- result = gtk_menu_item_new_with_mnemonic(_("_Edition"));
- gtk_widget_show(result);
-
- menubar = qck_create_menu(GTK_MENU_ITEM(result));
-
- /* Déplacements ciblés */
-
- submenuitem = qck_create_menu_item(ref, "mnu_edit_goto", _("Go to address..."),
- G_CALLBACK(mcb_edition_goto), bar);
- add_accelerator_to_widget(submenuitem, "<Ctrl>G");
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- /* Séparation */
-
- submenuitem = qck_create_menu_separator();
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- /* Bascule des opérandes numériques */
-
- submenuitem = qck_create_menu_item(NULL, NULL, _("Numeric operand"), NULL, NULL);
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- deepmenubar = qck_create_menu(GTK_MENU_ITEM(submenuitem));
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_switch_hex", _("Hexadecimal"),
- G_CALLBACK(mcb_edition_switch_numeric_operand), NULL);
- add_accelerator_to_widget(deepmenuitem, "H");
- g_object_set_data(G_OBJECT(deepmenuitem), "kind_of_switch", GUINT_TO_POINTER(IOD_HEX));
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_switch_dec", _("Decimal"),
- G_CALLBACK(mcb_edition_switch_numeric_operand), NULL);
- add_accelerator_to_widget(deepmenuitem, "D");
- g_object_set_data(G_OBJECT(deepmenuitem), "kind_of_switch", GUINT_TO_POINTER(IOD_DEC));
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_switch_oct", _("Octal"),
- G_CALLBACK(mcb_edition_switch_numeric_operand), NULL);
- add_accelerator_to_widget(deepmenuitem, "O");
- g_object_set_data(G_OBJECT(deepmenuitem), "kind_of_switch", GUINT_TO_POINTER(IOD_OCT));
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_switch_bin", _("Binary"),
- G_CALLBACK(mcb_edition_switch_numeric_operand), NULL);
- add_accelerator_to_widget(deepmenuitem, "B");
- g_object_set_data(G_OBJECT(deepmenuitem), "kind_of_switch", GUINT_TO_POINTER(IOD_BIN));
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_separator();
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_switch_def", _("Default"),
- G_CALLBACK(mcb_edition_switch_numeric_operand), NULL);
- g_object_set_data(G_OBJECT(deepmenuitem), "kind_of_switch", GUINT_TO_POINTER(IOD_COUNT));
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- /* Séparation */
-
- submenuitem = qck_create_menu_separator();
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- /* Suivi de cibles */
-
- submenuitem = qck_create_menu_item(ref, "mnu_edit_go_back", _("Go back"),
- G_CALLBACK(mcb_edition_go_back), bar);
- add_accelerator_to_widget(submenuitem, "Escape");
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- submenuitem = qck_create_menu_item(ref, "mnu_edit_follow_ref", _("Follow the reference"),
- G_CALLBACK(mcb_edition_follow_ref), NULL);
- add_accelerator_to_widget(submenuitem, "Return");
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- submenuitem = qck_create_menu_item(ref, "mnu_edit_list_xrefs", _("List all references leading to..."),
- G_CALLBACK(mcb_edition_list_xrefs), bar);
- add_accelerator_to_widget(submenuitem, "X");
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- /* Séparation */
-
- submenuitem = qck_create_menu_separator();
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- /* Signets */
-
- submenuitem = qck_create_menu_item(NULL, NULL, _("Bookmarks"), NULL, NULL);
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- deepmenubar = qck_create_menu(GTK_MENU_ITEM(submenuitem));
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_toggle_bmark", _("Toggle at current location"),
- G_CALLBACK(mcb_edition_bookmarks_toggle), bar);
- add_accelerator_to_widget(deepmenuitem, "<Ctrl>D");
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_delete_bmarks", _("Delete all bookmarks"),
- G_CALLBACK(mcb_edition_bookmarks_delete_all), bar);
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- /* Commentaires */
-
- submenuitem = qck_create_menu_item(NULL, NULL, _("Comments"), NULL, NULL);
- gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
-
- deepmenubar = qck_create_menu(GTK_MENU_ITEM(submenuitem));
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_enter_comment", _("Enter a comment..."),
- G_CALLBACK(mcb_edition_comment_enter), bar);
- add_accelerator_to_widget(deepmenuitem, "semicolon");
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_enter_rep_comment", _("Enter a repeatable comment..."),
- G_CALLBACK(mcb_edition_comment_enter_repeatable), bar);
- add_accelerator_to_widget(deepmenuitem, "colon");
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_enter_prev", _("Enter a comment in the previous line..."),
- G_CALLBACK(mcb_edition_comment_enter_previous), bar);
- add_accelerator_to_widget(deepmenuitem, "Insert");
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- deepmenuitem = qck_create_menu_item(ref, "mnu_edit_enter_next", _("Enter a comment in the next line..."),
- G_CALLBACK(mcb_edition_comment_enter_next), bar);
- add_accelerator_to_widget(deepmenuitem, "<Shift>Insert");
- gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : ref = espace de référencement global. *
-* new = nouvelle vue du contenu chargé analysé. *
-* *
-* Description : Lance une actualisation du fait d'un changement de support. *
+* Description : Complète la définition du menu "Edition". *
* *
* Retour : - *
* *
@@ -248,155 +96,42 @@ GtkWidget *build_menu_edition(GObject *ref, GMenuBar *bar)
* *
******************************************************************************/
-void update_access_for_view_in_menu_edition(GObject *ref, GLoadedPanel *new)
+void setup_menu_edition_callbacks(GtkBuilder *builder)
{
- gboolean access; /* Accès à déterminer */
- GtkWidget *item; /* Elément de menu à traiter */
-
- /* Déplacements ciblés */
-
- access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_goto"));
- gtk_widget_set_sensitive(item, access);
+ GObject *item; /* Elément à compléter */
+
+#define DEFINE_CALLBACK(cb) #cb, G_CALLBACK(cb)
+
+ gtk_builder_add_callback_symbols(builder,
+ DEFINE_CALLBACK(mcb_edition_goto),
+ DEFINE_CALLBACK(mcb_edition_switch_numeric_operand),
+ DEFINE_CALLBACK(mcb_edition_go_back),
+ DEFINE_CALLBACK(mcb_edition_follow_ref),
+ DEFINE_CALLBACK(mcb_edition_list_xrefs),
+ DEFINE_CALLBACK(mcb_edition_bookmarks_toggle),
+ DEFINE_CALLBACK(mcb_edition_bookmarks_delete_all),
+ DEFINE_CALLBACK(mcb_edition_comment_enter),
+ DEFINE_CALLBACK(mcb_edition_comment_enter_repeatable),
+ DEFINE_CALLBACK(mcb_edition_comment_enter_previous),
+ DEFINE_CALLBACK(mcb_edition_comment_enter_next),
+ NULL);
/* Bascule des opérandes numériques */
- access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_hex"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_dec"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_oct"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_bin"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_def"));
- gtk_widget_set_sensitive(item, access);
-
- /* Suivi de cibles */
-
- access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_go_back"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_follow_ref"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_list_xrefs"));
- gtk_widget_set_sensitive(item, access);
-
- /* Signets */
-
- access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_toggle_bmark"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_delete_bmarks"));
- gtk_widget_set_sensitive(item, access);
+ item = gtk_builder_get_object(builder, "edition_switch_hex");
+ g_object_set_data(item, "kind_of_switch", GUINT_TO_POINTER(IOD_HEX));
- /* Commentaires */
+ item = gtk_builder_get_object(builder, "edition_switch_dec");
+ g_object_set_data(item, "kind_of_switch", GUINT_TO_POINTER(IOD_DEC));
- access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
+ item = gtk_builder_get_object(builder, "edition_switch_oct");
+ g_object_set_data(item, "kind_of_switch", GUINT_TO_POINTER(IOD_OCT));
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_enter_comment"));
- gtk_widget_set_sensitive(item, access);
+ item = gtk_builder_get_object(builder, "edition_switch_bin");
+ g_object_set_data(item, "kind_of_switch", GUINT_TO_POINTER(IOD_BIN));
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_enter_rep_comment"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_enter_prev"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_enter_next"));
- gtk_widget_set_sensitive(item, access);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : ref = espace de référencement global. *
-* panel = vue d'affichage active ou NULL si aucune. *
-* cursor = suivi des positions à consulter. *
-* *
-* Description : Met à jour les accès du menu "Edition" selon une position. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void update_access_for_cursor_in_menu_edition(GObject *ref, GLoadedPanel *panel, const GLineCursor *cursor)
-{
- GObject *creator; /* Créateur à l'orgine du seg. */
- gboolean access; /* Accès à déterminer */
- GtkWidget *item; /* Elément de menu à traiter */
-
- /* Préliminaire */
-
- /**
- * Seuls les affichages de blocs (en graphique ou non) distribuent ce
- * genre de curseur. Donc on valide dans le même temps la nature de la vue.
- */
-
- if (G_IS_BINARY_CURSOR(cursor))
- {
- assert(GTK_IS_HEX_DISPLAY(panel) || GTK_IS_BLOCK_DISPLAY(panel) || GTK_IS_GRAPH_DISPLAY(panel));
-
- if (g_line_cursor_is_valid(cursor))
- creator = gtk_display_panel_get_active_object(GTK_DISPLAY_PANEL(panel));
- else
- creator = NULL;
-
- }
-
- else
- creator = NULL;
-
- /* Bascule des opérandes numériques */
-
- access = G_IS_IMM_OPERAND(creator);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_hex"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_dec"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_oct"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_bin"));
- gtk_widget_set_sensitive(item, access);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_switch_def"));
- gtk_widget_set_sensitive(item, access);
-
- /* Suivi de cibles */
-
- access = G_IS_TARGETABLE_OPERAND(creator);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_follow_ref"));
- gtk_widget_set_sensitive(item, access);
-
- access = g_line_cursor_is_valid(cursor);
-
- item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_list_xrefs"));
- gtk_widget_set_sensitive(item, access);
-
- /* Nettoyage et sortie finale */
-
- if (creator != NULL)
- g_object_unref(G_OBJECT(creator));
+ item = gtk_builder_get_object(builder, "edition_switch_def");
+ g_object_set_data(item, "kind_of_switch", GUINT_TO_POINTER(IOD_COUNT));
}
@@ -851,3 +586,169 @@ static void mcb_edition_comment_enter_next(GtkMenuItem *menuitem, GMenuBar *bar)
{
}
+
+
+/******************************************************************************
+* *
+* Paramètres : builder = constructeur avec l'ensemble des références. *
+* new = nouvelle vue du contenu chargé analysé. *
+* *
+* Description : Lance une actualisation du fait d'un changement de support. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void update_access_for_view_in_menu_edition(GtkBuilder *builder, GLoadedPanel *new)
+{
+ gboolean access; /* Accès à déterminer */
+ GtkWidget *item; /* Elément de menu à traiter */
+
+ /* Déplacements ciblés */
+
+ access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_goto"));
+ gtk_widget_set_sensitive(item, access);
+
+ /* Bascule des opérandes numériques */
+
+ access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_hex"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_dec"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_oct"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_bin"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_def"));
+ gtk_widget_set_sensitive(item, access);
+
+ /* Suivi de cibles */
+
+ access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_go_back"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_follow_ref"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_list_xrefs"));
+ gtk_widget_set_sensitive(item, access);
+
+ /* Signets */
+
+ access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_bookmarks_toggle"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_bookmarks_delete_all"));
+ gtk_widget_set_sensitive(item, access);
+
+ /* Commentaires */
+
+ access = GTK_IS_BLOCK_DISPLAY(new) || GTK_IS_GRAPH_DISPLAY(new);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_comment_enter"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_comment_enter_rep"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_comment_enter_prev"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_comment_enter_next"));
+ gtk_widget_set_sensitive(item, access);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : builder = constructeur avec l'ensemble des références. *
+* panel = vue d'affichage active ou NULL si aucune. *
+* cursor = suivi des positions à consulter. *
+* *
+* Description : Met à jour les accès du menu "Edition" selon une position. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void update_access_for_cursor_in_menu_edition(GtkBuilder *builder, GLoadedPanel *panel, const GLineCursor *cursor)
+{
+ GObject *creator; /* Créateur à l'orgine du seg. */
+ gboolean access; /* Accès à déterminer */
+ GtkWidget *item; /* Elément de menu à traiter */
+
+ /* Préliminaire */
+
+ /**
+ * Seuls les affichages de blocs (en graphique ou non) distribuent ce
+ * genre de curseur. Donc on valide dans le même temps la nature de la vue.
+ */
+
+ if (G_IS_BINARY_CURSOR(cursor))
+ {
+ assert(GTK_IS_HEX_DISPLAY(panel) || GTK_IS_BLOCK_DISPLAY(panel) || GTK_IS_GRAPH_DISPLAY(panel));
+
+ if (g_line_cursor_is_valid(cursor))
+ creator = gtk_display_panel_get_active_object(GTK_DISPLAY_PANEL(panel));
+ else
+ creator = NULL;
+
+ }
+
+ else
+ creator = NULL;
+
+ /* Bascule des opérandes numériques */
+
+ access = G_IS_IMM_OPERAND(creator);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_hex"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_dec"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_oct"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_bin"));
+ gtk_widget_set_sensitive(item, access);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_switch_def"));
+ gtk_widget_set_sensitive(item, access);
+
+ /* Suivi de cibles */
+
+ access = G_IS_TARGETABLE_OPERAND(creator);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_follow_ref"));
+ gtk_widget_set_sensitive(item, access);
+
+ access = g_line_cursor_is_valid(cursor);
+
+ item = GTK_WIDGET(gtk_builder_get_object(builder, "edition_list_xrefs"));
+ gtk_widget_set_sensitive(item, access);
+
+ /* Nettoyage et sortie finale */
+
+ if (creator != NULL)
+ g_object_unref(G_OBJECT(creator));
+
+}