Commit 64d8d7a88bdf688f8ce4d92621dde0043a4fa851
1 parent
b3b7c970
Exists in
master
and in
1 other branch
Working on new FT components.
Showing
6 changed files
with
76 additions
and
37 deletions
Show diff stats
src/include/v3270/filetransfer.h
| @@ -112,10 +112,12 @@ | @@ -112,10 +112,12 @@ | ||
| 112 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); | 112 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); |
| 113 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); | 113 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); |
| 114 | LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_activity_get_options(GObject *object); | 114 | LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_activity_get_options(GObject *object); |
| 115 | + LIB3270_EXPORT guint v3270_ft_activity_get_value(GObject * object, LIB3270_FT_VALUE id); | ||
| 115 | 116 | ||
| 116 | LIB3270_EXPORT void v3270_ft_activity_set_local_filename(GObject *object, const gchar *filename); | 117 | LIB3270_EXPORT void v3270_ft_activity_set_local_filename(GObject *object, const gchar *filename); |
| 117 | LIB3270_EXPORT void v3270_ft_activity_set_remote_filename(GObject *object, const gchar *filename); | 118 | LIB3270_EXPORT void v3270_ft_activity_set_remote_filename(GObject *object, const gchar *filename); |
| 118 | LIB3270_EXPORT void v3270_ft_activity_set_options(GObject * object, LIB3270_FT_OPTION options); | 119 | LIB3270_EXPORT void v3270_ft_activity_set_options(GObject * object, LIB3270_FT_OPTION options); |
| 120 | + LIB3270_EXPORT void v3270_ft_activity_set_value(GObject * object, LIB3270_FT_VALUE id, guint value); | ||
| 119 | 121 | ||
| 120 | // FT Dialog widget | 122 | // FT Dialog widget |
| 121 | #define GTK_TYPE_V3270_FT_DIALOG (V3270FTDialog_get_type ()) | 123 | #define GTK_TYPE_V3270_FT_DIALOG (V3270FTDialog_get_type ()) |
src/testprogram/testprogram.c
| @@ -189,7 +189,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | @@ -189,7 +189,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | ||
| 189 | size_t f; | 189 | size_t f; |
| 190 | 190 | ||
| 191 | v3270_set_url(terminal,NULL); | 191 | v3270_set_url(terminal,NULL); |
| 192 | - v3270_set_toggle(terminal,LIB3270_TOGGLE_RECONNECT,TRUE); | 192 | + // v3270_set_toggle(terminal,LIB3270_TOGGLE_RECONNECT,TRUE); |
| 193 | 193 | ||
| 194 | // v3270_set_font_family(terminal,"Droid Sans Mono"); | 194 | // v3270_set_font_family(terminal,"Droid Sans Mono"); |
| 195 | g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); | 195 | g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); |
src/v3270ft/activity.c
| @@ -42,8 +42,13 @@ | @@ -42,8 +42,13 @@ | ||
| 42 | { | 42 | { |
| 43 | GObject parent; | 43 | GObject parent; |
| 44 | 44 | ||
| 45 | - LIB3270_FT_OPTION options; | 45 | + /// @brief Transfer options. |
| 46 | + LIB3270_FT_OPTION options; | ||
| 46 | 47 | ||
| 48 | + /// @brief Values. | ||
| 49 | + guint values[LIB3270_FT_VALUE_COUNT]; | ||
| 50 | + | ||
| 51 | + /// @brief File names | ||
| 47 | struct { | 52 | struct { |
| 48 | gchar * local; | 53 | gchar * local; |
| 49 | gchar * remote; | 54 | gchar * remote; |
| @@ -127,6 +132,11 @@ | @@ -127,6 +132,11 @@ | ||
| 127 | 132 | ||
| 128 | static void V3270FTActivity_init(V3270FTActivity *widget) | 133 | static void V3270FTActivity_init(V3270FTActivity *widget) |
| 129 | { | 134 | { |
| 135 | + widget->values[LIB3270_FT_VALUE_LRECL] = 0; | ||
| 136 | + widget->values[LIB3270_FT_VALUE_BLKSIZE] = 0; | ||
| 137 | + widget->values[LIB3270_FT_VALUE_PRIMSPACE] = 0; | ||
| 138 | + widget->values[LIB3270_FT_VALUE_SECSPACE] = 0; | ||
| 139 | + widget->values[LIB3270_FT_VALUE_DFT] = 4096; | ||
| 130 | } | 140 | } |
| 131 | 141 | ||
| 132 | LIB3270_EXPORT GObject * v3270_ft_activity_new() | 142 | LIB3270_EXPORT GObject * v3270_ft_activity_new() |
| @@ -222,3 +232,14 @@ | @@ -222,3 +232,14 @@ | ||
| 222 | gtk_list_store_append((GtkListStore *) model,&iter); | 232 | gtk_list_store_append((GtkListStore *) model,&iter); |
| 223 | gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); | 233 | gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); |
| 224 | } | 234 | } |
| 235 | + | ||
| 236 | +guint v3270_ft_activity_get_value(GObject * object, LIB3270_FT_VALUE id) | ||
| 237 | +{ | ||
| 238 | + return G_V3270_FT_ACTIVITY(object)->values[id]; | ||
| 239 | +} | ||
| 240 | + | ||
| 241 | +void v3270_ft_activity_set_value(GObject * object, LIB3270_FT_VALUE id, guint value) | ||
| 242 | +{ | ||
| 243 | + G_V3270_FT_ACTIVITY(object)->values[id] = value; | ||
| 244 | +} | ||
| 245 | + |
src/v3270ft/dialog.c
| @@ -120,6 +120,7 @@ static void V3270FTDialog_init(V3270FTDialog *widget) | @@ -120,6 +120,7 @@ static void V3270FTDialog_init(V3270FTDialog *widget) | ||
| 120 | 120 | ||
| 121 | v3270_ft_activity_set_local_filename(activity,"local---"); | 121 | v3270_ft_activity_set_local_filename(activity,"local---"); |
| 122 | v3270_ft_activity_set_remote_filename(activity,"remote---"); | 122 | v3270_ft_activity_set_remote_filename(activity,"remote---"); |
| 123 | + v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP|LIB3270_FT_OPTION_APPEND|LIB3270_FT_RECORD_FORMAT_VARIABLE); | ||
| 123 | 124 | ||
| 124 | v3270_activity_list_append(files,activity); | 125 | v3270_activity_list_append(files,activity); |
| 125 | v3270_ft_settings_set_activity(widget->settings,activity); | 126 | v3270_ft_settings_set_activity(widget->settings,activity); |
src/v3270ft/private.h
| @@ -85,6 +85,8 @@ | @@ -85,6 +85,8 @@ | ||
| 85 | const gchar * label; | 85 | const gchar * label; |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | + #define LIB3270_FT_TYPE_OPTIONS (LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP) | ||
| 89 | + | ||
| 88 | struct v3270ft_value { | 90 | struct v3270ft_value { |
| 89 | 91 | ||
| 90 | const gchar * name; | 92 | const gchar * name; |
src/v3270ft/settings.c
| @@ -49,11 +49,12 @@ | @@ -49,11 +49,12 @@ | ||
| 49 | GtkEntry * remote; | 49 | GtkEntry * remote; |
| 50 | } file; | 50 | } file; |
| 51 | 51 | ||
| 52 | - GtkWidget * recordFormatBox; | ||
| 53 | - GtkWidget * spaceAllocationBox; | 52 | + GtkComboBox * type; |
| 53 | + GtkWidget * recordFormatBox; | ||
| 54 | + GtkWidget * spaceAllocationBox; | ||
| 54 | 55 | ||
| 55 | - GtkWidget * options[NUM_OPTIONS_WIDGETS]; | ||
| 56 | - GtkWidget * spins[LIB3270_FT_VALUE_COUNT]; | 56 | + GtkWidget * options[NUM_OPTIONS_WIDGETS]; |
| 57 | + GtkWidget * spins[LIB3270_FT_VALUE_COUNT]; | ||
| 57 | }; | 58 | }; |
| 58 | 59 | ||
| 59 | G_DEFINE_TYPE(V3270FTSettings, V3270FTSettings, GTK_TYPE_GRID); | 60 | G_DEFINE_TYPE(V3270FTSettings, V3270FTSettings, GTK_TYPE_GRID); |
| @@ -83,34 +84,25 @@ | @@ -83,34 +84,25 @@ | ||
| 83 | return entry; | 84 | return entry; |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | - /* | ||
| 87 | - static GtkWidget * create_frame(GtkWidget *container, const gchar *title, GtkWidget *box, GtkAlign align) | 87 | + static GtkWidget * create_grid(GtkWidget *container, GtkAlign align) |
| 88 | { | 88 | { |
| 89 | - gtk_box_pack_start(GTK_BOX(container),v3270_dialog_create_frame(title,box,align),TRUE,TRUE,0); | ||
| 90 | - | ||
| 91 | - GtkFrame * frame = GTK_FRAME(gtk_frame_new("")); | ||
| 92 | - g_autofree gchar * markup = g_strdup_printf("<b>%s</b>",title); | ||
| 93 | - GtkWidget * label = gtk_label_new(NULL); | ||
| 94 | - | ||
| 95 | - gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_NONE); | ||
| 96 | - gtk_label_set_markup(GTK_LABEL(label),markup); | ||
| 97 | - gtk_frame_set_label_widget(GTK_FRAME(frame),label); | ||
| 98 | - | ||
| 99 | - gtk_container_add(GTK_CONTAINER(frame),GTK_WIDGET(box)); | ||
| 100 | - gtk_widget_set_halign(GTK_WIDGET(frame),align); | 89 | + return v3270_box_pack_start(container,v3270_dialog_create_grid(align),TRUE,TRUE,0); |
| 90 | + } | ||
| 101 | 91 | ||
| 102 | - g_object_set(G_OBJECT(frame),"margin-top",6,NULL); | 92 | +static gboolean spin_format(GtkSpinButton *spin, G_GNUC_UNUSED gpointer data) { |
| 103 | 93 | ||
| 104 | - gtk_box_pack_start(GTK_BOX(container),GTK_WIDGET(frame),TRUE,TRUE,0); | 94 | + GtkAdjustment * adjustment = gtk_spin_button_get_adjustment (spin); |
| 95 | + guint value = (guint) gtk_adjustment_get_value(adjustment); | ||
| 105 | 96 | ||
| 106 | - return box; | ||
| 107 | - } | ||
| 108 | - */ | 97 | + if(value < 1) { |
| 98 | + gtk_entry_set_text(GTK_ENTRY(spin), ""); | ||
| 99 | + } else { | ||
| 100 | + g_autofree gchar * text = g_strdup_printf ("%d", value); | ||
| 101 | + gtk_entry_set_text(GTK_ENTRY(spin), text); | ||
| 102 | + } | ||
| 109 | 103 | ||
| 110 | - static GtkWidget * create_grid(GtkWidget *container, GtkAlign align) | ||
| 111 | - { | ||
| 112 | - return v3270_box_pack_start(container,v3270_dialog_create_grid(align),TRUE,TRUE,0); | ||
| 113 | - } | 104 | + return TRUE; |
| 105 | +} | ||
| 114 | 106 | ||
| 115 | GtkWidget * create_spin_button(V3270FTSettings *widget, GtkWidget *grid, size_t row, LIB3270_FT_VALUE id) | 107 | GtkWidget * create_spin_button(V3270FTSettings *widget, GtkWidget *grid, size_t row, LIB3270_FT_VALUE id) |
| 116 | { | 108 | { |
| @@ -121,7 +113,7 @@ | @@ -121,7 +113,7 @@ | ||
| 121 | 113 | ||
| 122 | GtkWidget * button = gtk_spin_button_new_with_range(ft_value[id].minval,ft_value[id].maxval,1); | 114 | GtkWidget * button = gtk_spin_button_new_with_range(ft_value[id].minval,ft_value[id].maxval,1); |
| 123 | // g_signal_connect(G_OBJECT(button),"value-changed",G_CALLBACK(spin_changed),dialog); | 115 | // g_signal_connect(G_OBJECT(button),"value-changed",G_CALLBACK(spin_changed),dialog); |
| 124 | - // g_signal_connect(G_OBJECT(button),"output",G_CALLBACK(spin_format),dialog); | 116 | + g_signal_connect(G_OBJECT(button),"output",G_CALLBACK(spin_format),widget); |
| 125 | 117 | ||
| 126 | gtk_widget_set_tooltip_markup(button,gettext(ft_value[id].tooltip)); | 118 | gtk_widget_set_tooltip_markup(button,gettext(ft_value[id].tooltip)); |
| 127 | gtk_widget_set_tooltip_markup(label,gettext(ft_value[id].tooltip)); | 119 | gtk_widget_set_tooltip_markup(label,gettext(ft_value[id].tooltip)); |
| @@ -169,7 +161,7 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | @@ -169,7 +161,7 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | ||
| 169 | 161 | ||
| 170 | for(ix = 0; ix < 4; ix++) { | 162 | for(ix = 0; ix < 4; ix++) { |
| 171 | gtk_widget_set_sensitive(widget->spins[ix],FALSE); | 163 | gtk_widget_set_sensitive(widget->spins[ix],FALSE); |
| 172 | - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget->spins[ix]),0); | 164 | + gtk_entry_set_text(GTK_ENTRY(widget->spins[ix]), ""); |
| 173 | } | 165 | } |
| 174 | 166 | ||
| 175 | } | 167 | } |
| @@ -183,7 +175,6 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | @@ -183,7 +175,6 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | ||
| 183 | 175 | ||
| 184 | for(ix = 0; ix < 4; ix++) { | 176 | for(ix = 0; ix < 4; ix++) { |
| 185 | gtk_widget_set_sensitive(widget->spins[ix],TRUE); | 177 | gtk_widget_set_sensitive(widget->spins[ix],TRUE); |
| 186 | - gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget->spins[ix]),0); | ||
| 187 | } | 178 | } |
| 188 | 179 | ||
| 189 | } | 180 | } |
| @@ -229,13 +220,14 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | @@ -229,13 +220,14 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | ||
| 229 | // Operation type | 220 | // Operation type |
| 230 | { | 221 | { |
| 231 | GtkTreeModel * model = GTK_TREE_MODEL(gtk_list_store_new(1,G_TYPE_STRING)); | 222 | GtkTreeModel * model = GTK_TREE_MODEL(gtk_list_store_new(1,G_TYPE_STRING)); |
| 232 | - GtkWidget * entry = create_entry(widget,"_Operation",gtk_combo_box_new_with_model(model),0,0,9); | ||
| 233 | GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); | 223 | GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); |
| 234 | 224 | ||
| 235 | - g_signal_connect(G_OBJECT(entry),"changed",G_CALLBACK(transfer_type_changed),widget); | 225 | + widget->type = GTK_COMBO_BOX(create_entry(widget,"_Operation",gtk_combo_box_new_with_model(model),0,0,9)); |
| 226 | + | ||
| 227 | + g_signal_connect(G_OBJECT(widget->type),"changed",G_CALLBACK(transfer_type_changed),widget); | ||
| 236 | 228 | ||
| 237 | - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(entry), renderer, TRUE); | ||
| 238 | - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(entry), renderer, "text", 0, NULL); | 229 | + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->type), renderer, TRUE); |
| 230 | + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->type), renderer, "text", 0, NULL); | ||
| 239 | 231 | ||
| 240 | for(ix=0;ix < NUM_TYPES;ix++) | 232 | for(ix=0;ix < NUM_TYPES;ix++) |
| 241 | { | 233 | { |
| @@ -389,15 +381,36 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | @@ -389,15 +381,36 @@ static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconP | ||
| 389 | 381 | ||
| 390 | LIB3270_EXPORT void v3270_ft_settings_set_activity(GtkWidget *widget, GObject *activity) | 382 | LIB3270_EXPORT void v3270_ft_settings_set_activity(GtkWidget *widget, GObject *activity) |
| 391 | { | 383 | { |
| 384 | + int ix; | ||
| 392 | V3270FTSettings * settings = GTK_V3270_FT_SETTINGS(widget); | 385 | V3270FTSettings * settings = GTK_V3270_FT_SETTINGS(widget); |
| 393 | 386 | ||
| 394 | gtk_entry_set_text(settings->file.local,v3270_ft_activity_get_local_filename(activity)); | 387 | gtk_entry_set_text(settings->file.local,v3270_ft_activity_get_local_filename(activity)); |
| 395 | gtk_entry_set_text(settings->file.remote,v3270_ft_activity_get_remote_filename(activity)); | 388 | gtk_entry_set_text(settings->file.remote,v3270_ft_activity_get_remote_filename(activity)); |
| 396 | 389 | ||
| 390 | + v3270_ft_settings_set_options(widget,v3270_ft_activity_get_options(activity)); | ||
| 391 | + | ||
| 392 | + for(ix = 0; ix < LIB3270_FT_VALUE_COUNT; ix++) | ||
| 393 | + { | ||
| 394 | + gtk_spin_button_set_value(GTK_SPIN_BUTTON(settings->spins[ix]), v3270_ft_activity_get_value(activity,(LIB3270_FT_VALUE) ix)); | ||
| 395 | + } | ||
| 396 | + | ||
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | LIB3270_EXPORT void v3270_ft_settings_set_options(GtkWidget *widget, LIB3270_FT_OPTION options) | 399 | LIB3270_EXPORT void v3270_ft_settings_set_options(GtkWidget *widget, LIB3270_FT_OPTION options) |
| 400 | { | 400 | { |
| 401 | - V3270FTSettings * settings = GTK_V3270_FT_SETTINGS(widget); | 401 | + int ix; |
| 402 | + | ||
| 403 | + for(ix=0;ix < NUM_TYPES;ix++) | ||
| 404 | + { | ||
| 405 | + if(ft_type[ix].opt == (options & LIB3270_FT_TYPE_OPTIONS)) | ||
| 406 | + { | ||
| 407 | + debug("Selecting option %s",ft_type[ix].label); | ||
| 408 | + gtk_combo_box_set_active(GTK_COMBO_BOX(GTK_V3270_FT_SETTINGS(widget)->type),ix); | ||
| 409 | + break; | ||
| 410 | + } | ||
| 411 | + } | ||
| 412 | + | ||
| 413 | + set_options(GTK_V3270_FT_SETTINGS(widget),options); | ||
| 414 | + | ||
| 402 | 415 | ||
| 403 | } | 416 | } |