diff options
Diffstat (limited to 'src/gui/menus/edition.c')
-rw-r--r-- | src/gui/menus/edition.c | 493 |
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)); + +} |