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