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 | ... | ... |