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 |