Commit b6979d1f46619b6477e3d50b9936909ba8f0f99c
1 parent
d7731cec
Exists in
master
and in
1 other branch
Adding input for custom remap file.
Showing
1 changed file
with
82 additions
and
1 deletions
Show diff stats
src/dialogs/hostselect.c
... | ... | @@ -44,6 +44,8 @@ |
44 | 44 | { |
45 | 45 | ENTRY_HOSTNAME, |
46 | 46 | ENTRY_SRVCNAME, |
47 | + ENTRY_OVERSIZE, | |
48 | + ENTRY_REMAP_FILE, | |
47 | 49 | |
48 | 50 | ENTRY_COUNT |
49 | 51 | }; |
... | ... | @@ -191,7 +193,20 @@ |
191 | 193 | .tooltip = N_("Makes the screen larger than the default for the chosen model number."), |
192 | 194 | .max_length = 7, |
193 | 195 | .width_chars = 8, |
196 | + }, | |
197 | + | |
198 | + { | |
199 | + .top = 2, | |
200 | + .left = 0, | |
201 | + .width = 8, | |
202 | + .height = 1, | |
203 | + | |
204 | + .label = N_( "Custom Remap" ), | |
205 | + .tooltip = N_("Path to XML file with custom charset mapping."), | |
206 | + .max_length = 0xFF, | |
207 | + .width_chars = 50, | |
194 | 208 | } |
209 | + | |
195 | 210 | }; |
196 | 211 | |
197 | 212 | struct _V3270HostSelectWidget |
... | ... | @@ -260,6 +275,56 @@ static void oversize_changed(GtkEditable *editable, GtkWidget *settings) |
260 | 275 | v3270_settings_set_valid(settings,valid); |
261 | 276 | } |
262 | 277 | |
278 | +static void remap_file_changed(GtkEditable *editable, GtkWidget *settings) | |
279 | +{ | |
280 | + const gchar * filename = gtk_editable_get_chars(editable,0,-1); | |
281 | + | |
282 | + debug("%s(%s)",__FUNCTION__,filename); | |
283 | + if(*filename) | |
284 | + v3270_settings_set_valid(settings,g_file_test(filename,G_FILE_TEST_IS_REGULAR)); | |
285 | + else | |
286 | + v3270_settings_set_valid(settings,TRUE); | |
287 | + | |
288 | +} | |
289 | + | |
290 | +static void select_remap_file(GtkEditable *editable, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, G_GNUC_UNUSED GtkWidget *settings) | |
291 | +{ | |
292 | + GtkWidget * dialog = | |
293 | + gtk_file_chooser_dialog_new( | |
294 | + _( "Select custom charset mapping"), | |
295 | + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(editable))), | |
296 | + GTK_FILE_CHOOSER_ACTION_OPEN, | |
297 | + _("Cancel"), GTK_RESPONSE_CANCEL, | |
298 | + _("Select"), GTK_RESPONSE_ACCEPT, | |
299 | + NULL ); | |
300 | + | |
301 | + | |
302 | + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); | |
303 | + g_signal_connect(G_OBJECT(dialog),"close",G_CALLBACK(v3270_dialog_close),NULL); | |
304 | + | |
305 | + // Get current file name. | |
306 | + const gchar * filename = gtk_editable_get_chars(editable,0,-1); | |
307 | + | |
308 | + if(filename && *filename) | |
309 | + { | |
310 | + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),filename); | |
311 | + } | |
312 | + else | |
313 | + { | |
314 | + lib3270_autoptr(char) folder = lib3270_build_data_filename("remap",NULL); | |
315 | + | |
316 | + if(folder && *folder) | |
317 | + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), folder); | |
318 | + | |
319 | + } | |
320 | + | |
321 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) | |
322 | + gtk_entry_set_text(GTK_ENTRY(editable),gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); | |
323 | + | |
324 | + gtk_widget_destroy(dialog); | |
325 | + | |
326 | +} | |
327 | + | |
263 | 328 | static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
264 | 329 | { |
265 | 330 | // Cell renderer |
... | ... | @@ -300,7 +365,18 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
300 | 365 | |
301 | 366 | // Custom settings |
302 | 367 | gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet"); |
368 | + | |
303 | 369 | gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE); |
370 | + gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_REMAP_FILE]),TRUE); | |
371 | + | |
372 | + gtk_entry_set_icon_from_icon_name(widget->input.entry[ENTRY_REMAP_FILE],GTK_ENTRY_ICON_SECONDARY,"document-open"); | |
373 | + gtk_entry_set_icon_activatable(widget->input.entry[ENTRY_REMAP_FILE],GTK_ENTRY_ICON_SECONDARY,TRUE); | |
374 | + gtk_entry_set_icon_tooltip_text(widget->input.entry[ENTRY_REMAP_FILE],GTK_ENTRY_ICON_SECONDARY,_("Select charset remap file")); | |
375 | + | |
376 | + g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"icon-press",G_CALLBACK(select_remap_file),widget); | |
377 | + g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"changed",G_CALLBACK(remap_file_changed),widget); | |
378 | + | |
379 | + g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_OVERSIZE]),"changed",G_CALLBACK(oversize_changed),widget); | |
304 | 380 | |
305 | 381 | // Add to containers |
306 | 382 | v3270_grid_attach( |
... | ... | @@ -321,7 +397,12 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
321 | 397 | GTK_WIDGET(widget->input.entry[2]) |
322 | 398 | ); |
323 | 399 | |
324 | - g_signal_connect(G_OBJECT(widget->input.entry[2]),"changed",G_CALLBACK(oversize_changed),widget); | |
400 | + v3270_grid_attach( | |
401 | + GTK_GRID(emulation), | |
402 | + (struct v3270_entry_field *) & entryfields[3], | |
403 | + GTK_WIDGET(widget->input.entry[3]) | |
404 | + ); | |
405 | + | |
325 | 406 | |
326 | 407 | } |
327 | 408 | ... | ... |