ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/prefs_editor_gtk.cpp
(Generate patch)

Comparing BasiliskII/src/Unix/prefs_editor_gtk.cpp (file contents):
Revision 1.3 by cebix, 1999-10-12T20:00:52Z vs.
Revision 1.13 by cebix, 2000-07-13T17:26:17Z

# Line 1 | Line 1
1   /*
2   *  prefs_editor_gtk.cpp - Preferences editor, Unix implementation using GTK+
3   *
4 < *  Basilisk II (C) 1997-1999 Christian Bauer
4 > *  Basilisk II (C) 1997-2000 Christian Bauer
5   *
6   *  This program is free software; you can redistribute it and/or modify
7   *  it under the terms of the GNU General Public License as published by
# Line 45 | Line 45 | static bool start_clicked = true;      // Ret
45   static void create_volumes_pane(GtkWidget *top);
46   static void create_scsi_pane(GtkWidget *top);
47   static void create_graphics_pane(GtkWidget *top);
48 + static void create_input_pane(GtkWidget *top);
49   static void create_serial_pane(GtkWidget *top);
50   static void create_memory_pane(GtkWidget *top);
51   static void read_settings(void);
# Line 258 | Line 259 | static void mn_zap_pram(...)
259  
260   // Menu item descriptions
261   static GtkItemFactoryEntry menu_items[] = {
262 <        {GetString(STR_PREFS_MENU_FILE_GTK),            NULL,                   NULL,                                                   0, "<Branch>"},
263 <        {GetString(STR_PREFS_ITEM_START_GTK),           NULL,                   GTK_SIGNAL_FUNC(cb_start),              0, NULL},
264 <        {GetString(STR_PREFS_ITEM_ZAP_PRAM_GTK),        NULL,                   GTK_SIGNAL_FUNC(mn_zap_pram),   0, NULL},
265 <        {GetString(STR_PREFS_ITEM_SEPL_GTK),            NULL,                   NULL,                                                   0, "<Separator>"},
266 <        {GetString(STR_PREFS_ITEM_QUIT_GTK),            "<control>Q",   GTK_SIGNAL_FUNC(cb_quit),               0, NULL},
267 <        {GetString(STR_HELP_MENU_GTK),                          NULL,                   NULL,                                                   0, "<LastBranch>"},
268 <        {GetString(STR_HELP_ITEM_ABOUT_GTK),            NULL,                   GTK_SIGNAL_FUNC(mn_about),              0, NULL}
262 >        {(gchar *)GetString(STR_PREFS_MENU_FILE_GTK),           NULL,                   NULL,                                                   0, "<Branch>"},
263 >        {(gchar *)GetString(STR_PREFS_ITEM_START_GTK),          NULL,                   GTK_SIGNAL_FUNC(cb_start),              0, NULL},
264 >        {(gchar *)GetString(STR_PREFS_ITEM_ZAP_PRAM_GTK),       NULL,                   GTK_SIGNAL_FUNC(mn_zap_pram),   0, NULL},
265 >        {(gchar *)GetString(STR_PREFS_ITEM_SEPL_GTK),           NULL,                   NULL,                                                   0, "<Separator>"},
266 >        {(gchar *)GetString(STR_PREFS_ITEM_QUIT_GTK),           "<control>Q",   GTK_SIGNAL_FUNC(cb_quit),               0, NULL},
267 >        {(gchar *)GetString(STR_HELP_MENU_GTK),                         NULL,                   NULL,                                                   0, "<LastBranch>"},
268 >        {(gchar *)GetString(STR_HELP_ITEM_ABOUT_GTK),           NULL,                   GTK_SIGNAL_FUNC(mn_about),              0, NULL}
269   };
270  
271   bool PrefsEditor(void)
# Line 291 | Line 292 | bool PrefsEditor(void)
292          GtkWidget *notebook = gtk_notebook_new();
293          gtk_widget_show(notebook);
294          gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
295 <        gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
295 >        gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE);
296          gtk_box_pack_start(GTK_BOX(box), notebook, TRUE, TRUE, 0);
297  
298          create_volumes_pane(notebook);
299          create_scsi_pane(notebook);
300          create_graphics_pane(notebook);
301 +        create_input_pane(notebook);
302          create_serial_pane(notebook);
303          create_memory_pane(notebook);
304  
# Line 318 | Line 320 | bool PrefsEditor(void)
320   *  "Volumes" pane
321   */
322  
323 < static GtkWidget *volume_list;
323 > static GtkWidget *volume_list, *w_extfs;
324   static int selected_volume;
325  
326   // Volume in list selected
# Line 420 | Line 422 | static void read_volumes_settings(void)
422                  gtk_clist_get_text(GTK_CLIST(volume_list), i, 0, &str);
423                  PrefsAddString("disk", str);
424          }
425 +
426 +        PrefsReplaceString("extfs", gtk_entry_get_text(GTK_ENTRY(w_extfs)));
427   }
428  
429   // Create "Volumes" pane
# Line 436 | Line 440 | static void create_volumes_pane(GtkWidge
440          gtk_widget_show(volume_list);
441          gtk_clist_set_selection_mode(GTK_CLIST(volume_list), GTK_SELECTION_SINGLE);
442          gtk_clist_set_shadow_type(GTK_CLIST(volume_list), GTK_SHADOW_NONE);
443 +        gtk_clist_set_reorderable(GTK_CLIST(volume_list), true);
444          gtk_signal_connect(GTK_OBJECT(volume_list), "select_row", GTK_SIGNAL_FUNC(cl_selected), NULL);
445          char *str;
446          int32 index = 0;
# Line 454 | Line 459 | static void create_volumes_pane(GtkWidge
459          make_button_box(box, 0, buttons);
460          make_separator(box);
461  
462 +        w_extfs = make_entry(box, STR_EXTFS_CTRL, "extfs");
463 +
464          static const opt_desc options[] = {
465                  {STR_BOOT_ANY_LAB, GTK_SIGNAL_FUNC(mn_boot_any)},
466                  {STR_BOOT_CDROM_LAB, GTK_SIGNAL_FUNC(mn_boot_cdrom)},
# Line 520 | Line 527 | static GtkWidget *l_frameskip, *l_displa
527   static int display_type;
528   static int dis_width, dis_height;
529  
530 + #ifdef ENABLE_FBDEV_DGA
531 + static GtkWidget *w_fbdev_name, *w_fbdevice_file;
532 + static GtkWidget *l_fbdev_name, *l_fbdevice_file;
533 + static char fbdev_name[256];
534 + #endif
535 +
536   // Hide/show graphics widgets
537   static void hide_show_graphics_widgets(void)
538   {
539          switch (display_type) {
540                  case DISPLAY_WINDOW:
541                          gtk_widget_show(w_frameskip); gtk_widget_show(l_frameskip);
542 + #ifdef ENABLE_FBDEV_DGA
543 +                        gtk_widget_show(w_display_x); gtk_widget_show(l_display_x);
544 +                        gtk_widget_show(w_display_y); gtk_widget_show(l_display_y);
545 +                        gtk_widget_hide(w_fbdev_name); gtk_widget_hide(l_fbdev_name);
546 + #endif
547                          break;
548                  case DISPLAY_SCREEN:
549                          gtk_widget_hide(w_frameskip); gtk_widget_hide(l_frameskip);
550 + #ifdef ENABLE_FBDEV_DGA
551 +                        gtk_widget_hide(w_display_x); gtk_widget_hide(l_display_x);
552 +                        gtk_widget_hide(w_display_y); gtk_widget_hide(l_display_y);
553 +                        gtk_widget_show(w_fbdev_name); gtk_widget_show(l_fbdev_name);
554 + #endif
555                          break;
556          }
557   }
# Line 554 | Line 577 | static void mn_10hz(...) {PrefsReplaceIn
577   static void mn_15hz(...) {PrefsReplaceInt32("frameskip", 4);}
578   static void mn_30hz(...) {PrefsReplaceInt32("frameskip", 2);}
579   static void mn_60hz(...) {PrefsReplaceInt32("frameskip", 1);}
580 + static void mn_dynamic(...) {PrefsReplaceInt32("frameskip", 0);}
581  
582   // "Disable Sound Output" button toggled
583   static void tb_nosound(GtkWidget *widget)
# Line 567 | Line 591 | static void parse_graphics_prefs(void)
591          display_type = DISPLAY_WINDOW;
592          dis_width = 512;
593          dis_height = 384;
594 + #ifdef ENABLE_FBDEV_DGA
595 +        fbdev_name[0] = 0;
596 + #endif
597  
598          const char *str = PrefsFindString("screen");
599          if (str) {
600                  if (sscanf(str, "win/%d/%d", &dis_width, &dis_height) == 2)
601                          display_type = DISPLAY_WINDOW;
602 + #ifdef ENABLE_FBDEV_DGA
603 +                else if (sscanf(str, "dga/%255s", fbdev_name) == 1)
604 + #else
605                  else if (sscanf(str, "dga/%d/%d", &dis_width, &dis_height) == 2)
606 + #endif
607                          display_type = DISPLAY_SCREEN;
608          }
609   }
# Line 594 | Line 625 | static void read_graphics_settings(void)
625                          sprintf(pref, "win/%d/%d", dis_width, dis_height);
626                          break;
627                  case DISPLAY_SCREEN:
628 + #ifdef ENABLE_FBDEV_DGA
629 +                        str = gtk_entry_get_text(GTK_ENTRY(w_fbdev_name));
630 +                        sprintf(pref, "dga/%s", str);
631 + #else
632                          sprintf(pref, "dga/%d/%d", dis_width, dis_height);
633 + #endif
634                          break;
635                  default:
636                          PrefsRemoveItem("screen");
# Line 612 | Line 648 | static void create_graphics_pane(GtkWidg
648          parse_graphics_prefs();
649  
650          box = make_pane(top, STR_GRAPHICS_SOUND_PANE_TITLE);
651 <        table = make_table(box, 2, 4);
651 >        table = make_table(box, 2, 5);
652  
653          label = gtk_label_new(GetString(STR_VIDEO_TYPE_CTRL));
654          gtk_widget_show(label);
# Line 647 | Line 683 | static void create_graphics_pane(GtkWidg
683          add_menu_item(menu, STR_REF_15HZ_LAB, GTK_SIGNAL_FUNC(mn_15hz));
684          add_menu_item(menu, STR_REF_30HZ_LAB, GTK_SIGNAL_FUNC(mn_30hz));
685          add_menu_item(menu, STR_REF_60HZ_LAB, GTK_SIGNAL_FUNC(mn_60hz));
686 +        add_menu_item(menu, STR_REF_DYNAMIC_LAB, GTK_SIGNAL_FUNC(mn_dynamic));
687          int frameskip = PrefsFindInt32("frameskip");
688 +        int item = -1;
689          switch (frameskip) {
690 <                case 12:
691 <                        gtk_menu_set_active(GTK_MENU(menu), 0);
692 <                        break;
693 <                case 8:
694 <                        gtk_menu_set_active(GTK_MENU(menu), 1);
695 <                        break;
696 <                case 6:
659 <                        gtk_menu_set_active(GTK_MENU(menu), 2);
660 <                        break;
661 <                case 4:
662 <                        gtk_menu_set_active(GTK_MENU(menu), 3);
663 <                        break;
664 <                case 2:
665 <                        gtk_menu_set_active(GTK_MENU(menu), 4);
666 <                        break;
667 <                case 1:
668 <                        gtk_menu_set_active(GTK_MENU(menu), 5);
669 <                        break;
690 >                case 12: item = 0; break;
691 >                case 8: item = 1; break;
692 >                case 6: item = 2; break;
693 >                case 4: item = 3; break;
694 >                case 2: item = 4; break;
695 >                case 1: item = 5; break;
696 >                case 0: item = 6; break;
697          }
698 +        if (item >= 0)
699 +                gtk_menu_set_active(GTK_MENU(menu), item);
700          gtk_option_menu_set_menu(GTK_OPTION_MENU(w_frameskip), menu);
701          gtk_table_attach(GTK_TABLE(table), w_frameskip, 1, 2, 1, 2, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
702  
# Line 678 | Line 707 | static void create_graphics_pane(GtkWidg
707          combo = gtk_combo_new();
708          gtk_widget_show(combo);
709          GList *glist1 = NULL;
710 <        glist1 = g_list_append(glist1, GetString(STR_SIZE_512_LAB));
711 <        glist1 = g_list_append(glist1, GetString(STR_SIZE_640_LAB));
712 <        glist1 = g_list_append(glist1, GetString(STR_SIZE_800_LAB));
713 <        glist1 = g_list_append(glist1, GetString(STR_SIZE_1024_LAB));
714 <        glist1 = g_list_append(glist1, GetString(STR_SIZE_MAX_LAB));
710 >        glist1 = g_list_append(glist1, (void *)GetString(STR_SIZE_512_LAB));
711 >        glist1 = g_list_append(glist1, (void *)GetString(STR_SIZE_640_LAB));
712 >        glist1 = g_list_append(glist1, (void *)GetString(STR_SIZE_800_LAB));
713 >        glist1 = g_list_append(glist1, (void *)GetString(STR_SIZE_1024_LAB));
714 >        glist1 = g_list_append(glist1, (void *)GetString(STR_SIZE_MAX_LAB));
715          gtk_combo_set_popdown_strings(GTK_COMBO(combo), glist1);
716          if (dis_width)
717                  sprintf(str, "%d", dis_width);
# Line 699 | Line 728 | static void create_graphics_pane(GtkWidg
728          combo = gtk_combo_new();
729          gtk_widget_show(combo);
730          GList *glist2 = NULL;
731 <        glist2 = g_list_append(glist2, GetString(STR_SIZE_384_LAB));
732 <        glist2 = g_list_append(glist2, GetString(STR_SIZE_480_LAB));
733 <        glist2 = g_list_append(glist2, GetString(STR_SIZE_600_LAB));
734 <        glist2 = g_list_append(glist2, GetString(STR_SIZE_768_LAB));
735 <        glist2 = g_list_append(glist2, GetString(STR_SIZE_MAX_LAB));
731 >        glist2 = g_list_append(glist2, (void *)GetString(STR_SIZE_384_LAB));
732 >        glist2 = g_list_append(glist2, (void *)GetString(STR_SIZE_480_LAB));
733 >        glist2 = g_list_append(glist2, (void *)GetString(STR_SIZE_600_LAB));
734 >        glist2 = g_list_append(glist2, (void *)GetString(STR_SIZE_768_LAB));
735 >        glist2 = g_list_append(glist2, (void *)GetString(STR_SIZE_MAX_LAB));
736          gtk_combo_set_popdown_strings(GTK_COMBO(combo), glist2);
737          if (dis_height)
738                  sprintf(str, "%d", dis_height);
# Line 713 | Line 742 | static void create_graphics_pane(GtkWidg
742          gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
743          w_display_y = GTK_COMBO(combo)->entry;
744  
745 + #ifdef ENABLE_FBDEV_DGA
746 +        l_fbdev_name = gtk_label_new(GetString(STR_FBDEV_NAME_CTRL));
747 +        gtk_widget_show(l_fbdev_name);
748 +        gtk_table_attach(GTK_TABLE(table), l_fbdev_name, 0, 1, 4, 5, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
749 +
750 +        w_fbdev_name = gtk_entry_new();
751 +        gtk_widget_show(w_fbdev_name);
752 +        gtk_entry_set_text(GTK_ENTRY(w_fbdev_name), fbdev_name);
753 +        gtk_table_attach(GTK_TABLE(table), w_fbdev_name, 1, 2, 4, 5, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
754 +
755 +        w_fbdevice_file = make_entry(box, STR_FBDEVICE_FILE_CTRL, "fbdevicefile");
756 + #endif
757 +
758 +        make_separator(box);
759          make_checkbox(box, STR_NOSOUND_CTRL, "nosound", GTK_SIGNAL_FUNC(tb_nosound));
760  
761          hide_show_graphics_widgets();
# Line 720 | Line 763 | static void create_graphics_pane(GtkWidg
763  
764  
765   /*
766 + *  "Input" pane
767 + */
768 +
769 + static GtkWidget *w_keycode_file;
770 + static GtkWidget *w_mouse_wheel_lines;
771 +
772 + // Set sensitivity of widgets
773 + static void set_input_sensitive(void)
774 + {
775 +        gtk_widget_set_sensitive(w_keycode_file, PrefsFindBool("keycodes"));
776 +        gtk_widget_set_sensitive(w_mouse_wheel_lines, PrefsFindInt16("mousewheelmode") == 1);
777 + }
778 +
779 + // "Use Raw Keycodes" button toggled
780 + static void tb_keycodes(GtkWidget *widget)
781 + {
782 +        PrefsReplaceBool("keycodes", GTK_TOGGLE_BUTTON(widget)->active);
783 +        set_input_sensitive();
784 + }
785 +
786 + // "Mouse Wheel Mode" selected
787 + static void mn_wheel_page(...) {PrefsReplaceInt16("mousewheelmode", 0); set_input_sensitive();}
788 + static void mn_wheel_cursor(...) {PrefsReplaceInt16("mousewheelmode", 1); set_input_sensitive();}
789 +
790 + // Read settings from widgets and set preferences
791 + static void read_input_settings(void)
792 + {
793 +        const char *str = gtk_entry_get_text(GTK_ENTRY(w_keycode_file));
794 +        if (str && strlen(str))
795 +                PrefsReplaceString("keycodefile", str);
796 +        else
797 +                PrefsRemoveItem("keycodefile");
798 +
799 +        PrefsReplaceInt16("mousewheellines", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w_mouse_wheel_lines)));
800 + }
801 +
802 + // Create "Input" pane
803 + static void create_input_pane(GtkWidget *top)
804 + {
805 +        GtkWidget *box, *hbox, *menu, *label;
806 +        GtkObject *adj;
807 +
808 +        box = make_pane(top, STR_INPUT_PANE_TITLE);
809 +
810 +        make_checkbox(box, STR_KEYCODES_CTRL, "keycodes", GTK_SIGNAL_FUNC(tb_keycodes));
811 +        w_keycode_file = make_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile");
812 +
813 +        make_separator(box);
814 +
815 +        static const opt_desc options[] = {
816 +                {STR_MOUSEWHEELMODE_PAGE_LAB, GTK_SIGNAL_FUNC(mn_wheel_page)},
817 +                {STR_MOUSEWHEELMODE_CURSOR_LAB, GTK_SIGNAL_FUNC(mn_wheel_cursor)},
818 +                {0, NULL}
819 +        };
820 +        int wheelmode = PrefsFindInt16("mousewheelmode"), active = 0;
821 +        switch (wheelmode) {
822 +                case 0: active = 0; break;
823 +                case 1: active = 1; break;
824 +        }
825 +        menu = make_option_menu(box, STR_MOUSEWHEELMODE_CTRL, options, active);
826 +
827 +        hbox = gtk_hbox_new(FALSE, 4);
828 +        gtk_widget_show(hbox);
829 +        gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
830 +
831 +        label = gtk_label_new(GetString(STR_MOUSEWHEELLINES_CTRL));
832 +        gtk_widget_show(label);
833 +        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
834 +
835 +        adj = gtk_adjustment_new(PrefsFindInt16("mousewheellines"), 1, 1000, 1, 5, 0);
836 +        w_mouse_wheel_lines = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 0.0, 0);
837 +        gtk_widget_show(w_mouse_wheel_lines);
838 +        gtk_box_pack_start(GTK_BOX(hbox), w_mouse_wheel_lines, FALSE, FALSE, 0);
839 +
840 +        set_input_sensitive();
841 + }
842 +
843 +
844 + /*
845   *  "Serial/Network" pane
846   */
847  
# Line 762 | Line 884 | static GList *add_serial_names(void)
884                          if (strncmp(de->d_name, "ttyS", 4) == 0 || strncmp(de->d_name, "lp", 2) == 0) {
885   #elif defined(__FreeBSD__)
886                          if (strncmp(de->d_name, "cuaa", 4) == 0 || strncmp(de->d_name, "lpt", 3) == 0) {
887 + #elif defined(__NetBSD__)
888 +                        if (strncmp(de->d_name, "tty0", 4) == 0 || strncmp(de->d_name, "lpt", 3) == 0) {
889   #elif defined(sgi)
890                          if (strncmp(de->d_name, "ttyf", 4) == 0 || strncmp(de->d_name, "plp", 3) == 0) {
891   #else
# Line 777 | Line 901 | static GList *add_serial_names(void)
901          if (glist)
902                  g_list_sort(glist, gl_str_cmp);
903          else
904 <                glist = g_list_append(glist, GetString(STR_NONE_LAB));
904 >                glist = g_list_append(glist, (void *)GetString(STR_NONE_LAB));
905          return glist;
906   }
907  
# Line 797 | Line 921 | static GList *add_ether_names(void)
921                          struct ifreq req, *ifr = ifc.ifc_req;
922                          for (int i=0; i<ifc.ifc_len; i+=sizeof(ifreq), ifr++) {
923                                  req = *ifr;
924 < #if defined(__FreeBSD__) || defined(sgi)
924 > #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(sgi)
925                                  if (ioctl(s, SIOCGIFADDR, &req) == 0 && (req.ifr_addr.sa_family == ARPHRD_ETHER || req.ifr_addr.sa_family == ARPHRD_ETHER+1)) {
926 < #else
926 > #elif defined(__linux__)
927                                  if (ioctl(s, SIOCGIFHWADDR, &req) == 0 && req.ifr_hwaddr.sa_family == ARPHRD_ETHER) {
928 + #else
929 +                                if (false) {
930   #endif
931                                          char *str = new char[64];
932                                          strncpy(str, ifr->ifr_name, 63);
# Line 813 | Line 939 | static GList *add_ether_names(void)
939          if (glist)
940                  g_list_sort(glist, gl_str_cmp);
941          else
942 <                glist = g_list_append(glist, GetString(STR_NONE_LAB));
942 >                glist = g_list_append(glist, (void *)GetString(STR_NONE_LAB));
943          return glist;
944   }
945  
946   // Create "Serial/Network" pane
947   static void create_serial_pane(GtkWidget *top)
948   {
949 <        GtkWidget *box, *table, *label, *combo;
949 >        GtkWidget *box, *table, *label, *combo, *sep;
950          GList *glist = add_serial_names();
951  
952          box = make_pane(top, STR_SERIAL_NETWORK_PANE_TITLE);
953 <        table = make_table(box, 2, 3);
953 >        table = make_table(box, 2, 4);
954  
955          label = gtk_label_new(GetString(STR_SERIALA_CTRL));
956          gtk_widget_show(label);
# Line 854 | Line 980 | static void create_serial_pane(GtkWidget
980          gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
981          w_serialb = GTK_COMBO(combo)->entry;
982  
983 +        sep = gtk_hseparator_new();
984 +        gtk_widget_show(sep);
985 +        gtk_table_attach(GTK_TABLE(table), sep, 0, 2, 2, 3, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
986 +
987          label = gtk_label_new(GetString(STR_ETHERNET_IF_CTRL));
988          gtk_widget_show(label);
989 <        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
989 >        gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
990  
991          glist = add_ether_names();
992          combo = gtk_combo_new();
# Line 866 | Line 996 | static void create_serial_pane(GtkWidget
996          if (str == NULL)
997                  str = "";
998          gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), str);
999 <        gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 2, 3, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
999 >        gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
1000          w_ether = GTK_COMBO(combo)->entry;
1001   }
1002  
# Line 877 | Line 1007 | static void create_serial_pane(GtkWidget
1007  
1008   static GtkObject *w_ramsize_adj;
1009   static GtkWidget *w_rom_file;
880 static GtkWidget *w_keycode_file;
1010  
1011   // Model ID selected
1012   static void mn_modelid_5(...) {PrefsReplaceInt32("modelid", 5);}
1013   static void mn_modelid_14(...) {PrefsReplaceInt32("modelid", 14);}
1014  
1015 < // "Use Raw Keycodes" button toggled
1016 < static void tb_keycodes(GtkWidget *widget)
1017 < {
1018 <        PrefsReplaceBool("keycodes", GTK_TOGGLE_BUTTON(widget)->active);
1019 < }
1015 > // CPU/FPU type
1016 > static void mn_cpu_68020(...) {PrefsReplaceInt32("cpu", 2); PrefsReplaceBool("fpu", false);}
1017 > static void mn_cpu_68020_fpu(...) {PrefsReplaceInt32("cpu", 2); PrefsReplaceBool("fpu", true);}
1018 > static void mn_cpu_68030(...) {PrefsReplaceInt32("cpu", 3); PrefsReplaceBool("fpu", false);}
1019 > static void mn_cpu_68030_fpu(...) {PrefsReplaceInt32("cpu", 3); PrefsReplaceBool("fpu", true);}
1020 > static void mn_cpu_68040(...) {PrefsReplaceInt32("cpu", 4); PrefsReplaceBool("fpu", true);}
1021  
1022   // Read settings from widgets and set preferences
1023   static void read_memory_settings(void)
# Line 900 | Line 1030 | static void read_memory_settings(void)
1030          else
1031                  PrefsRemoveItem("rom");
1032  
903        str = gtk_entry_get_text(GTK_ENTRY(w_keycode_file));
904        if (str && strlen(str))
905                PrefsReplaceString("keycodefile", str);
906        else
907                PrefsRemoveItem("keycodefile");
1033   }
1034  
1035   // Create "Memory/Misc" pane
1036   static void create_memory_pane(GtkWidget *top)
1037   {
1038 <        GtkWidget *box, *vbox, *hbox, *hbox2, *label, *scale, *opt, *menu;
1038 >        GtkWidget *box, *hbox, *vbox, *hbox2, *label, *scale, *menu;
1039  
1040          box = make_pane(top, STR_MEMORY_MISC_PANE_TITLE);
1041  
# Line 952 | Line 1077 | static void create_memory_pane(GtkWidget
1077          gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
1078          gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
1079  
1080 <        static const opt_desc options[] = {
1080 >        static const opt_desc model_options[] = {
1081                  {STR_MODELID_5_LAB, GTK_SIGNAL_FUNC(mn_modelid_5)},
1082                  {STR_MODELID_14_LAB, GTK_SIGNAL_FUNC(mn_modelid_14)},
1083                  {0, NULL}
# Line 962 | Line 1087 | static void create_memory_pane(GtkWidget
1087                  case 5: active = 0; break;
1088                  case 14: active = 1; break;
1089          }
1090 <        menu = make_option_menu(box, STR_MODELID_CTRL, options, active);
1090 >        make_option_menu(box, STR_MODELID_CTRL, model_options, active);
1091  
1092 <        w_rom_file = make_entry(box, STR_ROM_FILE_CTRL, "rom");
1092 > #if EMULATED_68K
1093 >        static const opt_desc cpu_options[] = {
1094 >                {STR_CPU_68020_LAB, GTK_SIGNAL_FUNC(mn_cpu_68020)},
1095 >                {STR_CPU_68020_FPU_LAB, GTK_SIGNAL_FUNC(mn_cpu_68020_fpu)},
1096 >                {STR_CPU_68030_LAB, GTK_SIGNAL_FUNC(mn_cpu_68030)},
1097 >                {STR_CPU_68030_FPU_LAB, GTK_SIGNAL_FUNC(mn_cpu_68030_fpu)},
1098 >                {STR_CPU_68040_LAB, GTK_SIGNAL_FUNC(mn_cpu_68040)},
1099 >                {0, NULL}
1100 >        };
1101 >        int cpu = PrefsFindInt32("cpu");
1102 >        bool fpu = PrefsFindBool("fpu");
1103 >        active = 0;
1104 >        switch (cpu) {
1105 >                case 2: active = fpu ? 1 : 0; break;
1106 >                case 3: active = fpu ? 3 : 2; break;
1107 >                case 4: active = 4;
1108 >        }
1109 >        make_option_menu(box, STR_CPU_CTRL, cpu_options, active);
1110 > #endif
1111  
1112 <        make_checkbox(box, STR_KEYCODES_CTRL, "keycodes", GTK_SIGNAL_FUNC(tb_keycodes));
970 <        w_keycode_file = make_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile");
1112 >        w_rom_file = make_entry(box, STR_ROM_FILE_CTRL, "rom");
1113   }
1114  
1115  
# Line 980 | Line 1122 | static void read_settings(void)
1122          read_volumes_settings();
1123          read_scsi_settings();
1124          read_graphics_settings();
1125 +        read_input_settings();
1126          read_serial_settings();
1127          read_memory_settings();
1128   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines