--- BasiliskII/src/Unix/prefs_editor_gtk.cpp 1999/10/28 15:33:15 1.9 +++ BasiliskII/src/Unix/prefs_editor_gtk.cpp 2000/07/13 17:26:17 1.13 @@ -1,7 +1,7 @@ /* * prefs_editor_gtk.cpp - Preferences editor, Unix implementation using GTK+ * - * Basilisk II (C) 1997-1999 Christian Bauer + * Basilisk II (C) 1997-2000 Christian Bauer * * 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 @@ -45,6 +45,7 @@ static bool start_clicked = true; // Ret static void create_volumes_pane(GtkWidget *top); static void create_scsi_pane(GtkWidget *top); static void create_graphics_pane(GtkWidget *top); +static void create_input_pane(GtkWidget *top); static void create_serial_pane(GtkWidget *top); static void create_memory_pane(GtkWidget *top); static void read_settings(void); @@ -297,6 +298,7 @@ bool PrefsEditor(void) create_volumes_pane(notebook); create_scsi_pane(notebook); create_graphics_pane(notebook); + create_input_pane(notebook); create_serial_pane(notebook); create_memory_pane(notebook); @@ -525,7 +527,7 @@ static GtkWidget *l_frameskip, *l_displa static int display_type; static int dis_width, dis_height; -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA static GtkWidget *w_fbdev_name, *w_fbdevice_file; static GtkWidget *l_fbdev_name, *l_fbdevice_file; static char fbdev_name[256]; @@ -537,7 +539,7 @@ static void hide_show_graphics_widgets(v switch (display_type) { case DISPLAY_WINDOW: gtk_widget_show(w_frameskip); gtk_widget_show(l_frameskip); -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA gtk_widget_show(w_display_x); gtk_widget_show(l_display_x); gtk_widget_show(w_display_y); gtk_widget_show(l_display_y); gtk_widget_hide(w_fbdev_name); gtk_widget_hide(l_fbdev_name); @@ -545,7 +547,7 @@ static void hide_show_graphics_widgets(v break; case DISPLAY_SCREEN: gtk_widget_hide(w_frameskip); gtk_widget_hide(l_frameskip); -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA gtk_widget_hide(w_display_x); gtk_widget_hide(l_display_x); gtk_widget_hide(w_display_y); gtk_widget_hide(l_display_y); gtk_widget_show(w_fbdev_name); gtk_widget_show(l_fbdev_name); @@ -575,6 +577,7 @@ static void mn_10hz(...) {PrefsReplaceIn static void mn_15hz(...) {PrefsReplaceInt32("frameskip", 4);} static void mn_30hz(...) {PrefsReplaceInt32("frameskip", 2);} static void mn_60hz(...) {PrefsReplaceInt32("frameskip", 1);} +static void mn_dynamic(...) {PrefsReplaceInt32("frameskip", 0);} // "Disable Sound Output" button toggled static void tb_nosound(GtkWidget *widget) @@ -588,7 +591,7 @@ static void parse_graphics_prefs(void) display_type = DISPLAY_WINDOW; dis_width = 512; dis_height = 384; -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA fbdev_name[0] = 0; #endif @@ -596,7 +599,7 @@ static void parse_graphics_prefs(void) if (str) { if (sscanf(str, "win/%d/%d", &dis_width, &dis_height) == 2) display_type = DISPLAY_WINDOW; -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA else if (sscanf(str, "dga/%255s", fbdev_name) == 1) #else else if (sscanf(str, "dga/%d/%d", &dis_width, &dis_height) == 2) @@ -622,7 +625,7 @@ static void read_graphics_settings(void) sprintf(pref, "win/%d/%d", dis_width, dis_height); break; case DISPLAY_SCREEN: -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA str = gtk_entry_get_text(GTK_ENTRY(w_fbdev_name)); sprintf(pref, "dga/%s", str); #else @@ -680,27 +683,20 @@ static void create_graphics_pane(GtkWidg add_menu_item(menu, STR_REF_15HZ_LAB, GTK_SIGNAL_FUNC(mn_15hz)); add_menu_item(menu, STR_REF_30HZ_LAB, GTK_SIGNAL_FUNC(mn_30hz)); add_menu_item(menu, STR_REF_60HZ_LAB, GTK_SIGNAL_FUNC(mn_60hz)); + add_menu_item(menu, STR_REF_DYNAMIC_LAB, GTK_SIGNAL_FUNC(mn_dynamic)); int frameskip = PrefsFindInt32("frameskip"); + int item = -1; switch (frameskip) { - case 12: - gtk_menu_set_active(GTK_MENU(menu), 0); - break; - case 8: - gtk_menu_set_active(GTK_MENU(menu), 1); - break; - case 6: - gtk_menu_set_active(GTK_MENU(menu), 2); - break; - case 4: - gtk_menu_set_active(GTK_MENU(menu), 3); - break; - case 2: - gtk_menu_set_active(GTK_MENU(menu), 4); - break; - case 1: - gtk_menu_set_active(GTK_MENU(menu), 5); - break; + case 12: item = 0; break; + case 8: item = 1; break; + case 6: item = 2; break; + case 4: item = 3; break; + case 2: item = 4; break; + case 1: item = 5; break; + case 0: item = 6; break; } + if (item >= 0) + gtk_menu_set_active(GTK_MENU(menu), item); gtk_option_menu_set_menu(GTK_OPTION_MENU(w_frameskip), menu); gtk_table_attach(GTK_TABLE(table), w_frameskip, 1, 2, 1, 2, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4); @@ -746,7 +742,7 @@ static void create_graphics_pane(GtkWidg gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4); w_display_y = GTK_COMBO(combo)->entry; -#if ENABLE_FBDEV_DGA +#ifdef ENABLE_FBDEV_DGA l_fbdev_name = gtk_label_new(GetString(STR_FBDEV_NAME_CTRL)); gtk_widget_show(l_fbdev_name); gtk_table_attach(GTK_TABLE(table), l_fbdev_name, 0, 1, 4, 5, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); @@ -759,6 +755,7 @@ static void create_graphics_pane(GtkWidg w_fbdevice_file = make_entry(box, STR_FBDEVICE_FILE_CTRL, "fbdevicefile"); #endif + make_separator(box); make_checkbox(box, STR_NOSOUND_CTRL, "nosound", GTK_SIGNAL_FUNC(tb_nosound)); hide_show_graphics_widgets(); @@ -766,6 +763,85 @@ static void create_graphics_pane(GtkWidg /* + * "Input" pane + */ + +static GtkWidget *w_keycode_file; +static GtkWidget *w_mouse_wheel_lines; + +// Set sensitivity of widgets +static void set_input_sensitive(void) +{ + gtk_widget_set_sensitive(w_keycode_file, PrefsFindBool("keycodes")); + gtk_widget_set_sensitive(w_mouse_wheel_lines, PrefsFindInt16("mousewheelmode") == 1); +} + +// "Use Raw Keycodes" button toggled +static void tb_keycodes(GtkWidget *widget) +{ + PrefsReplaceBool("keycodes", GTK_TOGGLE_BUTTON(widget)->active); + set_input_sensitive(); +} + +// "Mouse Wheel Mode" selected +static void mn_wheel_page(...) {PrefsReplaceInt16("mousewheelmode", 0); set_input_sensitive();} +static void mn_wheel_cursor(...) {PrefsReplaceInt16("mousewheelmode", 1); set_input_sensitive();} + +// Read settings from widgets and set preferences +static void read_input_settings(void) +{ + const char *str = gtk_entry_get_text(GTK_ENTRY(w_keycode_file)); + if (str && strlen(str)) + PrefsReplaceString("keycodefile", str); + else + PrefsRemoveItem("keycodefile"); + + PrefsReplaceInt16("mousewheellines", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w_mouse_wheel_lines))); +} + +// Create "Input" pane +static void create_input_pane(GtkWidget *top) +{ + GtkWidget *box, *hbox, *menu, *label; + GtkObject *adj; + + box = make_pane(top, STR_INPUT_PANE_TITLE); + + make_checkbox(box, STR_KEYCODES_CTRL, "keycodes", GTK_SIGNAL_FUNC(tb_keycodes)); + w_keycode_file = make_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile"); + + make_separator(box); + + static const opt_desc options[] = { + {STR_MOUSEWHEELMODE_PAGE_LAB, GTK_SIGNAL_FUNC(mn_wheel_page)}, + {STR_MOUSEWHEELMODE_CURSOR_LAB, GTK_SIGNAL_FUNC(mn_wheel_cursor)}, + {0, NULL} + }; + int wheelmode = PrefsFindInt16("mousewheelmode"), active = 0; + switch (wheelmode) { + case 0: active = 0; break; + case 1: active = 1; break; + } + menu = make_option_menu(box, STR_MOUSEWHEELMODE_CTRL, options, active); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); + + label = gtk_label_new(GetString(STR_MOUSEWHEELLINES_CTRL)); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + + adj = gtk_adjustment_new(PrefsFindInt16("mousewheellines"), 1, 1000, 1, 5, 0); + w_mouse_wheel_lines = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 0.0, 0); + gtk_widget_show(w_mouse_wheel_lines); + gtk_box_pack_start(GTK_BOX(hbox), w_mouse_wheel_lines, FALSE, FALSE, 0); + + set_input_sensitive(); +} + + +/* * "Serial/Network" pane */ @@ -870,11 +946,11 @@ static GList *add_ether_names(void) // Create "Serial/Network" pane static void create_serial_pane(GtkWidget *top) { - GtkWidget *box, *table, *label, *combo; + GtkWidget *box, *table, *label, *combo, *sep; GList *glist = add_serial_names(); box = make_pane(top, STR_SERIAL_NETWORK_PANE_TITLE); - table = make_table(box, 2, 3); + table = make_table(box, 2, 4); label = gtk_label_new(GetString(STR_SERIALA_CTRL)); gtk_widget_show(label); @@ -904,9 +980,13 @@ static void create_serial_pane(GtkWidget gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4); w_serialb = GTK_COMBO(combo)->entry; + sep = gtk_hseparator_new(); + gtk_widget_show(sep); + gtk_table_attach(GTK_TABLE(table), sep, 0, 2, 2, 3, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); + label = gtk_label_new(GetString(STR_ETHERNET_IF_CTRL)); gtk_widget_show(label); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); + gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); glist = add_ether_names(); combo = gtk_combo_new(); @@ -916,7 +996,7 @@ static void create_serial_pane(GtkWidget if (str == NULL) str = ""; gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), str); - gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 2, 3, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4); + gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4); w_ether = GTK_COMBO(combo)->entry; } @@ -927,7 +1007,6 @@ static void create_serial_pane(GtkWidget static GtkObject *w_ramsize_adj; static GtkWidget *w_rom_file; -static GtkWidget *w_keycode_file; // Model ID selected static void mn_modelid_5(...) {PrefsReplaceInt32("modelid", 5);} @@ -940,12 +1019,6 @@ static void mn_cpu_68030(...) {PrefsRepl static void mn_cpu_68030_fpu(...) {PrefsReplaceInt32("cpu", 3); PrefsReplaceBool("fpu", true);} static void mn_cpu_68040(...) {PrefsReplaceInt32("cpu", 4); PrefsReplaceBool("fpu", true);} -// "Use Raw Keycodes" button toggled -static void tb_keycodes(GtkWidget *widget) -{ - PrefsReplaceBool("keycodes", GTK_TOGGLE_BUTTON(widget)->active); -} - // Read settings from widgets and set preferences static void read_memory_settings(void) { @@ -957,17 +1030,12 @@ static void read_memory_settings(void) else PrefsRemoveItem("rom"); - str = gtk_entry_get_text(GTK_ENTRY(w_keycode_file)); - if (str && strlen(str)) - PrefsReplaceString("keycodefile", str); - else - PrefsRemoveItem("keycodefile"); } // Create "Memory/Misc" pane static void create_memory_pane(GtkWidget *top) { - GtkWidget *box, *vbox, *hbox, *hbox2, *label, *scale, *menu; + GtkWidget *box, *hbox, *vbox, *hbox2, *label, *scale, *menu; box = make_pane(top, STR_MEMORY_MISC_PANE_TITLE); @@ -1021,6 +1089,7 @@ static void create_memory_pane(GtkWidget } make_option_menu(box, STR_MODELID_CTRL, model_options, active); +#if EMULATED_68K static const opt_desc cpu_options[] = { {STR_CPU_68020_LAB, GTK_SIGNAL_FUNC(mn_cpu_68020)}, {STR_CPU_68020_FPU_LAB, GTK_SIGNAL_FUNC(mn_cpu_68020_fpu)}, @@ -1038,11 +1107,9 @@ static void create_memory_pane(GtkWidget case 4: active = 4; } make_option_menu(box, STR_CPU_CTRL, cpu_options, active); +#endif w_rom_file = make_entry(box, STR_ROM_FILE_CTRL, "rom"); - - make_checkbox(box, STR_KEYCODES_CTRL, "keycodes", GTK_SIGNAL_FUNC(tb_keycodes)); - w_keycode_file = make_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile"); } @@ -1055,6 +1122,7 @@ static void read_settings(void) read_volumes_settings(); read_scsi_settings(); read_graphics_settings(); + read_input_settings(); read_serial_settings(); read_memory_settings(); }