From 22765196d65d421077c5bc5cd28b0f8d11bab6ff Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Tue, 20 Mar 2012 23:06:15 +0000 Subject: [PATCH] Reorganizando montagem das acoes para uso de novos atributos --- src/gtk/actions.c | 191 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- src/gtk/uiparser/parsefile.c | 41 +++++++++++++++++++++-------------------- src/gtk/uiparser/parser.h | 17 +++++++++++------ src/gtk/uiparser/private.h | 2 -- src/lib3270/toggles.c | 13 +++++++------ ui/00default.xml | 38 +++++++++++++++++++------------------- 6 files changed, 242 insertions(+), 60 deletions(-) diff --git a/src/gtk/actions.c b/src/gtk/actions.c index 8e67451..e6166b9 100644 --- a/src/gtk/actions.c +++ b/src/gtk/actions.c @@ -35,8 +35,11 @@ #include #include + #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME) + /*--[ Implement ]------------------------------------------------------------------------------------*/ +/* static void lib3270_action(GtkAction *action, GtkWidget *widget) { int (*call)(H3270 *h) = (int (*)(H3270 *h)) g_object_get_data(G_OBJECT(action),"lib3270_call"); @@ -92,7 +95,7 @@ void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, #define DECLARE_LIB3270_CLEAR_SELECTION_ACTION( name ) { #name, lib3270_ ## name }, #define DECLARE_LIB3270_KEY_ACTION( name ) { #name, lib3270_ ## name }, #define DECLARE_LIB3270_CURSOR_ACTION( name ) { #name, lib3270_cursor_ ## name }, - #define DECLARE_LIB3270_FKEY_ACTION( name ) /* name */ + #define DECLARE_LIB3270_FKEY_ACTION( name ) // name static const struct _lib3270_action { @@ -147,6 +150,7 @@ void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, // Not-found, disable action gtk_action_set_sensitive(action,FALSE); } +*/ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) { @@ -157,6 +161,7 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) lib3270_set_toggle(GTK_V3270(widget)->host,toggle,gtk_toggle_action_get_active(action)); } +/* void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id) { LIB3270_TOGGLE toggle = lib3270_get_toggle_id(id); @@ -176,7 +181,9 @@ void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, // Not found, disable action gtk_action_set_sensitive(action,FALSE); } +*/ +/* static void selection_move_action(GtkAction *action, GtkWidget *widget) { trace("Action %s activated on widget %p dir=%d",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"direction")); @@ -219,6 +226,7 @@ void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar } } +*/ static void action_pfkey(GtkAction *action, GtkWidget *widget) { @@ -226,18 +234,13 @@ static void action_pfkey(GtkAction *action, GtkWidget *widget) lib3270_pfkey(GTK_V3270(widget)->host,(int) g_object_get_data(G_OBJECT(action),"pfkey")); } -void ui_connect_pfkey(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id) -{ - g_object_set_data(G_OBJECT(action),"pfkey",(gpointer) atoi(id)); - g_signal_connect(action,"activate",G_CALLBACK(action_pfkey),widget); -} - static void action_pakey(GtkAction *action, GtkWidget *widget) { trace("Action %s activated on widget %p key=%d",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pakey")); lib3270_pakey(GTK_V3270(widget)->host,(int) g_object_get_data(G_OBJECT(action),"pakey")); } +/* static void action_fullscreen(GtkAction *action, GtkWidget *widget) { lib3270_set_toggle(GTK_V3270(widget)->host,LIB3270_TOGGLE_FULL_SCREEN,1); @@ -290,4 +293,178 @@ void ui_connect_index_action(GtkAction *action, GtkWidget *widget, int ix, GtkAc g_warning("Action \"%s\" has unexpected id %d",gtk_action_get_name(action),ix); gtk_action_set_sensitive(action,FALSE); } + } +*/ + +GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error) +{ + GtkAction * action = NULL; + GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions"); + const gchar * direction = ui_get_attribute("direction",names,values); + unsigned short flags = 0; + const gchar * attr; + int id = 0; + gchar * nm = NULL; + + enum _action_type + { + ACTION_TYPE_DEFAULT, + ACTION_TYPE_TOGGLE, + ACTION_TYPE_MOVE, + ACTION_TYPE_PFKEY, + ACTION_TYPE_PAKEY, + ACTION_TYPE_SET, + ACTION_TYPE_RESET, + + } action_type = ACTION_TYPE_DEFAULT; + + if(direction) + { + static const gchar *dirname[] = { "up", "down", "left", "right" }; + int f; + + for(f=0;fhost,id) != 0)); + g_signal_connect(action,"toggled",G_CALLBACK(lib3270_toggle_action),widget); + break; + + case ACTION_TYPE_MOVE: + action = gtk_action_new(nm,NULL,NULL,NULL); + break; + + case ACTION_TYPE_PFKEY: + action = gtk_action_new(nm,NULL,NULL,NULL); + g_object_set_data(G_OBJECT(action),"pfkey",(gpointer) id); + g_signal_connect(action,"activate",G_CALLBACK(action_pfkey),widget); + break; + + case ACTION_TYPE_PAKEY: + action = gtk_action_new(nm,NULL,NULL,NULL); + g_object_set_data(G_OBJECT(action),"pakey",(gpointer) id); + g_signal_connect(action,"activate",G_CALLBACK(action_pakey),widget); + break; + + case ACTION_TYPE_SET: + action = gtk_action_new(nm,NULL,NULL,NULL); + break; + + case ACTION_TYPE_RESET: + action = gtk_action_new(nm,NULL,NULL,NULL); + break; + } + + g_hash_table_insert(hash,nm,action); + g_free(nm); + + return action; } + diff --git a/src/gtk/uiparser/parsefile.c b/src/gtk/uiparser/parsefile.c index 39b5a36..9948e16 100644 --- a/src/gtk/uiparser/parsefile.c +++ b/src/gtk/uiparser/parsefile.c @@ -139,33 +139,34 @@ static GtkAction * get_action(const gchar *name, struct parser *info, const gchar **names, const gchar **values, GError **error) { + GtkAction *action; + + if(!g_strcasecmp(name,"quit")) + { + action = g_hash_table_lookup(info->actions,name); + if(!action) + { + action = gtk_action_new(name,NULL,NULL,NULL); + g_signal_connect(action,"activate",G_CALLBACK(gtk_main_quit), NULL); + } + } + else + { + action = ui_get_action(info->center_widget,name,info->actions,names,values,error); + } + + if(!action) + return action; + +/* const gchar * target = NULL; const gchar * direction = ui_get_attribute("direction",names,values); const gchar * id = ui_get_attribute("id",names,values); - unsigned short flags = 0; GtkAction * action; gchar * nm; void (*connect)(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id) = ui_connect_action; GtkAction * (*create)(const gchar *,const gchar *,const gchar *,const gchar *) = gtk_action_new; - if(direction) - { - static const gchar *dirname[] = { "up", "down", "left", "right" }; - int f; - - for(f=0;f - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -133,8 +133,8 @@ - - + + @@ -175,7 +175,7 @@ - + -- libgit2 0.21.2