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

Comparing SheepShaver/src/Unix/prefs_editor_gtk.cpp (file contents):
Revision 1.14 by gbeauche, 2005-03-28T09:05:28Z vs.
Revision 1.15 by gbeauche, 2005-11-27T16:01:59Z

# Line 56 | Line 56 | static void read_settings(void);
56   *  Utility functions
57   */
58  
59 + #if ! GLIB_CHECK_VERSION(2,0,0)
60 + #define G_OBJECT(obj)                                                   GTK_OBJECT(obj)
61 + #define g_object_get_data(obj, key)                             gtk_object_get_data((obj), (key))
62 + #define g_object_set_data(obj, key, data)               gtk_object_set_data((obj), (key), (data))
63 + #endif
64 +
65   struct opt_desc {
66          int label_id;
67          GtkSignalFunc func;
68   };
69  
70 + struct combo_desc {
71 +        int label_id;
72 + };
73 +
74 + struct file_req_assoc {
75 +        file_req_assoc(GtkWidget *r, GtkWidget *e) : req(r), entry(e) {}
76 +        GtkWidget *req;
77 +        GtkWidget *entry;
78 + };
79 +
80 + static void cb_browse_ok(GtkWidget *button, file_req_assoc *assoc)
81 + {
82 +        gchar *file = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(assoc->req));
83 +        gtk_entry_set_text(GTK_ENTRY(assoc->entry), file);
84 +        gtk_widget_destroy(assoc->req);
85 +        delete assoc;
86 + }
87 +
88 + static void cb_browse(GtkWidget *widget, void *user_data)
89 + {
90 +        GtkWidget *req = gtk_file_selection_new(GetString(STR_BROWSE_TITLE));
91 +        gtk_signal_connect_object(GTK_OBJECT(req), "delete_event", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(req));
92 +        gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(req)->ok_button), "clicked", GTK_SIGNAL_FUNC(cb_browse_ok), new file_req_assoc(req, (GtkWidget *)user_data));
93 +        gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(req)->cancel_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(req));
94 +        gtk_widget_show(req);
95 + }
96 +
97 + static GtkWidget *make_browse_button(GtkWidget *entry)
98 + {
99 +        GtkWidget *button;
100 +
101 +        button = gtk_button_new_with_label(GetString(STR_BROWSE_CTRL));
102 +        gtk_widget_show(button);
103 +        gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)cb_browse, (void *)entry);
104 +        return button;
105 + }
106 +
107   static void add_menu_item(GtkWidget *menu, int label_id, GtkSignalFunc func)
108   {
109          GtkWidget *item = gtk_menu_item_new_with_label(GetString(label_id));
# Line 124 | Line 167 | static GtkWidget *make_table(GtkWidget *
167          return table;
168   }
169  
170 + static GtkWidget *table_make_option_menu(GtkWidget *table, int row, int label_id, const opt_desc *options, int active)
171 + {
172 +        GtkWidget *label, *opt, *menu;
173 +
174 +        label = gtk_label_new(GetString(label_id));
175 +        gtk_widget_show(label);
176 +        gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
177 +
178 +        opt = gtk_option_menu_new();
179 +        gtk_widget_show(opt);
180 +        menu = gtk_menu_new();
181 +
182 +        while (options->label_id) {
183 +                add_menu_item(menu, options->label_id, options->func);
184 +                options++;
185 +        }
186 +        gtk_menu_set_active(GTK_MENU(menu), active);
187 +
188 +        gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu);
189 +        gtk_table_attach(GTK_TABLE(table), opt, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
190 +        return menu;
191 + }
192 +
193 + static GtkWidget *table_make_combobox(GtkWidget *table, int row, int label_id, const char *default_value, GList *glist)
194 + {
195 +        GtkWidget *label, *combo;
196 +        char str[32];
197 +
198 +        label = gtk_label_new(GetString(label_id));
199 +        gtk_widget_show(label);
200 +        gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
201 +        
202 +        combo = gtk_combo_new();
203 +        gtk_widget_show(combo);
204 +        gtk_combo_set_popdown_strings(GTK_COMBO(combo), glist);
205 +
206 +        gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), default_value);
207 +        gtk_table_attach(GTK_TABLE(table), combo, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
208 +        
209 +        return combo;
210 + }
211 +
212 + static GtkWidget *table_make_combobox(GtkWidget *table, int row, int label_id, const char *default_value, const combo_desc *options)
213 + {
214 +        GList *glist = NULL;
215 +        while (options->label_id) {
216 +                glist = g_list_append(glist, (void *)GetString(options->label_id));
217 +                options++;
218 +        }
219 +
220 +        return table_make_combobox(table, row, label_id, default_value, glist);
221 + }
222 +
223 + static GtkWidget *table_make_file_entry(GtkWidget *table, int row, int label_id, const char *prefs_item, bool only_dirs = false)
224 + {
225 +        GtkWidget *box, *label, *entry, *button;
226 +
227 +        label = gtk_label_new(GetString(label_id));
228 +        gtk_widget_show(label);
229 +        gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
230 +
231 +        const char *str = PrefsFindString(prefs_item);
232 +        if (str == NULL)
233 +                str = "";
234 +
235 +        box = gtk_hbox_new(FALSE, 4);
236 +        gtk_widget_show(box);
237 +        gtk_table_attach(GTK_TABLE(table), box, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
238 +
239 +        entry = gtk_entry_new();
240 +        gtk_entry_set_text(GTK_ENTRY(entry), str);
241 +        gtk_widget_show(entry);
242 +        gtk_box_pack_start(GTK_BOX(box), entry, TRUE, TRUE, 0);
243 +
244 +        button = make_browse_button(entry);
245 +        gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
246 +        g_object_set_data(G_OBJECT(entry), "chooser_button", button);
247 +        return entry;
248 + }
249 +
250   static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const opt_desc *options, int active)
251   {
252          GtkWidget *box, *label, *opt, *menu;
# Line 284 | Line 407 | static void mn_zap_pram(...)
407   // Menu item descriptions
408   static GtkItemFactoryEntry menu_items[] = {
409          {(gchar *)GetString(STR_PREFS_MENU_FILE_GTK),           NULL,                   NULL,                                                   0, "<Branch>"},
410 <        {(gchar *)GetString(STR_PREFS_ITEM_START_GTK),          NULL,                   GTK_SIGNAL_FUNC(cb_start),              0, NULL},
410 >        {(gchar *)GetString(STR_PREFS_ITEM_START_GTK),          "<control>S",   GTK_SIGNAL_FUNC(cb_start),              0, NULL},
411          {(gchar *)GetString(STR_PREFS_ITEM_ZAP_PRAM_GTK),       NULL,                   GTK_SIGNAL_FUNC(mn_zap_pram),   0, NULL},
412          {(gchar *)GetString(STR_PREFS_ITEM_SEPL_GTK),           NULL,                   NULL,                                                   0, "<Separator>"},
413          {(gchar *)GetString(STR_PREFS_ITEM_QUIT_GTK),           "<control>Q",   GTK_SIGNAL_FUNC(cb_quit),               0, NULL},
# Line 361 | Line 484 | static void cl_selected(GtkWidget *list,
484          selected_volume = row;
485   }
486  
364 struct file_req_assoc {
365        file_req_assoc(GtkWidget *r, GtkWidget *e) : req(r), entry(e) {}
366        GtkWidget *req;
367        GtkWidget *entry;
368 };
369
487   // Volume selected for addition
488   static void add_volume_ok(GtkWidget *button, file_req_assoc *assoc)
489   {
# Line 853 | Line 970 | static GtkWidget *w_mouse_wheel_lines;
970   // Set sensitivity of widgets
971   static void set_input_sensitive(void)
972   {
973 <        gtk_widget_set_sensitive(w_keycode_file, PrefsFindBool("keycodes"));
973 >        const bool use_keycodes = PrefsFindBool("keycodes");
974 >        gtk_widget_set_sensitive(w_keycode_file, use_keycodes);
975 >        gtk_widget_set_sensitive(GTK_WIDGET(g_object_get_data(G_OBJECT(w_keycode_file), "chooser_button")), use_keycodes);
976          gtk_widget_set_sensitive(w_mouse_wheel_lines, PrefsFindInt32("mousewheelmode") == 1);
977   }
978  
# Line 883 | Line 1002 | static void read_input_settings(void)
1002   // Create "Input" pane
1003   static void create_input_pane(GtkWidget *top)
1004   {
1005 <        GtkWidget *box, *hbox, *menu, *label;
1005 >        GtkWidget *box, *hbox, *menu, *label, *button;
1006          GtkObject *adj;
1007  
1008          box = make_pane(top, STR_INPUT_PANE_TITLE);
1009  
1010          make_checkbox(box, STR_KEYCODES_CTRL, "keycodes", GTK_SIGNAL_FUNC(tb_keycodes));
1011 <        w_keycode_file = make_entry(box, STR_KEYCODE_FILE_CTRL, "keycodefile");
1011 >
1012 >        hbox = gtk_hbox_new(FALSE, 4);
1013 >        gtk_widget_show(hbox);
1014 >        gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
1015 >
1016 >        label = gtk_label_new(GetString(STR_KEYCODES_CTRL));
1017 >        gtk_widget_show(label);
1018 >        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1019 >
1020 >        const char *str = PrefsFindString("keycodefile");
1021 >        if (str == NULL)
1022 >                str = "";
1023 >
1024 >        w_keycode_file = gtk_entry_new();
1025 >        gtk_entry_set_text(GTK_ENTRY(w_keycode_file), str);
1026 >        gtk_widget_show(w_keycode_file);
1027 >        gtk_box_pack_start(GTK_BOX(hbox), w_keycode_file, TRUE, TRUE, 0);
1028 >
1029 >        button = make_browse_button(w_keycode_file);
1030 >        gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
1031 >        g_object_set_data(G_OBJECT(w_keycode_file), "chooser_button", button);
1032  
1033          make_separator(box);
1034  
# Line 1017 | Line 1156 | static GList *add_ether_names(void)
1156                  }
1157                  close(s);
1158          }
1159 + #ifdef HAVE_SLIRP
1160 +        static char s_slirp[] = "slirp";
1161 +        glist = g_list_append(glist, s_slirp);
1162 + #endif
1163          if (glist)
1164                  g_list_sort(glist, gl_str_cmp);
1165          else
# Line 1082 | Line 1225 | static void create_serial_pane(GtkWidget
1225   *  "Memory/Misc" pane
1226   */
1227  
1228 < static GtkObject *w_ramsize_adj;
1228 > static GtkWidget *w_ramsize;
1229   static GtkWidget *w_rom_file;
1230  
1231   // Don't use CPU when idle?
# Line 1100 | Line 1243 | static void tb_ignoresegv(GtkWidget *wid
1243   // Read settings from widgets and set preferences
1244   static void read_memory_settings(void)
1245   {
1246 <        PrefsReplaceInt32("ramsize", int(GTK_ADJUSTMENT(w_ramsize_adj)->value) << 20);
1246 >        const char *str = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(w_ramsize)->entry));
1247 >        PrefsReplaceInt32("ramsize", atoi(str) << 20);
1248  
1249 <        const char *str = gtk_entry_get_text(GTK_ENTRY(w_rom_file));
1249 >        str = gtk_entry_get_text(GTK_ENTRY(w_rom_file));
1250          if (str && strlen(str))
1251                  PrefsReplaceString("rom", str);
1252          else
# Line 1112 | Line 1256 | static void read_memory_settings(void)
1256   // Create "Memory/Misc" pane
1257   static void create_memory_pane(GtkWidget *top)
1258   {
1259 <        GtkWidget *box, *vbox, *hbox, *hbox2, *label, *scale;
1259 >        GtkWidget *box, *hbox, *table, *label, *menu;
1260  
1261          box = make_pane(top, STR_MEMORY_MISC_PANE_TITLE);
1262 +        table = make_table(box, 2, 5);
1263  
1264 <        hbox = gtk_hbox_new(FALSE, 4);
1265 <        gtk_widget_show(hbox);
1266 <
1267 <        label = gtk_label_new(GetString(STR_RAMSIZE_SLIDER));
1268 <        gtk_widget_show(label);
1269 <        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1270 <
1271 <        vbox = gtk_vbox_new(FALSE, 4);
1272 <        gtk_widget_show(vbox);
1273 <
1274 <        gfloat min, max;
1275 <        min = 4;
1276 <        max = 512;
1277 <        w_ramsize_adj = gtk_adjustment_new(min, min, max, 1, 16, 0);
1133 <        gtk_adjustment_set_value(GTK_ADJUSTMENT(w_ramsize_adj), PrefsFindInt32("ramsize") >> 20);
1134 <
1135 <        scale = gtk_hscale_new(GTK_ADJUSTMENT(w_ramsize_adj));
1136 <        gtk_widget_show(scale);
1137 <        gtk_scale_set_digits(GTK_SCALE(scale), 0);
1138 <        gtk_box_pack_start(GTK_BOX(vbox), scale, TRUE, TRUE, 0);
1139 <
1140 <        hbox2 = gtk_hbox_new(FALSE, 4);
1141 <        gtk_widget_show(hbox2);
1142 <
1143 <        char val[32];
1144 <        sprintf(val, GetString(STR_RAMSIZE_FMT), int(min));
1145 <        label = gtk_label_new(val);
1146 <        gtk_widget_show(label);
1147 <        gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
1148 <
1149 <        sprintf(val, GetString(STR_RAMSIZE_FMT), int(max));
1150 <        label = gtk_label_new(val);
1151 <        gtk_widget_show(label);
1152 <        gtk_box_pack_end(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
1153 <        gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 0);
1154 <        gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
1155 <        gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
1264 >        static const combo_desc options[] = {
1265 >                STR_RAMSIZE_4MB_LAB,
1266 >                STR_RAMSIZE_8MB_LAB,
1267 >                STR_RAMSIZE_16MB_LAB,
1268 >                STR_RAMSIZE_32MB_LAB,
1269 >                STR_RAMSIZE_64MB_LAB,
1270 >                STR_RAMSIZE_128MB_LAB,
1271 >                STR_RAMSIZE_256MB_LAB,
1272 >                STR_RAMSIZE_512MB_LAB,
1273 >                0
1274 >        };
1275 >        char default_ramsize[10];
1276 >        sprintf(default_ramsize, "%d", PrefsFindInt32("ramsize") >> 20);
1277 >        w_ramsize = table_make_combobox(table, 0, STR_RAMSIZE_CTRL, default_ramsize, options);
1278  
1279 <        w_rom_file = make_entry(box, STR_ROM_FILE_CTRL, "rom");
1279 >        w_rom_file = table_make_file_entry(table, 1, STR_ROM_FILE_CTRL, "rom");
1280  
1281          make_checkbox(box, STR_IGNORESEGV_CTRL, "ignoresegv", GTK_SIGNAL_FUNC(tb_ignoresegv));
1282          make_checkbox(box, STR_IDLEWAIT_CTRL, "idlewait", GTK_SIGNAL_FUNC(tb_idlewait));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines