X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Fviewmenu.c;h=99fa0ab850fcc3a477c1636cd14555617db34ad2;hb=add152ddb851575c885208c12b008887e68b9f48;hp=4ac24c2d8e5b683298a83a1965db3aa33491c28d;hpb=43cc485237ad6fab2ca1506ff3d3f4b1dfb904d5;p=emu8051.git diff --git a/src/viewmenu.c b/src/viewmenu.c index 4ac24c2..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,29 +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. */ - gtk_signal_connect_object(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(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. */ - gtk_signal_connect_object(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(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_bar_append(GTK_MENU_BAR(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); }