Commit 72bdaf3378d0d3a708634b05fd0c7947e8e407ac

Authored by Perry Werneck
1 parent 0326d968

Iniciando reconstrução das barras lateral e de funções posto que, aparentemente,…

… o widget usado nelas não funciona depois da última atualização do gtk.
src/pw3270/uiparser/button.c
... ... @@ -77,6 +77,7 @@
77 77  
78 78 void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad)
79 79 {
  80 + /*
80 81 const gchar * label = ui_get_attribute("label", names, values);
81 82 const gchar * icon = ui_get_attribute("icon", names, values);
82 83 const gchar * name = ui_get_attribute("action", names, values);
... ... @@ -132,5 +133,6 @@
132 133 gtk_widget_set_sensitive(widget,FALSE);
133 134 g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(button_script),info->center_widget);
134 135 }
  136 + */
135 137 }
136 138  
... ...
src/pw3270/uiparser/keypad.c
... ... @@ -31,46 +31,14 @@
31 31  
32 32 /*--[ Implement ]------------------------------------------------------------------------------------*/
33 33  
34   - void keypad_row_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad)
35   - {
36   - keypad->row = g_malloc0(sizeof(struct row));
37   -
38   - keypad->row->pos = ++keypad->num_rows;
39   - keypad->col = 0;
40   -
41   - keypad->rows = g_list_append(keypad->rows,keypad->row);
42   - }
43   -
44 34 static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct keypad *keypad, GError **error)
45 35 {
46   - static const struct _cmd
47   - {
48   - const gchar *element_name;
49   - void (*start)(GMarkupParseContext *, const gchar **,const gchar **, GError **, struct keypad *);
50   - } cmd[] =
51   - {
52   - { "row", keypad_row_start },
53   - { "button", keypad_button_start },
54   - };
55   -
56   - int f;
57   -
58   - for(f = 0; f < G_N_ELEMENTS(cmd); f++)
59   - {
60   - if(!g_ascii_strcasecmp(cmd[f].element_name,element_name))
61   - {
62   - cmd[f].start(context,names,values,error,keypad);
63   - return;
64   - }
65   - }
66   -
67   - *error = g_error_new(ERROR_DOMAIN,EINVAL, _( "Unexpected element <%s>"), element_name);
  36 + trace("%s(%s)",__FUNCTION__,element_name);
68 37 }
69 38  
70 39 static void element_end(GMarkupParseContext *context, const gchar *element_name, struct keypad *keypad, GError **error)
71 40 {
72   - keypad->widget = NULL;
73   -// trace("%s: %s",__FUNCTION__,element_name);
  41 + trace("%s(%s)",__FUNCTION__,element_name);
74 42 }
75 43  
76 44 static void toggled(GtkToggleAction *action, GtkWidget *widget)
... ... @@ -88,44 +56,37 @@
88 56  
89 57 }
90 58  
91   - UI_ATTR_DIRECTION ui_get_position_attribute(const gchar **names, const gchar **values)
  59 + GtkPositionType ui_get_position_attribute(const gchar **names, const gchar **values)
