X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Fviewmenu.c;h=99fa0ab850fcc3a477c1636cd14555617db34ad2;hb=dd2261ab6cd2b8ddc9fd0078c995ec943fee8dbd;hp=b1672742d16aeb62f456cc3dd64369d02853458d;hpb=6c53f8ff0267ae104d1b60efb3b8285df338e473;p=emu8051.git diff --git a/src/viewmenu.c b/src/viewmenu.c index b167274..99fa0ab 100644 --- a/src/viewmenu.c +++ b/src/viewmenu.c @@ -29,19 +29,124 @@ #include "emugtk.h" /* For AddMenuSeparator() function. */ #include "messagebox.h" #include "viewmenu.h" +#include "app-config.h" -static void -ViewMenuExternalDump(gchar *string) +extern struct app_config_t *cfg; + +void toggle_layout(GtkWidget *widget, gpointer data) +{ + int id; + + id = GPOINTER_TO_UINT(data); + + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) { + log_info(" Switching to layout %d", id); + cfg->layout = id; + emugtk_restart_gui(); + } +} + +void toggle_bits_per_row(GtkWidget *widget, gpointer data) +{ + int bits_per_row; + + bits_per_row = GPOINTER_TO_UINT(data); + + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) { + log_info(" Bits per row = %d", bits_per_row); + cfg->bits_per_row = bits_per_row; + emugtk_restart_gui(); + } +} + +void toggle_int_memory(GtkWidget *widget, gpointer data) { - ShowMessage("External Memory Dump", "Not implemented yet!", - GTK_JUSTIFY_CENTER, MESSAGE_DIALOG_NORMAL_FONT); + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) { + log_info(" View internal memory"); + cfg->view_int_memory = 1; + } else { + cfg->view_int_memory = 0; + } + + emugtk_restart_gui(); +} + +void toggle_ext_memory(GtkWidget *widget, gpointer data) +{ + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) { + log_info(" View external memory"); + cfg->view_ext_memory = 1; + } else { + cfg->view_ext_memory = 0; + } + + emugtk_restart_gui(); +} + +void +view_add_layout_submenu(GtkWidget *parent) +{ + GtkWidget *submenu; + GtkWidget *layout; + GtkWidget *layout1; + GtkWidget *layout2; + GSList *group = NULL; + + submenu = gtk_menu_new(); + + layout = gtk_menu_item_new_with_label("Layout"); + + layout1 = gtk_radio_menu_item_new_with_label(group, "Layout1"); + group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(layout1)); + layout2 = gtk_radio_menu_item_new_with_label(group, "Layout2"); + + if (cfg->layout == UI_LAYOUT1) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(layout1), TRUE); + else + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(layout2), TRUE); + + g_signal_connect(G_OBJECT(layout1), "activate", + G_CALLBACK(toggle_layout), (gpointer) UI_LAYOUT1); + g_signal_connect(G_OBJECT(layout2), "activate", + G_CALLBACK(toggle_layout), (gpointer) UI_LAYOUT2); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(layout), submenu); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), layout1); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), layout2); + gtk_menu_shell_append(GTK_MENU_SHELL(parent), layout); } -static void -ViewMenuInternalDump(gchar *string) +void +view_add_bits_per_row_submenu(GtkWidget *parent) { - ShowMessage("Internal Memory Dump", "Not implemented yet!", - GTK_JUSTIFY_CENTER, MESSAGE_DIALOG_NORMAL_FONT); + GtkWidget *submenu; + GtkWidget *item; + GtkWidget *item1; + GtkWidget *item2; + GSList *group = NULL; + + submenu = gtk_menu_new(); + + item = gtk_menu_item_new_with_label("Bits per row"); + + item1 = gtk_radio_menu_item_new_with_label(group, "8"); + group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item1)); + item2 = gtk_radio_menu_item_new_with_label(group, "16"); + + if (cfg->bits_per_row == 8) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item1), TRUE); + else + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item2), TRUE); + + g_signal_connect(G_OBJECT(item1), "activate", + G_CALLBACK(toggle_bits_per_row), (gpointer) 8); + g_signal_connect(G_OBJECT(item2), "activate", + G_CALLBACK(toggle_bits_per_row), (gpointer) 16); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), item1); + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), item2); + gtk_menu_shell_append(GTK_MENU_SHELL(parent), item); } void @@ -49,27 +154,36 @@ ViewAddMenu(GtkWidget *menu_bar) { GtkWidget *item; GtkWidget *menu; + GtkWidget *view; menu = gtk_menu_new(); - /* Create the 'Viewmenu External Memory Dump' item. */ - item = gtk_menu_item_new_with_label("External Memory Dump"); + view = gtk_menu_item_new_with_label("View"); + + item = gtk_check_menu_item_new_with_label("Internal Memory"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), + cfg->view_int_memory); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(toggle_int_memory), NULL); + + item = gtk_check_menu_item_new_with_label("External Memory"); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - /* Attach the callback functions to the activate signal. */ - g_signal_connect(item, "activate", G_CALLBACK(ViewMenuExternalDump), - NULL); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), + cfg->view_ext_memory); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(toggle_ext_memory), NULL); AddMenuSeparator(menu); - /* Create the 'Viewmenu Internal Memory Dump' item. */ - item = gtk_menu_item_new_with_label("Internal Memory Dump"); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - /* Attach the callback functions to the activate signal. */ - g_signal_connect(item, "activate", G_CALLBACK(ViewMenuInternalDump), - NULL); - - /* Adding submenu title. */ - item = gtk_menu_item_new_with_label("View"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu); - gtk_menu_shell_append((GtkMenuShell *) menu_bar, item); + /* Add layout submenu */ + view_add_layout_submenu(menu); + + AddMenuSeparator(menu); + + /* Add bits per row submenu */ + view_add_bits_per_row_submenu(menu); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(view), menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), view); }