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