92 60 {
93   - static const gchar * posname[] = { "top", "bottom", "left", "right" };
94   - const gchar * dir = ui_get_attribute("position",names,values);
95   - int f;
  61 + static const struct _pos {
  62 + GtkPositionType type;
  63 + const gchar * name;
  64 + } pos [] = {
  65 +
  66 + { GTK_POS_LEFT, "left" },
  67 + { GTK_POS_RIGHT, "right" },
  68 + { GTK_POS_TOP, "top" },
  69 + { GTK_POS_BOTTOM, "bottom" },
  70 +
  71 + };
  72 +
  73 + const gchar * dir = ui_get_attribute("position",names,values);
  74 + int f;
96 75  
97 76 if(dir)
98 77 {
99   - for(f=0;f<G_N_ELEMENTS(posname);f++)
  78 + for(f=0;f<G_N_ELEMENTS(pos);f++)
100 79 {
101   - if(!g_ascii_strcasecmp(dir,posname[f]))
102   - return f;
  80 + if(!g_ascii_strcasecmp(dir,pos[f].name))
  81 + return pos[f].type;
103 82 }
104 83 }
105 84  
106   - return UI_ATTR_DIRECTION_NONE;
  85 + return GTK_POS_TOP;
107 86 }
108 87  
109 88 static void element_text(GMarkupParseContext *context, const gchar *text, gsize sz, struct keypad *keypad, GError **error)
110 89 {
111   - if(keypad->widget)
112   - {
113   - gchar *base = g_strstrip(g_strdup(text));
114   - gchar *text = g_strdup(base);
115   - g_free(base);
116   -
117   - if(*text)
118   - {
119   - gtk_widget_set_sensitive(keypad->widget,TRUE);
120   - g_object_set_data_full(G_OBJECT(keypad->widget),"script_text",text,g_free);
121   - }
122   - else
123   - {
124   - g_free(text);
125   - }
126   -
127   - }
128   -
129 90 }
130 91  
131 92 GObject * ui_create_keypad(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
... ... @@ -162,100 +123,33 @@
162 123 info->block_data = keypad = g_malloc0(sizeof(struct keypad));
163 124  
164 125 keypad->parser = info;
165   - keypad->handle = gtk_handle_box_new();
166 126 keypad->pos = ui_get_position_attribute(names,values);
167 127 keypad->relief = ui_get_relief(names, values, GTK_RELIEF_NORMAL);
  128 + keypad->grid = GTK_GRID(gtk_grid_new());
168 129  
169   - switch(keypad->pos)
170   - {
171   - case UI_ATTR_UP:
172   -#if GTK_CHECK_VERSION(3,0,0)
173   - keypad->box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
174   -#else
175   - keypad->box = gtk_vbox_new(FALSE,0);
176   -#endif // GTK(3,0,0)
177   - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_BOTTOM);
178   - break;
179   -
180   - case UI_ATTR_DOWN:
181   -#if GTK_CHECK_VERSION(3,0,0)
182   - keypad->box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
183   -#else
184   - keypad->box = gtk_vbox_new(FALSE,0);
185   -#endif // GTK(3,0,0)
186   - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_TOP);
187   - break;
188   -
189   - case UI_ATTR_LEFT:
190   -#if GTK_CHECK_VERSION(3,0,0)
191   - keypad->box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
192   -#else
193   - keypad->box = gtk_hbox_new(FALSE,0);
194   -#endif // GTK(3,0,0)
195   - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_RIGHT);
196   - break;
197   -
198   - default:
199   -#if GTK_CHECK_VERSION(3,0,0)
200   - keypad->box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
201   -#else
202   - keypad->box = gtk_hbox_new(FALSE,0);
203   -#endif // GTK(3,0,0)
204   - keypad->pos = UI_ATTR_RIGHT;
205   - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(keypad->handle),GTK_POS_LEFT);
206   -
207   - }
  130 + g_object_set_data(G_OBJECT(keypad->grid),"position",(gpointer) keypad->pos);
208 131  
209 132 label = ui_get_attribute("label",names,values);
210 133 if(label)
211 134 {
212 135 // Keypad has label, create and setup an action
213 136 const gchar *name = ui_get_attribute("name",names,values);
  137 +
  138 + trace("%s name=%s",__FUNCTION__,name);
  139 +
214 140 if(name)
215 141 {
216 142 GtkToggleAction *action = gtk_toggle_action_new(name,gettext(label),NULL,NULL);
217 143 ui_action_set_options(GTK_ACTION(action),info,names,values,error);
218   - g_object_set_data_full(G_OBJECT(keypad->handle),"view_action",action,g_object_unref);
219   - g_signal_connect(action,"toggled",G_CALLBACK(toggled),keypad->handle);
  144 + g_object_set_data_full(G_OBJECT(keypad->grid),"view_action",action,g_object_unref);
  145 + g_signal_connect(action,"toggled",G_CALLBACK(toggled),keypad->grid);
  146 + gtk_widget_set_name(GTK_WIDGET(keypad->grid),name);
220 147 }
221 148 }
222 149  
223   - gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(keypad->handle),GTK_SHADOW_ETCHED_IN);
224   - gtk_container_add(GTK_CONTAINER(keypad->handle),keypad->box);
225   -
226 150 g_markup_parse_context_push(context,(GMarkupParser *) &parser,keypad);
227 151  
228   - return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_KEYPAD, names, values, G_OBJECT(keypad->handle), error));
229   - }
230   -
231   - static void create_col(GtkWidget *widget, struct keypad *keypad)
232   - {
233   - if(widget)
234   - {
235   - gtk_table_attach( GTK_TABLE(keypad->table),
236   - widget,
237   - keypad->col,keypad->col+keypad->button_width,
238   - keypad->num_rows,keypad->num_rows+1,
239   - GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,0,0 );
240   -
241   - }
242   - keypad->col += keypad->button_width;
243   -
244   - }
245   -
246   - static void create_row(struct row *info, struct keypad *keypad)
247   - {
248   - if(info->cols)
249   - {
250   - keypad->col = 0;
251   - keypad->button_width = keypad->num_cols / info->num_cols;
252   -
253   -// trace("Max cols=%d row cols=%d width=%d",keypad->num_cols,info->num_cols,keypad->button_width);
254   -
255   - g_list_foreach(info->cols,(GFunc) create_col,keypad);
256   - g_list_free(info->cols);
257   - }
258   - keypad->num_rows++;
  152 + return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_KEYPAD, names, values, G_OBJECT(keypad->grid), error));
