Commit b349e0c4ee3b86ceac899a0c0734bd30d2a15de3
1 parent
68f3236d
Exists in
master
and in
1 other branch
Reimplementing load of queue from xml file.
Showing
5 changed files
with
168 additions
and
32 deletions
Show diff stats
src/include/v3270/filetransfer.h
@@ -116,6 +116,8 @@ | @@ -116,6 +116,8 @@ | ||
116 | 116 | ||
117 | LIB3270_EXPORT GObject * v3270_ft_activity_new(); | 117 | LIB3270_EXPORT GObject * v3270_ft_activity_new(); |
118 | 118 | ||
119 | + LIB3270_EXPORT void v3270_ft_activity_set_from_context(GObject * activity, GMarkupParseContext * context); | ||
120 | + | ||
119 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); | 121 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); |
120 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); | 122 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); |
121 | LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_activity_get_options(GObject *object); | 123 | LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_activity_get_options(GObject *object); |
src/v3270ft/activity.c
@@ -192,3 +192,78 @@ | @@ -192,3 +192,78 @@ | ||
192 | G_V3270_FT_ACTIVITY(object)->values[id] = value; | 192 | G_V3270_FT_ACTIVITY(object)->values[id] = value; |
193 | } | 193 | } |
194 | 194 | ||
195 | + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, V3270FTActivity *activity, GError **error) | ||
196 | + { | ||
197 | + if(!g_ascii_strcasecmp(element_name,"file")) | ||
198 | + { | ||
199 | + const gchar *type; | ||
200 | + const gchar *path; | ||
201 | + | ||
202 | + if(!g_markup_collect_attributes( | ||
203 | + element_name,names,values,error, | ||
204 | + G_MARKUP_COLLECT_STRING, "type", &type, | ||
205 | + G_MARKUP_COLLECT_STRING, "path", &path, | ||
206 | + G_MARKUP_COLLECT_INVALID | ||
207 | + )) { | ||
208 | + | ||
209 | + return; | ||
210 | + | ||
211 | + } | ||
212 | + | ||
213 | + if(g_ascii_strcasecmp(type,"local") == 0) | ||
214 | + v3270_ft_activity_set_local_filename(G_OBJECT(activity),path); | ||
215 | + else if(g_ascii_strcasecmp(type,"remote") == 0) | ||
216 | + v3270_ft_activity_set_remote_filename(G_OBJECT(activity),path); | ||
217 | + | ||
218 | + } | ||
219 | + else if(!g_ascii_strcasecmp(element_name,"option")) | ||
220 | + { | ||
221 | + const gchar *name; | ||
222 | + const gchar *value; | ||
223 | + | ||
224 | + if(!g_markup_collect_attributes( | ||
225 | + element_name,names,values,error, | ||
226 | + G_MARKUP_COLLECT_STRING, "name", &name, | ||
227 | + G_MARKUP_COLLECT_STRING, "value", &value, | ||
228 | + G_MARKUP_COLLECT_INVALID | ||
229 | + )) { | ||
230 | + | ||
231 | + return; | ||
232 | + | ||
233 | + } | ||
234 | + | ||
235 | + | ||
236 | + } | ||
237 | + else if(!g_ascii_strcasecmp(element_name,"parameter")) | ||
238 | + { | ||
239 | + const gchar *name; | ||
240 | + const gchar *value; | ||
241 | + | ||
242 | + if(!g_markup_collect_attributes( | ||
243 | + element_name,names,values,error, | ||
244 | + G_MARKUP_COLLECT_STRING, "name", &name, | ||
245 | + G_MARKUP_COLLECT_STRING, "value", &value, | ||
246 | + G_MARKUP_COLLECT_INVALID | ||
247 | + )) { | ||
248 | + | ||
249 | + return; | ||
250 | + | ||
251 | + } | ||
252 | + | ||
253 | + } | ||
254 | + | ||
255 | + } | ||
256 | + | ||
257 | + void v3270_ft_activity_set_from_context(GObject * activity, GMarkupParseContext * context) | ||
258 | + { | ||
259 | + static const GMarkupParser parser = { | ||
260 | + (void (*)(GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **)) element_start, | ||
261 | + (void (*)(GMarkupParseContext *, const gchar *, gpointer, GError **)) NULL, | ||
262 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
263 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
264 | + (void (*)(GMarkupParseContext *, GError *, gpointer)) NULL | ||
265 | + }; | ||
266 | + | ||
267 | + g_markup_parse_context_push(context,&parser,activity); | ||
268 | + | ||
269 | + } |
src/v3270ft/activitylist.c
@@ -63,32 +63,6 @@ | @@ -63,32 +63,6 @@ | ||
63 | 63 | ||
64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
65 | 65 | ||
66 | - static const struct _option_list | ||
67 | - { | ||
68 | - LIB3270_FT_OPTION option; | ||
69 | - const gchar * name; | ||
70 | - const gchar * value; | ||
71 | - } | ||
72 | - option_list[] = | ||
73 | - { | ||
74 | - | ||
75 | - { LIB3270_FT_OPTION_SEND, "type", "send", }, | ||
76 | - { LIB3270_FT_OPTION_RECEIVE, "type", "receive", }, | ||
77 | - { LIB3270_FT_OPTION_ASCII, "format", "ascii", }, | ||
78 | - { LIB3270_FT_OPTION_CRLF, "format", "crlf", }, | ||
79 | - { LIB3270_FT_OPTION_APPEND, "format", "append", }, | ||
80 | - { LIB3270_FT_OPTION_REMAP, "format", "remap", }, | ||
81 | - { LIB3270_FT_OPTION_UNIX, "file-format", "unix", }, | ||
82 | - { LIB3270_FT_RECORD_FORMAT_DEFAULT, "record-format", "default", }, | ||
83 | - { LIB3270_FT_RECORD_FORMAT_FIXED, "record-format", "fixed", }, | ||
84 | - { LIB3270_FT_RECORD_FORMAT_VARIABLE, "record-format", "variable", }, | ||
85 | - { LIB3270_FT_RECORD_FORMAT_UNDEFINED, "record-format", "undefined", }, | ||
86 | - { LIB3270_FT_ALLOCATION_UNITS_DEFAULT, "units", "default", }, | ||
87 | - { LIB3270_FT_ALLOCATION_UNITS_TRACKS, "units", "tracks", }, | ||
88 | - { LIB3270_FT_ALLOCATION_UNITS_CYLINDERS, "units", "cylinders", }, | ||
89 | - { LIB3270_FT_ALLOCATION_UNITS_AVBLOCK, "units", "avblock", }, | ||
90 | - }; | ||
91 | - | ||
92 | static void dispose(GObject *object) | 66 | static void dispose(GObject *object) |
93 | { | 67 | { |
94 | debug("%s",__FUNCTION__); | 68 | debug("%s",__FUNCTION__); |
@@ -183,6 +157,59 @@ | @@ -183,6 +157,59 @@ | ||
183 | gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); | 157 | gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); |
184 | } | 158 | } |
185 | 159 | ||
160 | + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, V3270FTActivityList *widget, GError **error) | ||
161 | + { | ||
162 | + if(!g_ascii_strcasecmp(element_name,"entry")) | ||
163 | + { | ||
164 | + // Create new activity | ||
165 | + GObject * activity = v3270_ft_activity_new(); | ||
166 | + v3270_ft_activity_set_from_context(activity,context); | ||
167 | + v3270_activity_list_append(GTK_WIDGET(widget), activity); | ||
168 | + } | ||
169 | + | ||
170 | + } | ||
171 | + | ||
172 | + static void element_end(GMarkupParseContext *context, const gchar *element_name, G_GNUC_UNUSED void *info,G_GNUC_UNUSED GError **error) | ||
173 | + { | ||
174 | + if(!g_ascii_strcasecmp(element_name,"entry")) | ||
175 | + { | ||
176 | + g_markup_parse_context_pop(context); | ||
177 | + } | ||
178 | + } | ||
179 | + | ||
180 | + static void reload(GtkWidget *widget) | ||
181 | + { | ||
182 | + static const GMarkupParser parser = { | ||
183 | + (void (*)(GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **)) element_start, | ||
184 | + (void (*)(GMarkupParseContext *, const gchar *, gpointer, GError **)) element_end, | ||
185 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
186 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
187 | + (void (*)(GMarkupParseContext *, GError *, gpointer)) NULL | ||
188 | + }; | ||
189 | + | ||
190 | + GError * error = NULL; | ||
191 | + g_autofree gchar * text = NULL; | ||
192 | + | ||
193 | + if(g_file_get_contents(GTK_V3270_FT_ACTIVITY_LIST(widget)->filename,&text,NULL,&error)) { | ||
194 | + | ||
195 | + GMarkupParseContext * context = | ||
196 | + g_markup_parse_context_new( | ||
197 | + &parser, | ||
198 | + G_MARKUP_TREAT_CDATA_AS_TEXT|G_MARKUP_PREFIX_ERROR_POSITION, | ||
199 | + widget, | ||
200 | + NULL | ||
201 | + ); | ||
202 | + | ||
203 | + /* | ||
204 | + GMarkupParseContext * context = g_markup_parse_context_new(&parser,G_MARKUP_TREAT_CDATA_AS_TEXT|G_MARKUP_PREFIX_ERROR_POSITION,GTK_V3270FT(widget),NULL); | ||
205 | + g_markup_parse_context_parse(context,text,strlen(text),&error); | ||
206 | + g_markup_parse_context_free(context); | ||
207 | + */ | ||
208 | + | ||
209 | + } | ||
210 | + | ||
211 | + } | ||
212 | + | ||
186 | void v3270_activity_list_load(GtkWidget *widget) | 213 | void v3270_activity_list_load(GtkWidget *widget) |
187 | { | 214 | { |
188 | V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); | 215 | V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); |
@@ -200,8 +227,11 @@ | @@ -200,8 +227,11 @@ | ||
200 | list->filename = filename; | 227 | list->filename = filename; |
201 | } | 228 | } |
202 | 229 | ||
230 | + reload(widget); | ||
231 | + | ||
203 | g_signal_emit(widget, v3270_activity_list_signals[V3270_ACTIVITY_LIST_HAS_FILE_SIGNAL], 0, (list->filename == NULL ? FALSE : TRUE)); | 232 | g_signal_emit(widget, v3270_activity_list_signals[V3270_ACTIVITY_LIST_HAS_FILE_SIGNAL], 0, (list->filename == NULL ? FALSE : TRUE)); |
204 | 233 | ||
234 | + | ||
205 | } | 235 | } |
206 | 236 | ||
207 | void v3270_activity_list_save(GtkWidget *widget) | 237 | void v3270_activity_list_save(GtkWidget *widget) |
@@ -232,10 +262,10 @@ | @@ -232,10 +262,10 @@ | ||
232 | g_string_append_printf(str,"\t\t<file type=\'remote\' path=\'%s\' />\n",v3270_ft_activity_get_remote_filename(activity)); | 262 | g_string_append_printf(str,"\t\t<file type=\'remote\' path=\'%s\' />\n",v3270_ft_activity_get_remote_filename(activity)); |
233 | 263 | ||
234 | LIB3270_FT_OPTION options = v3270_ft_activity_get_options(activity); | 264 | LIB3270_FT_OPTION options = v3270_ft_activity_get_options(activity); |
235 | - for(ix = 0; ix < G_N_ELEMENTS(option_list);ix++) | 265 | + for(ix = 0; ix < v3270_activity_list_options[ix].name;ix++) |
236 | { | 266 | { |
237 | - if(options & option_list[ix].option) | ||
238 | - g_string_append_printf(str,"\t\t<option name=\'%s\' value=\'%s\' />\n",option_list[ix].name,option_list[ix].value); | 267 | + if(options & v3270_activity_list_options[ix].option) |
268 | + g_string_append_printf(str,"\t\t<option name=\'%s\' value=\'%s\' />\n",v3270_activity_list_options[ix].name,v3270_activity_list_options[ix].value); | ||
239 | } | 269 | } |
240 | 270 | ||
241 | for(ix=0;ix<LIB3270_FT_VALUE_COUNT;ix++) { | 271 | for(ix=0;ix<LIB3270_FT_VALUE_COUNT;ix++) { |
src/v3270ft/private.h
@@ -97,9 +97,17 @@ | @@ -97,9 +97,17 @@ | ||
97 | 97 | ||
98 | }; | 98 | }; |
99 | 99 | ||
100 | - extern const struct v3270ft_option ft_option[]; | ||
101 | - extern const struct v3270ft_type ft_type[]; | ||
102 | - extern const struct v3270ft_value ft_value[]; | 100 | + struct v3270_activity_list_option |
101 | + { | ||
102 | + LIB3270_FT_OPTION option; | ||
103 | + const gchar * name; | ||
104 | + const gchar * value; | ||
105 | + }; | ||
106 | + | ||
107 | + G_GNUC_INTERNAL extern const struct v3270ft_option ft_option[]; | ||
108 | + G_GNUC_INTERNAL extern const struct v3270ft_type ft_type[]; | ||
109 | + G_GNUC_INTERNAL extern const struct v3270ft_value ft_value[]; | ||
110 | + G_GNUC_INTERNAL extern const struct v3270_activity_list_option v3270_activity_list_options[]; | ||
103 | 111 | ||
104 | #define ENTRY_FILENAME_LENGTH FILENAME_MAX | 112 | #define ENTRY_FILENAME_LENGTH FILENAME_MAX |
105 | struct v3270ft_entry { | 113 | struct v3270ft_entry { |
src/v3270ft/tables.c
@@ -197,3 +197,24 @@ const struct v3270ft_value ft_value[] = { | @@ -197,3 +197,24 @@ const struct v3270ft_value ft_value[] = { | ||
197 | 197 | ||
198 | }; | 198 | }; |
199 | 199 | ||
200 | +const struct v3270_activity_list_option v3270_activity_list_options[] = | ||
201 | +{ | ||
202 | + | ||
203 | + { LIB3270_FT_OPTION_SEND, "type", "send" }, | ||
204 | + { LIB3270_FT_OPTION_RECEIVE, "type", "receive" }, | ||
205 | + { LIB3270_FT_OPTION_ASCII, "format", "ascii" }, | ||
206 | + { LIB3270_FT_OPTION_CRLF, "format", "crlf" }, | ||
207 | + { LIB3270_FT_OPTION_APPEND, "format", "append" }, | ||
208 | + { LIB3270_FT_OPTION_REMAP, "format", "remap" }, | ||
209 | + { LIB3270_FT_OPTION_UNIX, "file-format", "unix" }, | ||
210 | + { LIB3270_FT_RECORD_FORMAT_DEFAULT, "record-format", "default" }, | ||
211 | + { LIB3270_FT_RECORD_FORMAT_FIXED, "record-format", "fixed" }, | ||
212 | + { LIB3270_FT_RECORD_FORMAT_VARIABLE, "record-format", "variable" }, | ||
213 | + { LIB3270_FT_RECORD_FORMAT_UNDEFINED, "record-format", "undefined" }, | ||
214 | + { LIB3270_FT_ALLOCATION_UNITS_DEFAULT, "units", "default" }, | ||
215 | + { LIB3270_FT_ALLOCATION_UNITS_TRACKS, "units", "tracks" }, | ||
216 | + { LIB3270_FT_ALLOCATION_UNITS_CYLINDERS, "units", "cylinders" }, | ||
217 | + { LIB3270_FT_ALLOCATION_UNITS_AVBLOCK, "units", "avblock" }, | ||
218 | + { 0, NULL, NULL } | ||
219 | +}; | ||
220 | + |