Commit 70442604ee10994a668d69407cc66e50ad80c93e
1 parent
327d269c
Exists in
master
and in
5 other branches
Trabalhando na implementacao dos keypads
Showing
2 changed files
with
51 additions
and
11 deletions
Show diff stats
src/pw3270/uiparser/keypad.c
... | ... | @@ -45,6 +45,7 @@ |
45 | 45 | unsigned short num_rows; |
46 | 46 | unsigned short num_cols; |
47 | 47 | unsigned short col; |
48 | + unsigned short button_width; | |
48 | 49 | struct row * row; |
49 | 50 | GtkWidget * box; |
50 | 51 | GtkWidget * handle; |
... | ... | @@ -89,6 +90,20 @@ |
89 | 90 | } |
90 | 91 | |
91 | 92 | keypad->row->cols = g_list_append(keypad->row->cols,widget); |
93 | + | |
94 | + if(!widget) | |
95 | + return; | |
96 | + | |
97 | +#if GTK_CHECK_VERSION(2,18,0) | |
98 | + gtk_widget_set_can_focus(widget,FALSE); | |
99 | + gtk_widget_set_can_default(widget,FALSE); | |
100 | +#else | |
101 | + GTK_WIDGET_UNSET_FLAGS(widget,GTK_CAN_FOCUS); | |
102 | + GTK_WIDGET_UNSET_FLAGS(widget,GTK_CAN_DEFAULT); | |
103 | +#endif // GTK(2,18) | |
104 | + | |
105 | + gtk_widget_set_sensitive(widget,FALSE); | |
106 | + | |
92 | 107 | } |
93 | 108 | |
94 | 109 | static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct keypad *keypad, GError **error) |
... | ... | @@ -122,6 +137,21 @@ |
122 | 137 | // trace("%s: %s",__FUNCTION__,element_name); |
123 | 138 | } |
124 | 139 | |
140 | + static void toggled(GtkToggleAction *action, GtkWidget *widget) | |
141 | + { | |
142 | + gboolean active = gtk_toggle_action_get_active(action); | |
143 | + set_boolean_to_config("view",gtk_action_get_name(GTK_ACTION(action)),active); | |
144 | +#if GTK_CHECK_VERSION(2,18,0) | |
145 | + gtk_widget_set_visible(widget,active); | |
146 | +#else | |
147 | + if(active) | |
148 | + gtk_widget_show(widget); | |
149 | + else | |
150 | + gtk_widget_hide(widget); | |
151 | +#endif // GTK(2,18,0) | |
152 | + | |
153 | + } | |
154 | + | |
125 | 155 | GObject * ui_create_keypad(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) |
126 | 156 | { |
127 | 157 | static const GMarkupParser parser = |
... | ... | @@ -138,9 +168,6 @@ |
138 | 168 | |
139 | 169 | }; |
140 | 170 | |
141 | - const gchar *label = ui_get_attribute("label", names, values); | |
142 | - const gchar *name = ui_get_attribute("name", names, values); | |
143 | - | |
144 | 171 | struct keypad *keypad; |
145 | 172 | |
146 | 173 | if(info->element) |
... | ... | @@ -185,11 +212,19 @@ |
185 | 212 | |
186 | 213 | } |
187 | 214 | |
188 | - if(name) | |
189 | - gtk_widget_set_name(keypad->handle,name); | |
215 | + if(ui_get_attribute("label",names,values)) | |
216 | + { | |
217 | + // Keypad has label, create and setup an action | |
218 | + const gchar *name = ui_get_attribute("name",names,values); | |
219 | + if(name) | |
220 | + { | |
221 | + GtkToggleAction *action = gtk_toggle_action_new(name,NULL,NULL,NULL); | |
222 | + ui_action_set_options(GTK_ACTION(action),info,names,values,error); | |
223 | + g_object_set_data_full(G_OBJECT(keypad->handle),"view_action",action,g_object_unref); | |
224 | + g_signal_connect(action,"toggled",G_CALLBACK(toggled),keypad->handle); | |
225 | + } | |
226 | + } | |
190 | 227 | |
191 | - if(label) | |
192 | - g_object_set_data_full(G_OBJECT(keypad->handle),"keypad_label",g_strdup(label),g_free); | |
193 | 228 | |
194 | 229 | gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(keypad->handle),GTK_SHADOW_ETCHED_IN); |
195 | 230 | gtk_container_add(GTK_CONTAINER(keypad->handle),keypad->box); |
... | ... | @@ -206,12 +241,12 @@ |
206 | 241 | gtk_widget_show_all(widget); |
207 | 242 | gtk_table_attach( GTK_TABLE(keypad->table), |
208 | 243 | widget, |
209 | - keypad->num_cols,keypad->num_cols+1, | |
244 | + keypad->col,keypad->col+keypad->button_width, | |
210 | 245 | keypad->num_rows,keypad->num_rows+1, |
211 | 246 | GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,0,0 ); |
212 | 247 | |
213 | 248 | } |
214 | - keypad->num_cols++; | |
249 | + keypad->col += keypad->button_width; | |
215 | 250 | |
216 | 251 | } |
217 | 252 | |
... | ... | @@ -219,7 +254,11 @@ |
219 | 254 | { |
220 | 255 | if(info->cols) |
221 | 256 | { |
222 | - keypad->num_cols = 0; | |
257 | + keypad->col = 0; | |
258 | + keypad->button_width = keypad->num_cols / info->num_cols; | |
259 | + | |
260 | + trace("Max cols=%d row cols=%d width=%d",keypad->num_cols,info->num_cols,keypad->button_width); | |
261 | + | |
223 | 262 | g_list_foreach(info->cols,(GFunc) create_col,keypad); |
224 | 263 | g_list_free(info->cols); |
225 | 264 | } |
... | ... | @@ -246,7 +285,7 @@ |
246 | 285 | GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_DEFAULT); |
247 | 286 | #endif // GTK(2,18) |
248 | 287 | |
249 | - keypad->num_cols = keypad->num_rows = 0; | |
288 | + keypad->num_rows = 0; | |
250 | 289 | g_list_foreach(keypad->rows,(GFunc) create_row,keypad); |
251 | 290 | g_list_free_full(keypad->rows,g_free); |
252 | 291 | gtk_box_pack_start(GTK_BOX(keypad->box),keypad->table,FALSE,FALSE,0); | ... | ... |
src/pw3270/uiparser/parser.c
... | ... | @@ -217,6 +217,7 @@ void parser_build(struct parser *p, GtkWidget *widget) |
217 | 217 | if(parent) |
218 | 218 | { |
219 | 219 | g_hash_table_foreach(p->element_list[UI_ELEMENT_TOOLBAR],(GHFunc) pack_view, parent); |
220 | + g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_view, parent); | |
220 | 221 | } |
221 | 222 | |
222 | 223 | // Setup actions | ... | ... |