259 153 }
260 154  
261 155 void ui_end_keypad(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
... ... @@ -263,33 +157,7 @@
263 157 struct keypad *keypad = (struct keypad *) info->block_data;
264 158 info->block_data = NULL;
265 159  
266   - keypad->num_cols *= 2;
267   -
268   - if(keypad->rows)
269   - {
270   - // Create Widgets & Release memory
271   - keypad->table = gtk_table_new(keypad->num_rows,keypad->num_cols,FALSE);
272   -
273   -#if GTK_CHECK_VERSION(2,18,0)
274   - gtk_widget_set_can_focus(keypad->table,FALSE);
275   - gtk_widget_set_can_default(keypad->table,FALSE);
276   -#else
277   - GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_FOCUS);
278   - GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_DEFAULT);
279   -#endif // GTK(2,18)
280   -
281   - keypad->num_rows = 0;
282   - g_list_foreach(keypad->rows,(GFunc) create_row,keypad);
283   -#if GTK_CHECK_VERSION(2,28,0)
284   - g_list_free_full(keypad->rows,g_free);
285   -#else
286   - g_list_foreach(keypad->rows,(GFunc) g_free,NULL);
287   - g_list_free(keypad->rows);
288   -#endif // GTK(2,28)
289   - gtk_box_pack_start(GTK_BOX(keypad->box),keypad->table,FALSE,FALSE,0);
290   -
291   - gtk_widget_show_all(keypad->box);
292   - }
  160 + gtk_widget_show_all(GTK_WIDGET(keypad->grid));
293 161  
294 162 g_free(keypad);
295 163 g_markup_parse_context_pop(context);
... ...
src/pw3270/uiparser/keypad.h
... ... @@ -33,6 +33,16 @@
33 33  
34 34 /*--[ Globals ]--------------------------------------------------------------------------------------*/
35 35  
  36 + struct keypad {
  37 + struct parser * parser;
  38 + unsigned short row;
  39 + unsigned short col;
  40 + GtkGrid * grid;
  41 + GtkReliefStyle relief;
  42 + UI_ATTR_DIRECTION pos;
  43 + };
  44 +
  45 +/*
36 46 struct row
37 47 {
38 48 unsigned short pos;
... ... @@ -58,5 +68,6 @@
58 68 GtkWidget * widget;
59 69  
60 70 };
  71 +*/
61 72  
62 73 G_GNUC_INTERNAL void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad);
... ...
src/pw3270/uiparser/parser.c
... ... @@ -73,6 +73,7 @@ static void pack_start(gpointer key, GtkWidget *widget, struct parser *p)
73 73 gtk_box_pack_start(GTK_BOX(p->element),widget,FALSE,FALSE,0);
74 74 }
75 75  
  76 +
76 77 struct keypad
77 78 {
78 79 GtkWidget * box;
... ... @@ -82,10 +83,13 @@ struct keypad
82 83  
83 84 static void pack_keypad(gpointer key, GtkWidget *widget, struct keypad *k)
84 85 {
85   - if(gtk_handle_box_get_handle_position(GTK_HANDLE_BOX(widget)) != k->filter)
  86 + if((GtkPositionType) g_object_get_data(G_OBJECT(widget),"position") != k->filter) {
86 87 return;
  88 + }
87 89  
  90 + trace("%s %s",__FUNCTION__,gtk_widget_get_name(widget));
88 91 k->pack(GTK_BOX(k->box),widget,FALSE,FALSE,0);
  92 +
89 93 }
90 94  
91 95 static void pack_view(gpointer key, GtkWidget *widget, GtkWidget *parent)
... ... @@ -231,15 +235,17 @@ void parser_build(struct parser *p, GtkWidget *widget)
231 235 ui_setup_keypads(p->element_list[UI_ELEMENT_KEYPAD], p->toplevel, p->center_widget);
232 236  
233 237 // Pack top keypads
  238 + trace("Packing %s keypads","top");
234 239 memset(&keypad,0,sizeof(keypad));
235 240 keypad.box = vbox;
236   - keypad.filter = GTK_POS_BOTTOM;
  241 + keypad.filter = GTK_POS_TOP;
237 242 keypad.pack = gtk_box_pack_start;
238 243 g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad);
239 244  
240 245 // Pack left keypads
  246 + trace("Packing %s keypads","left");
241 247 keypad.box = hbox;
242   - keypad.filter = GTK_POS_RIGHT;
  248 + keypad.filter = GTK_POS_LEFT;
243 249 g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad);
244 250  
245 251 // Pack & configure center widget
... ... @@ -252,13 +258,15 @@ void parser_build(struct parser *p, GtkWidget *widget)
252 258 gtk_box_pack_start(GTK_BOX(hbox),vbox,TRUE,TRUE,0);
253 259  
254 260 // Pack right keypads
255   - keypad.filter = GTK_POS_LEFT;
  261 + trace("Packing %s keypads","right");
  262 + keypad.filter = GTK_POS_RIGHT;
256 263 keypad.pack = gtk_box_pack_end;
257 264 g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad);
258 265  
259 266 // Pack bottom keypads
  267 + trace("Packing %s keypads","bottom");
260 268 keypad.box = vbox;
261   - keypad.filter = GTK_POS_TOP;
  269 + keypad.filter = GTK_POS_BOTTOM;
262 270 g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad);
263 271  
264 272 // Finish building
... ...