Commit b6979d1f46619b6477e3d50b9936909ba8f0f99c

Authored by Perry Werneck
1 parent d7731cec
Exists in master and in 1 other branch develop

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