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 | 112 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); |
113 | 113 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); |
114 | 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 | 117 | LIB3270_EXPORT void v3270_ft_activity_set_local_filename(GObject *object, const gchar *filename); |
117 | 118 | LIB3270_EXPORT void v3270_ft_activity_set_remote_filename(GObject *object, const gchar *filename); |
118 | 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 | 122 | // FT Dialog widget |
121 | 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 | 189 | size_t f; |
190 | 190 | |
191 | 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 | 194 | // v3270_set_font_family(terminal,"Droid Sans Mono"); |
195 | 195 | g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); | ... | ... |
src/v3270ft/activity.c
... | ... | @@ -42,8 +42,13 @@ |
42 | 42 | { |
43 | 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 | 52 | struct { |
48 | 53 | gchar * local; |
49 | 54 | gchar * remote; |
... | ... | @@ -127,6 +132,11 @@ |
127 | 132 | |
128 | 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 | 142 | LIB3270_EXPORT GObject * v3270_ft_activity_new() |
... | ... | @@ -222,3 +232,14 @@ |
222 | 232 | gtk_list_store_append((GtkListStore *) model,&iter); |
223 | 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 | 120 | |
121 | 121 | v3270_ft_activity_set_local_filename(activity,"local---"); |
122 | 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 | 125 | v3270_activity_list_append(files,activity); |
125 | 126 | v3270_ft_settings_set_activity(widget->settings,activity); | ... | ... |
src/v3270ft/private.h
... | ... | @@ -85,6 +85,8 @@ |
85 | 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 | 90 | struct v3270ft_value { |
89 | 91 | |
90 | 92 | const gchar * name; | ... | ... |
src/v3270ft/settings.c
... | ... | @@ -49,11 +49,12 @@ |
49 | 49 | GtkEntry * remote; |
50 | 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 | 60 | G_DEFINE_TYPE(V3270FTSettings, V3270FTSettings, GTK_TYPE_GRID); |
... | ... | @@ -83,34 +84,25 @@ |
83 | 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 | 107 | GtkWidget * create_spin_button(V3270FTSettings *widget, GtkWidget *grid, size_t row, LIB3270_FT_VALUE id) |
116 | 108 | { |
... | ... | @@ -121,7 +113,7 @@ |
121 | 113 | |
122 | 114 | GtkWidget * button = gtk_spin_button_new_with_range(ft_value[id].minval,ft_value[id].maxval,1); |
123 | 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 | 118 | gtk_widget_set_tooltip_markup(button,gettext(ft_value[id].tooltip)); |
127 | 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 | 161 | |
170 | 162 | for(ix = 0; ix < 4; ix++) { |
171 | 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 | 175 | |
184 | 176 | for(ix = 0; ix < 4; ix++) { |
185 | 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 | 220 | // Operation type |
230 | 221 | { |
231 | 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 | 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 | 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 | 381 | |
390 | 382 | LIB3270_EXPORT void v3270_ft_settings_set_activity(GtkWidget *widget, GObject *activity) |
391 | 383 | { |
384 | + int ix; | |
392 | 385 | V3270FTSettings * settings = GTK_V3270_FT_SETTINGS(widget); |
393 | 386 | |
394 | 387 | gtk_entry_set_text(settings->file.local,v3270_ft_activity_get_local_filename(activity)); |
395 | 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 | 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 | } | ... | ... |