Commit 70442604ee10994a668d69407cc66e50ad80c93e

Authored by perry.werneck@gmail.com
1 parent 327d269c

Trabalhando na implementacao dos keypads

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