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 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  
... ...