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.15 by cebix, 2001-02-02T20:52:57Z vs.
Revision 1.23 by gbeauche, 2002-09-17T16:06:37Z

# Line 1 | Line 1
1   /*
2   *  prefs_editor_gtk.cpp - Preferences editor, Unix implementation using GTK+
3   *
4 < *  Basilisk II (C) 1997-2001 Christian Bauer
4 > *  Basilisk II (C) 1997-2002 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 28 | Line 28
28   #include <net/if.h>
29   #include <net/if_arp.h>
30  
31 + #ifdef HAVE_GNOMEUI
32 + #include <gnome.h>
33 + #endif
34 +
35   #include "user_strings.h"
36   #include "version.h"
37   #include "cdrom.h"
# Line 48 | Line 52 | static void create_graphics_pane(GtkWidg
52   static void create_input_pane(GtkWidget *top);
53   static void create_serial_pane(GtkWidget *top);
54   static void create_memory_pane(GtkWidget *top);
55 + static void create_jit_pane(GtkWidget *top);
56   static void read_settings(void);
57  
58  
# Line 60 | Line 65 | struct opt_desc {
65          GtkSignalFunc func;
66   };
67  
68 + struct combo_desc {
69 +        int label_id;
70 + };
71 +
72   static void add_menu_item(GtkWidget *menu, int label_id, GtkSignalFunc func)
73   {
74          GtkWidget *item = gtk_menu_item_new_with_label(GetString(label_id));
# Line 150 | Line 159 | static GtkWidget *make_option_menu(GtkWi
159          return menu;
160   }
161  
162 < static GtkWidget *make_entry(GtkWidget *top, int label_id, const char *prefs_item)
162 > static GtkWidget *make_file_entry(GtkWidget *top, int label_id, const char *prefs_item, bool only_dirs = false)
163   {
164          GtkWidget *box, *label, *entry;
165  
# Line 162 | Line 171 | static GtkWidget *make_entry(GtkWidget *
171          gtk_widget_show(label);
172          gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
173  
165        entry = gtk_entry_new();
166        gtk_widget_show(entry);
174          const char *str = PrefsFindString(prefs_item);
175          if (str == NULL)
176                  str = "";
177 +
178 + #ifdef HAVE_GNOMEUI
179 +        entry = gnome_file_entry_new(NULL, GetString(label_id));
180 +        if (only_dirs)
181 +                gnome_file_entry_set_directory(GNOME_FILE_ENTRY(entry), true);
182 +        gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(entry))), str);
183 + #else
184 +        entry = gtk_entry_new();
185          gtk_entry_set_text(GTK_ENTRY(entry), str);
186 + #endif
187 +        gtk_widget_show(entry);
188          gtk_box_pack_start(GTK_BOX(box), entry, TRUE, TRUE, 0);
189          return entry;
190   }
191  
192 + static char *get_file_entry_path(GtkWidget *entry)
193 + {
194 + #ifdef HAVE_GNOMEUI
195 +        return gnome_file_entry_get_full_path(GNOME_FILE_ENTRY(entry), false);
196 + #else
197 +        return gtk_entry_get_text(GTK_ENTRY(entry));
198 + #endif
199 + }
200 +
201   static GtkWidget *make_checkbox(GtkWidget *top, int label_id, const char *prefs_item, GtkSignalFunc func)
202   {
203          GtkWidget *button = gtk_check_button_new_with_label(GetString(label_id));
# Line 182 | Line 208 | static GtkWidget *make_checkbox(GtkWidge
208          return button;
209   }
210  
211 + static GtkWidget *make_combobox(GtkWidget *top, int label_id, const char *prefs_item, const combo_desc *options)
212 + {
213 +        GtkWidget *box, *label, *combo;
214 +        char str[32];
215 +
216 +        box = gtk_hbox_new(FALSE, 4);
217 +        gtk_widget_show(box);
218 +        gtk_box_pack_start(GTK_BOX(top), box, FALSE, FALSE, 0);
219 +
220 +        label = gtk_label_new(GetString(label_id));
221 +        gtk_widget_show(label);
222 +        gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
223  
224 +        GList *glist = NULL;
225 +        while (options->label_id) {
226 +                glist = g_list_append(glist, (void *)GetString(options->label_id));
227 +                options++;
228 +        }
229 +        
230 +        combo = gtk_combo_new();
231 +        gtk_widget_show(combo);
232 +        gtk_combo_set_popdown_strings(GTK_COMBO(combo), glist);
233 +        
234 +        sprintf(str, "%d", PrefsFindInt32(prefs_item));
235 +        gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), str);
236 +        gtk_box_pack_start(GTK_BOX(box), combo, TRUE, TRUE, 0);
237 +        
238 +        return combo;
239 + }
240 +
241 +
242   /*
243   *  Show preferences editor
244   *  Returns true when user clicked on "Start", false otherwise
# Line 225 | Line 281 | static void dl_quit(GtkWidget *dialog)
281   // "About" selected
282   static void mn_about(...)
283   {
284 <        GtkWidget *dialog, *label, *button;
284 >        GtkWidget *dialog;
285 >
286 > #ifdef HAVE_GNOMEUI
287 >
288 >        char version[32];
289 >        sprintf(version, "Version %d.%d", VERSION_MAJOR, VERSION_MINOR);
290 >        const char *authors[] = {
291 >                "Christian Bauer",
292 >                "Orlando Bassotto",
293 >                "Gwenolé Beauchesne",
294 >                "Marc Chabanas",
295 >                "Marc Hellwig",
296 >                "Biill Huey",
297 >                "Brian J. Johnson",
298 >                "Jürgen Lachmann",
299 >                "Samuel Lander",
300 >                "David Lawrence",
301 >                "Lauri Pesonen",
302 >                "Bernd Schmidt",
303 >                "and others",
304 >                NULL
305 >        };
306 >        dialog = gnome_about_new(
307 >                "Basilisk II",
308 >                version,
309 >                "Copyright (C) 1997-2002 Christian Bauer",
310 >                authors,
311 >                "Basilisk II comes with ABSOLUTELY NO WARRANTY."
312 >                "This is free software, and you are welcome to redistribute it"
313 >                "under the terms of the GNU General Public License.",
314 >                NULL
315 >        );
316 >        gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(win));
317 >
318 > #else
319 >
320 >        GtkWidget *label, *button;
321  
322 <        char str[256];
323 <        sprintf(str, GetString(STR_ABOUT_TEXT1), VERSION_MAJOR, VERSION_MINOR);
324 <        strncat(str, "\n", 255);
325 <        strncat(str, GetString(STR_ABOUT_TEXT2), 255);
322 >        char str[512];
323 >        sprintf(str,
324 >                "Basilisk II\nVersion %d.%d\n\n"
325 >                "Copyright (C) 1997-2002 Christian Bauer et al.\n"
326 >                "E-mail: Christian.Bauer@uni-mainz.de\n"
327 >                "http://www.uni-mainz.de/~bauec002/B2Main.html\n\n"
328 >                "Basilisk II comes with ABSOLUTELY NO\n"
329 >                "WARRANTY. This is free software, and\n"
330 >                "you are welcome to redistribute it\n"
331 >                "under the terms of the GNU General\n"
332 >                "Public License.\n",
333 >                VERSION_MAJOR, VERSION_MINOR
334 >        );
335  
336          dialog = gtk_dialog_new();
236        gtk_widget_set_usize(GTK_WIDGET(dialog), strlen(GetString(STR_ABOUT_TEXT2)) + 200, 120);
337          gtk_window_set_title(GTK_WINDOW(dialog), GetString(STR_ABOUT_TITLE));
338          gtk_container_border_width(GTK_CONTAINER(dialog), 5);
339          gtk_widget_set_uposition(GTK_WIDGET(dialog), 100, 150);
# Line 248 | Line 348 | static void mn_about(...)
348          gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, FALSE, FALSE, 0);
349          GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
350          gtk_widget_grab_default(button);
351 +
352 + #endif
353 +
354          gtk_widget_show(dialog);
355   }
356  
# Line 301 | Line 404 | bool PrefsEditor(void)
404          create_input_pane(notebook);
405          create_serial_pane(notebook);
406          create_memory_pane(notebook);
407 +        create_jit_pane(notebook);
408  
409          static const opt_desc buttons[] = {
410                  {STR_START_BUTTON, GTK_SIGNAL_FUNC(cb_start)},
# Line 423 | Line 527 | static void read_volumes_settings(void)
527                  PrefsAddString("disk", str);
528          }
529  
530 <        PrefsReplaceString("extfs", gtk_entry_get_text(GTK_ENTRY(w_extfs)));
530 >        PrefsReplaceString("extfs", get_file_entry_path(w_extfs));
531   }
532  
533   // Create "Volumes" pane
# Line 444 | Line 548 | static void create_volumes_pane(GtkWidge
548          gtk_signal_connect(GTK_OBJECT(volume_list), "select_row", GTK_SIGNAL_FUNC(cl_selected), NULL);
549          char *str;
550          int32 index = 0;
551 <        while ((str = (char *)PrefsFindString("disk", index++)) != NULL)
551 >        while ((str = const_cast<char *>(PrefsFindString("disk", index++))) != NULL)
552                  gtk_clist_append(GTK_CLIST(volume_list), &str);
553          gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), volume_list);
554          gtk_box_pack_start(GTK_BOX(box), scroll, TRUE, TRUE, 0);
# Line 459 | Line 563 | static void create_volumes_pane(GtkWidge
563          make_button_box(box, 0, buttons);
564          make_separator(box);
565  
566 <        w_extfs = make_entry(box, STR_EXTFS_CTRL, "extfs");
566 >        w_extfs = make_file_entry(box, STR_EXTFS_CTRL, "extfs", true);
567  
568          static const opt_desc options[] = {
569                  {STR_BOOT_ANY_LAB, GTK_SIGNAL_FUNC(mn_boot_any)},
# Line 478 | Line 582 | static void create_volumes_pane(GtkWidge
582  
583  
584   /*
585 + *  "JIT Compiler" pane
586 + */
587 +
588 + static GtkWidget *w_jit_fpu;
589 + static GtkWidget *w_jit_atraps;
590 + static GtkWidget *w_jit_cache_size;
591 + static GtkWidget *w_jit_lazy_flush;
592 +
593 + // Set sensitivity of widgets
594 + static void set_jit_sensitive(void)
595 + {
596 +        const bool jit_enabled = PrefsFindBool("jit");
597 +        gtk_widget_set_sensitive(w_jit_fpu, jit_enabled);
598 +        gtk_widget_set_sensitive(w_jit_cache_size, jit_enabled);
599 +        gtk_widget_set_sensitive(w_jit_lazy_flush, jit_enabled);
600 + }
601 +
602 + // "Use JIT Compiler" button toggled
603 + static void tb_jit(GtkWidget *widget)
604 + {
605 +        PrefsReplaceBool("jit", GTK_TOGGLE_BUTTON(widget)->active);
606 +        set_jit_sensitive();
607 + }
608 +
609 + // "Compile FPU Instructions" button toggled
610 + static void tb_jit_fpu(GtkWidget *widget)
611 + {
612 +        PrefsReplaceBool("jitfpu", GTK_TOGGLE_BUTTON(widget)->active);
613 + }
614 +
615 + // "Lazy translation cache invalidation" button toggled
616 + static void tb_jit_lazy_flush(GtkWidget *widget)
617 + {
618 +        PrefsReplaceBool("jitlazyflush", GTK_TOGGLE_BUTTON(widget)->active);
619 + }
620 +
621 + // Read settings from widgets and set preferences
622 + static void read_jit_settings(void)
623 + {
624 + #if USE_JIT
625 +        bool jit_enabled = PrefsFindBool("jit");
626 +        if (jit_enabled) {
627 +                const char *str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(w_jit_cache_size)->entry));
628 +                PrefsReplaceInt32("jitcachesize", atoi(str));
629 +        }
630 + #endif
631 + }
632 +
633 + // Create "JIT Compiler" pane
634 + static void create_jit_pane(GtkWidget *top)
635 + {
636 + #if USE_JIT
637 +        GtkWidget *box, *table, *label, *menu;
638 +        char str[32];
639 +        
640 +        box = make_pane(top, STR_JIT_PANE_TITLE);
641 +        make_checkbox(box, STR_JIT_CTRL, "jit", GTK_SIGNAL_FUNC(tb_jit));
642 +        
643 +        w_jit_fpu = make_checkbox(box, STR_JIT_FPU_CTRL, "jitfpu", GTK_SIGNAL_FUNC(tb_jit_fpu));
644 +        
645 +        // Translation cache size
646 +        static const combo_desc options[] = {
647 +                STR_JIT_CACHE_SIZE_2MB_LAB,
648 +                STR_JIT_CACHE_SIZE_4MB_LAB,
649 +                STR_JIT_CACHE_SIZE_8MB_LAB,
650 +                STR_JIT_CACHE_SIZE_16MB_LAB,
651 +                0
652 +        };
653 +        w_jit_cache_size = make_combobox(box, STR_JIT_CACHE_SIZE_CTRL, "jitcachesize", options);
654 +        
655 +        // Lazy translation cache invalidation
656 +        w_jit_lazy_flush = make_checkbox(box, STR_JIT_LAZY_CINV_CTRL, "jitlazyflush", GTK_SIGNAL_FUNC(tb_jit_lazy_flush));
657 +        
658 +        set_jit_sensitive();
659 + #endif
660 + }
661 +
662 + /*
663   *  "SCSI" pane
664   */
665  
# Line 489 | Line 671 | static void read_scsi_settings(void)
671          for (int id=0; id<7; id++) {
672                  char prefs_name[32];
673                  sprintf(prefs_name, "scsi%d", id);
674 <                const char *str = gtk_entry_get_text(GTK_ENTRY(w_scsi[id]));
674 >                const char *str = get_file_entry_path(w_scsi[id]);
675                  if (str && strlen(str))
676                          PrefsReplaceString(prefs_name, str);
677                  else
# Line 507 | Line 689 | static void create_scsi_pane(GtkWidget *
689          for (int id=0; id<7; id++) {
690                  char prefs_name[32];
691                  sprintf(prefs_name, "scsi%d", id);
692 <                w_scsi[id] = make_entry(box, STR_SCSI_ID_0 + id, prefs_name);
692 >                w_scsi[id] = make_file_entry(box, STR_SCSI_ID_0 + id, prefs_name);
693          }
694   }
695  
# Line 637 | Line 819 | static void read_graphics_settings(void)
819                          return;
820          }
821          PrefsReplaceString("screen", pref);
822 +
823 + #ifdef ENABLE_FBDEV_DGA
824 +        str = get_file_entry_path(w_fbdevice_file);
825 +        if (str && strlen(str))
826 +                PrefsReplaceString("fbdevicefile", str);
827 +        else
828 +                PrefsRemoveItem("fbdevicefile");
829 + #endif
830   }
831  
832   // Create "Graphics/Sound" pane
# Line 752 | Line 942 | static void create_graphics_pane(GtkWidg
942          gtk_entry_set_text(GTK_ENTRY(w_fbdev_name), fbdev_name);
943          gtk_table_attach(GTK_TABLE(table), w_fbdev_name, 1, 2, 4, 5, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
944  
945 <        w_fbdevice_file = make_entry(box, STR_FBDEVICE_FILE_CTRL, "fbdevicefile");
945 >        w_fbdevice_file = make_file_entry(box, STR_FBDEVICE_FILE_CTRL, "fbdevicefile");
946   #endif
947  
948          make_separator(box);
# Line 790 | Line 980 | static void mn_wheel_cursor(...) {PrefsR
980   // Read settings from widgets and set preferences
981   static void read_input_settings(void)
982   {
983 <        const char *str = gtk_entry_get_text(GTK_ENTRY(w_keycode_file));
983 >        const char *str = get_file_entry_path(w_keycode_file);
984          if (str && strlen(str))
985                  PrefsReplaceString("keycodefile", str);
986          else
# Line 808 | Line 998 | static void create_input_pane(GtkWidget
998          box = make_pane(top, STR_INPUT_PANE_TITLE);
999  
1000          make_checkbox(box, STR_KEYCODES_CTRL, "keycodes", GTK_SIGNAL_FUNC(tb_keycodes));
1001 <        w_keycode_file = make_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile");
1001 >        w_keycode_file = make_file_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile");
1002  
1003          make_separator(box);
1004  
# Line 845 | Line 1035 | static void create_input_pane(GtkWidget
1035   *  "Serial/Network" pane
1036   */
1037  
1038 < static GtkWidget *w_seriala, *w_serialb, *w_ether;
1038 > static GtkWidget *w_seriala, *w_serialb, *w_ether, *w_udp_port;
1039 >
1040 > // Set sensitivity of widgets
1041 > static void set_serial_sensitive(void)
1042 > {
1043 > #if SUPPORTS_UDP_TUNNEL
1044 >        gtk_widget_set_sensitive(w_ether, !PrefsFindBool("udptunnel"));
1045 >        gtk_widget_set_sensitive(w_udp_port, PrefsFindBool("udptunnel"));
1046 > #endif
1047 > }
1048 >
1049 > // "Tunnel AppleTalk over IP" button toggled
1050 > static void tb_udptunnel(GtkWidget *widget)
1051 > {
1052 >        PrefsReplaceBool("udptunnel", GTK_TOGGLE_BUTTON(widget)->active);
1053 >        set_serial_sensitive();
1054 > }
1055  
1056   // Read settings from widgets and set preferences
1057   static void read_serial_settings(void)
# Line 863 | Line 1069 | static void read_serial_settings(void)
1069                  PrefsReplaceString("ether", str);
1070          else
1071                  PrefsRemoveItem("ether");
1072 +
1073 + #if SUPPORTS_UDP_TUNNEL
1074 +        PrefsReplaceInt32("udpport", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w_udp_port)));
1075 + #endif
1076   }
1077  
1078   // Add names of serial devices
# Line 946 | Line 1156 | static GList *add_ether_names(void)
1156   // Create "Serial/Network" pane
1157   static void create_serial_pane(GtkWidget *top)
1158   {
1159 <        GtkWidget *box, *table, *label, *combo, *sep;
1160 <        GList *glist = add_serial_names();
1159 >        GtkWidget *box, *hbox, *table, *label, *combo, *sep;
1160 >        GtkObject *adj;
1161  
1162          box = make_pane(top, STR_SERIAL_NETWORK_PANE_TITLE);
1163          table = make_table(box, 2, 4);
# Line 956 | Line 1166 | static void create_serial_pane(GtkWidget
1166          gtk_widget_show(label);
1167          gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
1168  
1169 +        GList *glist = add_serial_names();
1170          combo = gtk_combo_new();
1171          gtk_widget_show(combo);
1172          gtk_combo_set_popdown_strings(GTK_COMBO(combo), glist);
# Line 998 | Line 1209 | static void create_serial_pane(GtkWidget
1209          gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), str);
1210          gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
1211          w_ether = GTK_COMBO(combo)->entry;
1212 +
1213 + #if SUPPORTS_UDP_TUNNEL
1214 +        make_checkbox(box, STR_UDPTUNNEL_CTRL, "udptunnel", GTK_SIGNAL_FUNC(tb_udptunnel));
1215 +
1216 +        hbox = gtk_hbox_new(FALSE, 4);
1217 +        gtk_widget_show(hbox);
1218 +        gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
1219 +
1220 +        label = gtk_label_new(GetString(STR_UDPPORT_CTRL));
1221 +        gtk_widget_show(label);
1222 +        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1223 +
1224 +        adj = gtk_adjustment_new(PrefsFindInt32("udpport"), 1, 65535, 1, 5, 0);
1225 +        w_udp_port = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 0.0, 0);
1226 +        gtk_widget_show(w_udp_port);
1227 +        gtk_box_pack_start(GTK_BOX(hbox), w_udp_port, FALSE, FALSE, 0);
1228 + #endif
1229 +
1230 +        set_serial_sensitive();
1231   }
1232  
1233  
# Line 1008 | Line 1238 | static void create_serial_pane(GtkWidget
1238   static GtkObject *w_ramsize_adj;
1239   static GtkWidget *w_rom_file;
1240  
1241 + // "Ignore SEGV" button toggled
1242 + #ifdef HAVE_SIGSEGV_SKIP_INSTRUCTION
1243 + static void tb_ignoresegv(GtkWidget *widget)
1244 + {
1245 +        PrefsReplaceBool("ignoresegv", GTK_TOGGLE_BUTTON(widget)->active);
1246 + }
1247 + #endif
1248 +
1249   // Model ID selected
1250   static void mn_modelid_5(...) {PrefsReplaceInt32("modelid", 5);}
1251   static void mn_modelid_14(...) {PrefsReplaceInt32("modelid", 14);}
# Line 1024 | Line 1262 | static void read_memory_settings(void)
1262   {
1263          PrefsReplaceInt32("ramsize", int(GTK_ADJUSTMENT(w_ramsize_adj)->value) << 20);
1264  
1265 <        const char *str = gtk_entry_get_text(GTK_ENTRY(w_rom_file));
1265 >        const char *str = get_file_entry_path(w_rom_file);
1266          if (str && strlen(str))
1267                  PrefsReplaceString("rom", str);
1268          else
# Line 1035 | Line 1273 | static void read_memory_settings(void)
1273   // Create "Memory/Misc" pane
1274   static void create_memory_pane(GtkWidget *top)
1275   {
1276 <        GtkWidget *box, *hbox, *vbox, *hbox2, *label, *scale, *menu;
1276 >        GtkWidget *box, *hbox, *vbox, *hbox2, *label, *scale;
1277  
1278          box = make_pane(top, STR_MEMORY_MISC_PANE_TITLE);
1279  
# Line 1109 | Line 1347 | static void create_memory_pane(GtkWidget
1347          make_option_menu(box, STR_CPU_CTRL, cpu_options, active);
1348   #endif
1349  
1350 <        w_rom_file = make_entry(box, STR_ROM_FILE_CTRL, "rom");
1350 >        w_rom_file = make_file_entry(box, STR_ROM_FILE_CTRL, "rom");
1351 >
1352 > #ifdef HAVE_SIGSEGV_SKIP_INSTRUCTION
1353 >        make_checkbox(box, STR_IGNORESEGV_CTRL, "ignoresegv", GTK_SIGNAL_FUNC(tb_ignoresegv));
1354 > #endif
1355   }
1356  
1357  
# Line 1125 | Line 1367 | static void read_settings(void)
1367          read_input_settings();
1368          read_serial_settings();
1369          read_memory_settings();
1370 +        read_jit_settings();
1371   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines