X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Fviewmenu.c;h=3377329f1b5dda0bc713b473345f984fc680e837;hb=82819ebb72819f4a39c5a9aa95fbb2cef22d510f;hp=31a164e5f2c71c2a6d5f3814ccf0fdfda90a6181;hpb=b1fbb635cdd64e96bf36a62dc6b59d6724f5ad57;p=emu8051.git diff --git a/src/viewmenu.c b/src/viewmenu.c index 31a164e..3377329 100644 --- a/src/viewmenu.c +++ b/src/viewmenu.c @@ -1,5 +1,23 @@ -/* viewmenu.c */ - +/* + * viewmenu.c + * + * Copyright (C) 1999 Jonathan St-André + * Copyright (C) 1999 Hugo Villeneuve + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + */ #if HAVE_CONFIG_H # include "config.h" @@ -11,52 +29,180 @@ #include "emugtk.h" /* For AddMenuSeparator() function. */ #include "messagebox.h" #include "viewmenu.h" +#include "app-config.h" + +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(); + } +} -static void -ViewMenuExternalDump( gchar *string ) +void toggle_bits_per_row(GtkWidget *widget, gpointer data) { - ShowMessage( "External Memory Dump", "Not implemented yet!", GTK_JUSTIFY_CENTER, - MESSAGE_DIALOG_NORMAL_FONT ); + 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) +{ + 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(); +} -static void -ViewMenuInternalDump( gchar *string ) +void toggle_sfr_memory(GtkWidget *widget, gpointer data) { - ShowMessage( "Internal 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 SFR memory"); + cfg->view_sfr_memory = 1; + } else { + cfg->view_sfr_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); } +void +view_add_bits_per_row_submenu(GtkWidget *parent) +{ + 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 -ViewAddMenu( GtkWidget *menu_bar ) -{ - GtkWidget *item; - GtkWidget *menu; - - menu = gtk_menu_new(); - - /* Create the 'Viewmenu External Memory Dump' item. */ - item = gtk_menu_item_new_with_label("External Memory Dump"); - gtk_menu_append( GTK_MENU(menu), item ); - /* Attach the callback functions to the activate signal. */ - gtk_signal_connect_object( GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(ViewMenuExternalDump), - NULL ); - - AddMenuSeparator(menu); - - /* Create the 'Viewmenu Internal Memory Dump' item. */ - item = gtk_menu_item_new_with_label( "Internal Memory Dump" ); - gtk_menu_append( GTK_MENU(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 ); +ViewAddMenu(GtkWidget *menu_bar) +{ + GtkWidget *item; + GtkWidget *menu; + GtkWidget *view; + + menu = gtk_menu_new(); + + 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("SFR Memory"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), + cfg->view_sfr_memory); + g_signal_connect(G_OBJECT(item), "activate", + G_CALLBACK(toggle_sfr_memory), NULL); + + item = gtk_check_menu_item_new_with_label("External Memory"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + 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); + + /* 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); }