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,6 +44,8 @@ | ||
44 | { | 44 | { |
45 | ENTRY_HOSTNAME, | 45 | ENTRY_HOSTNAME, |
46 | ENTRY_SRVCNAME, | 46 | ENTRY_SRVCNAME, |
47 | + ENTRY_OVERSIZE, | ||
48 | + ENTRY_REMAP_FILE, | ||
47 | 49 | ||
48 | ENTRY_COUNT | 50 | ENTRY_COUNT |
49 | }; | 51 | }; |
@@ -191,7 +193,20 @@ | @@ -191,7 +193,20 @@ | ||
191 | .tooltip = N_("Makes the screen larger than the default for the chosen model number."), | 193 | .tooltip = N_("Makes the screen larger than the default for the chosen model number."), |
192 | .max_length = 7, | 194 | .max_length = 7, |
193 | .width_chars = 8, | 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 | struct _V3270HostSelectWidget | 212 | struct _V3270HostSelectWidget |
@@ -260,6 +275,56 @@ static void oversize_changed(GtkEditable *editable, GtkWidget *settings) | @@ -260,6 +275,56 @@ static void oversize_changed(GtkEditable *editable, GtkWidget *settings) | ||
260 | v3270_settings_set_valid(settings,valid); | 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 | static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) | 328 | static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
264 | { | 329 | { |
265 | // Cell renderer | 330 | // Cell renderer |
@@ -300,7 +365,18 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) | @@ -300,7 +365,18 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) | ||
300 | 365 | ||
301 | // Custom settings | 366 | // Custom settings |
302 | gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet"); | 367 | gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet"); |
368 | + | ||
303 | gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE); | 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 | // Add to containers | 381 | // Add to containers |
306 | v3270_grid_attach( | 382 | v3270_grid_attach( |
@@ -321,7 +397,12 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) | @@ -321,7 +397,12 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) | ||
321 | GTK_WIDGET(widget->input.entry[2]) | 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 |