Commit c146f368dcdb7b566bba22f7d5d82e33dad1b85d
1 parent
8ca37962
Exists in
master
and in
1 other branch
Rewriting file transfer properties widget.
Showing
5 changed files
with
115 additions
and
7 deletions
Show diff stats
src/include/v3270/filetransfer.h
... | ... | @@ -77,7 +77,7 @@ |
77 | 77 | void v3270ft_append_file(GtkWidget *widget, const gchar *filename, gboolean text); |
78 | 78 | guint v3270ft_append_selection(GtkWidget *widget, GtkSelectionData *data); |
79 | 79 | |
80 | - gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ... ) G_GNUC_NULL_TERMINATED; | |
80 | + gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ... ) G_GNUC_NULL_TERMINATED; | |
81 | 81 | |
82 | 82 | gint v3270ft_transfer(GtkWidget *dialog, H3270 *session); |
83 | 83 | ... | ... |
src/v3270ft/select.c
... | ... | @@ -73,7 +73,7 @@ static gpointer select_file(struct file *fl) { |
73 | 73 | #endif // _WIN32 |
74 | 74 | */ |
75 | 75 | |
76 | -gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, G_GNUC_UNUSED const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) { | |
76 | +gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, G_GNUC_UNUSED const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) { | |
77 | 77 | |
78 | 78 | gchar *rc = NULL; |
79 | 79 | ... | ... |
src/v3270ft/settings.c
... | ... | @@ -50,6 +50,7 @@ |
50 | 50 | } file; |
51 | 51 | |
52 | 52 | GtkWidget * options[NUM_OPTIONS_WIDGETS]; |
53 | + GtkWidget * spins[LIB3270_FT_VALUE_COUNT]; | |
53 | 54 | }; |
54 | 55 | |
55 | 56 | G_DEFINE_TYPE(V3270FTSettings, V3270FTSettings, GTK_TYPE_GRID); |
... | ... | @@ -99,6 +100,78 @@ |
99 | 100 | return box; |
100 | 101 | } |
101 | 102 | |
103 | + static GtkWidget * create_grid(GtkWidget *container, GtkAlign align) | |
104 | + { | |
105 | + GtkWidget * grid = gtk_grid_new(); | |
106 | + | |
107 | + gtk_grid_set_row_spacing(GTK_GRID(grid),6); | |
108 | + gtk_grid_set_column_spacing(GTK_GRID(grid),12); | |
109 | + | |
110 | + g_object_set(G_OBJECT(grid),"margin-top",6,NULL); | |
111 | + gtk_widget_set_halign(GTK_WIDGET(grid),align); | |
112 | + gtk_box_pack_start(GTK_BOX(container),GTK_WIDGET(grid),TRUE,TRUE,0); | |
113 | + | |
114 | + return grid; | |
115 | + } | |
116 | + | |
117 | + GtkWidget * create_spin_button(V3270FTSettings *widget, GtkWidget *grid, size_t row, LIB3270_FT_VALUE id) | |
118 | + { | |
119 | + GtkWidget * label = gtk_label_new_with_mnemonic(gettext(ft_value[id].label)); | |
120 | + gtk_widget_set_halign(label,GTK_ALIGN_END); | |
121 | + | |
122 | + gtk_grid_attach(GTK_GRID(grid),label,0,row,1,1); | |
123 | + | |
124 | + GtkWidget * button = gtk_spin_button_new_with_range(ft_value[id].minval,ft_value[id].maxval,1); | |
125 | + // g_signal_connect(G_OBJECT(button),"value-changed",G_CALLBACK(spin_changed),dialog); | |
126 | + // g_signal_connect(G_OBJECT(button),"output",G_CALLBACK(spin_format),dialog); | |
127 | + | |
128 | + gtk_widget_set_tooltip_markup(button,gettext(ft_value[id].tooltip)); | |
129 | + gtk_widget_set_tooltip_markup(label,gettext(ft_value[id].tooltip)); | |
130 | + | |
131 | + gtk_label_set_mnemonic_widget(GTK_LABEL(label),button); | |
132 | + | |
133 | + gtk_grid_attach(GTK_GRID(grid),button,1,row,1,1); | |
134 | + | |
135 | + widget->spins[id] = button; | |
136 | + | |
137 | + return button; | |
138 | + | |
139 | + } | |
140 | + | |
141 | +static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, GtkWidget *widget) | |
142 | +{ | |
143 | + gchar *filename = v3270ft_select_file( | |
144 | + gtk_widget_get_toplevel(widget), | |
145 | + _("Select local file"), | |
146 | + _("Select"), | |
147 | + GTK_FILE_CHOOSER_ACTION_OPEN, | |
148 | + gtk_entry_get_text(entry), | |
149 | + N_("All files"), "*.*", | |
150 | + N_("Text files"), "*.txt", | |
151 | + NULL ); | |
152 | + | |
153 | + if(filename) { | |
154 | + | |
155 | + gtk_entry_set_text(entry,filename); | |
156 | + | |
157 | + /* | |
158 | + const gchar *remote = gtk_entry_get_text(dialog->remote); | |
159 | + | |
160 | + gtk_entry_set_text(dialog->local,filename); | |
161 | + | |
162 | + if(!*remote) { | |
163 | + gchar * text = g_path_get_basename(filename); | |
164 | + gtk_entry_set_text(dialog->remote,text); | |
165 | + g_free(text); | |
166 | + } | |
167 | + | |
168 | + g_free(filename); | |
169 | + */ | |
170 | + | |
171 | + } | |
172 | + | |
173 | +} | |
174 | + | |
102 | 175 | static void V3270FTSettings_init(V3270FTSettings *widget) |
103 | 176 | { |
104 | 177 | size_t ix; |
... | ... | @@ -134,10 +207,11 @@ |
134 | 207 | gtk_entry_set_icon_activatable(widget->file.local,GTK_ENTRY_ICON_SECONDARY,TRUE); |
135 | 208 | gtk_entry_set_icon_tooltip_text(widget->file.local,GTK_ENTRY_ICON_SECONDARY,_("Select file")); |
136 | 209 | |
137 | - // g_signal_connect(G_OBJECT(widget->file.local),"icon-press",G_CALLBACK(open_select_file_dialog),dialog); | |
210 | + g_signal_connect(G_OBJECT(widget->file.local),"icon-press",G_CALLBACK(open_select_file_dialog),widget); | |
138 | 211 | |
139 | 212 | // Remote file name |
140 | 213 | widget->file.remote = GTK_ENTRY(create_entry(widget,"_Remote file",gtk_entry_new(),0,2,9)); |
214 | + gtk_entry_set_max_length(widget->file.remote,PATH_MAX); | |
141 | 215 | |
142 | 216 | } |
143 | 217 | |
... | ... | @@ -195,10 +269,39 @@ |
195 | 269 | } |
196 | 270 | } |
197 | 271 | |
272 | + // Values box | |
273 | + GtkWidget * values = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6); | |
274 | + gtk_box_set_homogeneous(GTK_BOX(values),TRUE); | |
275 | + g_object_set(G_OBJECT(values),"margin-top",8,NULL); | |
276 | + gtk_widget_set_hexpand(values,TRUE); | |
277 | + gtk_grid_attach(GTK_GRID(widget),values,0,8,10,2); | |
278 | + | |
198 | 279 | gtk_widget_show_all(GTK_WIDGET(widget)); |
199 | 280 | |
200 | - } | |
281 | + // Values | |
282 | + { | |
283 | + GtkWidget * box = create_grid(values,GTK_ALIGN_START); | |
284 | + | |
285 | + create_spin_button(widget, box, 0, LIB3270_FT_VALUE_LRECL); | |
286 | + create_spin_button(widget, box, 1, LIB3270_FT_VALUE_BLKSIZE); | |
287 | + | |
288 | + } | |
289 | + | |
290 | + { | |
291 | + GtkWidget * box = create_grid(values,GTK_ALIGN_CENTER); | |
292 | + | |
293 | + create_spin_button(widget, box, 0, LIB3270_FT_VALUE_PRIMSPACE); | |
294 | + create_spin_button(widget, box, 1, LIB3270_FT_VALUE_SECSPACE); | |
295 | + | |
296 | + } | |
201 | 297 | |
298 | + { | |
299 | + GtkWidget * box = create_grid(values,GTK_ALIGN_END); | |
300 | + create_spin_button(widget, box, 0, LIB3270_FT_VALUE_DFT); | |
301 | + | |
302 | + } | |
303 | + | |
304 | + } | |
202 | 305 | |
203 | 306 | LIB3270_EXPORT GtkWidget * v3270_ft_settings_new() |
204 | 307 | { | ... | ... |
src/v3270ft/tables.c
... | ... | @@ -151,6 +151,7 @@ const struct v3270ft_type ft_type[] = { |
151 | 151 | |
152 | 152 | const struct v3270ft_value ft_value[] = { |
153 | 153 | { |
154 | + // LIB3270_FT_VALUE_LRECL | |
154 | 155 | "lrecl", |
155 | 156 | 0, 32760, |
156 | 157 | N_( "Record Length:" ), |
... | ... | @@ -159,6 +160,7 @@ const struct v3270ft_value ft_value[] = { |
159 | 160 | |
160 | 161 | |
161 | 162 | { |
163 | + // LIB3270_FT_VALUE_BLKSIZE | |
162 | 164 | "primary", |
163 | 165 | 0,99999, |
164 | 166 | N_( "Primary space:" ), |
... | ... | @@ -166,6 +168,7 @@ const struct v3270ft_value ft_value[] = { |
166 | 168 | }, |
167 | 169 | |
168 | 170 | { |
171 | + // LIB3270_FT_VALUE_PRIMSPACE | |
169 | 172 | "blksize", |
170 | 173 | 0,32760, |
171 | 174 | N_( "Block size:" ), |
... | ... | @@ -177,6 +180,7 @@ const struct v3270ft_value ft_value[] = { |
177 | 180 | }, |
178 | 181 | |
179 | 182 | { |
183 | + // LIB3270_FT_VALUE_SECSPACE | |
180 | 184 | "secondary", |
181 | 185 | 0,99999, |
182 | 186 | N_( "Secondary space:" ), |
... | ... | @@ -184,6 +188,7 @@ const struct v3270ft_value ft_value[] = { |
184 | 188 | }, |
185 | 189 | |
186 | 190 | { |
191 | + // LIB3270_FT_VALUE_DFT | |
187 | 192 | "dft", |
188 | 193 | 0,99999, |
189 | 194 | N_( "DFT B_uffer size:" ), | ... | ... |
src/v3270ft/v3270ft.c
... | ... | @@ -191,7 +191,7 @@ static void remove_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { |
191 | 191 | static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { |
192 | 192 | |
193 | 193 | gchar * filename = v3270ft_select_file( |
194 | - dialog, | |
194 | + GTK_WIDGET(dialog), | |
195 | 195 | _("Load queue from file"), |
196 | 196 | _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, |
197 | 197 | "", |
... | ... | @@ -210,7 +210,7 @@ static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { |
210 | 210 | static void save_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { |
211 | 211 | |
212 | 212 | gchar * filename = v3270ft_select_file( |
213 | - dialog, | |
213 | + GTK_WIDGET(dialog), | |
214 | 214 | _("Save queue to file"), |
215 | 215 | _("Save"), |
216 | 216 | GTK_FILE_CHOOSER_ACTION_SAVE, |
... | ... | @@ -298,7 +298,7 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon |
298 | 298 | #endif // WIN32 |
299 | 299 | |
300 | 300 | gchar *filename = v3270ft_select_file( |
301 | - dialog, | |
301 | + GTK_WIDGET(dialog), | |
302 | 302 | _("Select local file"), |
303 | 303 | _("Select"), |
304 | 304 | GTK_FILE_CHOOSER_ACTION_OPEN, | ... | ... |