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,6 +45,7 @@ | ||
45 | unsigned short num_rows; | 45 | unsigned short num_rows; |
46 | unsigned short num_cols; | 46 | unsigned short num_cols; |
47 | unsigned short col; | 47 | unsigned short col; |
48 | + unsigned short button_width; | ||
48 | struct row * row; | 49 | struct row * row; |
49 | GtkWidget * box; | 50 | GtkWidget * box; |
50 | GtkWidget * handle; | 51 | GtkWidget * handle; |
@@ -89,6 +90,20 @@ | @@ -89,6 +90,20 @@ | ||
89 | } | 90 | } |
90 | 91 | ||
91 | keypad->row->cols = g_list_append(keypad->row->cols,widget); | 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 | static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct keypad *keypad, GError **error) | 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,6 +137,21 @@ | ||
122 | // trace("%s: %s",__FUNCTION__,element_name); | 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 | GObject * ui_create_keypad(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) | 155 | GObject * ui_create_keypad(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) |
126 | { | 156 | { |
127 | static const GMarkupParser parser = | 157 | static const GMarkupParser parser = |
@@ -138,9 +168,6 @@ | @@ -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 | struct keypad *keypad; | 171 | struct keypad *keypad; |
145 | 172 | ||
146 | if(info->element) | 173 | if(info->element) |
@@ -185,11 +212,19 @@ | @@ -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 | gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(keypad->handle),GTK_SHADOW_ETCHED_IN); | 229 | gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(keypad->handle),GTK_SHADOW_ETCHED_IN); |
195 | gtk_container_add(GTK_CONTAINER(keypad->handle),keypad->box); | 230 | gtk_container_add(GTK_CONTAINER(keypad->handle),keypad->box); |
@@ -206,12 +241,12 @@ | @@ -206,12 +241,12 @@ | ||
206 | gtk_widget_show_all(widget); | 241 | gtk_widget_show_all(widget); |
207 | gtk_table_attach( GTK_TABLE(keypad->table), | 242 | gtk_table_attach( GTK_TABLE(keypad->table), |
208 | widget, | 243 | widget, |
209 | - keypad->num_cols,keypad->num_cols+1, | 244 | + keypad->col,keypad->col+keypad->button_width, |
210 | keypad->num_rows,keypad->num_rows+1, | 245 | keypad->num_rows,keypad->num_rows+1, |
211 | GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,0,0 ); | 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,7 +254,11 @@ | ||
219 | { | 254 | { |
220 | if(info->cols) | 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 | g_list_foreach(info->cols,(GFunc) create_col,keypad); | 262 | g_list_foreach(info->cols,(GFunc) create_col,keypad); |
224 | g_list_free(info->cols); | 263 | g_list_free(info->cols); |
225 | } | 264 | } |
@@ -246,7 +285,7 @@ | @@ -246,7 +285,7 @@ | ||
246 | GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_DEFAULT); | 285 | GTK_WIDGET_UNSET_FLAGS(keypad->table,GTK_CAN_DEFAULT); |
247 | #endif // GTK(2,18) | 286 | #endif // GTK(2,18) |
248 | 287 | ||
249 | - keypad->num_cols = keypad->num_rows = 0; | 288 | + keypad->num_rows = 0; |
250 | g_list_foreach(keypad->rows,(GFunc) create_row,keypad); | 289 | g_list_foreach(keypad->rows,(GFunc) create_row,keypad); |
251 | g_list_free_full(keypad->rows,g_free); | 290 | g_list_free_full(keypad->rows,g_free); |
252 | gtk_box_pack_start(GTK_BOX(keypad->box),keypad->table,FALSE,FALSE,0); | 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,6 +217,7 @@ void parser_build(struct parser *p, GtkWidget *widget) | ||
217 | if(parent) | 217 | if(parent) |
218 | { | 218 | { |
219 | g_hash_table_foreach(p->element_list[UI_ELEMENT_TOOLBAR],(GHFunc) pack_view, parent); | 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 | // Setup actions | 223 | // Setup actions |