Commit 3df72efb7b34846673d5e3ce0d75a81ac53607e6

Authored by perry.werneck@gmail.com
1 parent efed03ba

Melhorando definição de actions

Showing 2 changed files with 83 additions and 20 deletions   Show diff stats
src/gtk/actions.c
@@ -76,12 +76,23 @@ static void copy_action(GtkAction *action, GtkWidget *widget) @@ -76,12 +76,23 @@ static void copy_action(GtkAction *action, GtkWidget *widget)
76 v3270_copy_clipboard(GTK_V3270(widget)); 76 v3270_copy_clipboard(GTK_V3270(widget));
77 } 77 }
78 78
79 -static void paste_action(GtkAction *action, GtkWidget *widget) 79 +static void paste_clipboard_action(GtkAction *action, GtkWidget *widget)
80 { 80 {
81 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); 81 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
82 v3270_paste_clipboard(GTK_V3270(widget)); 82 v3270_paste_clipboard(GTK_V3270(widget));
83 } 83 }
84 84
  85 +static void paste_next_action(GtkAction *action, GtkWidget *widget)
  86 +{
  87 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  88 + lib3270_pastenext(GTK_V3270(widget)->host);
  89 +}
  90 +
  91 +static void paste_file_action(GtkAction *action, GtkWidget *widget)
  92 +{
  93 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  94 +}
  95 +
85 static void connect_standard_action(GtkAction *action, GtkWidget *widget, const gchar *name) 96 static void connect_standard_action(GtkAction *action, GtkWidget *widget, const gchar *name)
86 { 97 {
87 #undef DECLARE_LIB3270_ACTION 98 #undef DECLARE_LIB3270_ACTION
@@ -117,7 +128,6 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const @@ -117,7 +128,6 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const
117 { "connect", connect_action }, 128 { "connect", connect_action },
118 { "copy", copy_action }, 129 { "copy", copy_action },
119 { "disconnect", disconnect_action }, 130 { "disconnect", disconnect_action },
120 - { "paste", paste_action },  
121 }; 131 };
122 132
123 int f; 133 int f;
@@ -229,6 +239,21 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget) @@ -229,6 +239,21 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget)
229 lib3270_set_toggle(GTK_V3270(widget)->host,id,0); 239 lib3270_set_toggle(GTK_V3270(widget)->host,id,0);
230 } 240 }
231 241
  242 +static int id_from_array(const gchar *key, const gchar **array, GError **error)
  243 +{
  244 + int f;
  245 +
  246 + for(f = 0;array[f];f++)
  247 + {
  248 + if(!g_strcasecmp(key,array[f]))
  249 + return f;
  250 + }
  251 +
  252 + *error = g_error_new(ERROR_DOMAIN,EINVAL, _("Unexpected or invalid attribute value \"%s\""), key );
  253 +
  254 + return -1;
  255 +}
  256 +
232 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error) 257 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error)
233 { 258 {
234 static const gchar *actionname[ACTION_COUNT] = { "pastenext", 259 static const gchar *actionname[ACTION_COUNT] = { "pastenext",
@@ -240,6 +265,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -240,6 +265,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
240 GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions"); 265 GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions");
241 const gchar * direction = ui_get_attribute("direction",names,values); 266 const gchar * direction = ui_get_attribute("direction",names,values);
242 unsigned short flags = 0; 267 unsigned short flags = 0;
  268 + const GCallback * callback = NULL;
243 const gchar * attr; 269 const gchar * attr;
244 int id = 0; 270 int id = 0;
245 gchar * nm = NULL; 271 gchar * nm = NULL;
@@ -254,6 +280,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -254,6 +280,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
254 ACTION_TYPE_PAKEY, 280 ACTION_TYPE_PAKEY,
255 ACTION_TYPE_SET, 281 ACTION_TYPE_SET,
256 ACTION_TYPE_RESET, 282 ACTION_TYPE_RESET,
  283 + ACTION_TYPE_TABLE,
257 284
258 } action_type = ACTION_TYPE_DEFAULT; 285 } action_type = ACTION_TYPE_DEFAULT;
259 286
@@ -302,6 +329,37 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -302,6 +329,37 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
302 nm = g_strconcat((flags & 0x80) ? "select" : "move",attr,direction, NULL); 329 nm = g_strconcat((flags & 0x80) ? "select" : "move",attr,direction, NULL);
303 330
304 } 331 }
  332 + else if(!g_strcasecmp(name,"paste"))
  333 + {
  334 + action_type = ACTION_TYPE_TABLE;
  335 + attr = ui_get_attribute("src",names,values);
  336 +
  337 + if(!attr)
  338 + {
  339 + *error = g_error_new(ERROR_DOMAIN,EINVAL,"%s",_("Paste action needs src attribute" ));
  340 + return NULL;
  341 + }
  342 + else
  343 + {
  344 + static const GCallback cbk[] = { G_CALLBACK(paste_clipboard_action),
  345 + G_CALLBACK(paste_next_action),
  346 + G_CALLBACK(paste_file_action)
  347 + };
  348 + static const gchar * src[] = { "clipboard",
  349 + "next",
  350 + "file",
  351 + NULL
  352 + };
  353 + id = id_from_array(attr,src,error);
  354 + if(id < 0)
  355 + return NULL;
  356 +
  357 + callback = cbk;
  358 + }
  359 +
  360 + nm = g_strconcat(name,attr, NULL);
  361 +
  362 + }
305 else if(!g_strcasecmp(name,"set")) 363 else if(!g_strcasecmp(name,"set"))
306 { 364 {
307 action_type = ACTION_TYPE_SET; 365 action_type = ACTION_TYPE_SET;
@@ -407,6 +465,11 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -407,6 +465,11 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
407 g_object_set_data(G_OBJECT(action),"toggle_id",(gpointer) id); 465 g_object_set_data(G_OBJECT(action),"toggle_id",(gpointer) id);
408 g_signal_connect(action,"activate",G_CALLBACK(action_reset_toggle),widget); 466 g_signal_connect(action,"activate",G_CALLBACK(action_reset_toggle),widget);
409 break; 467 break;
  468 +
  469 + case ACTION_TYPE_TABLE:
  470 + action = gtk_action_new(nm,NULL,NULL,NULL);
  471 + g_signal_connect(action,"activate",callback[id],widget);
  472 + break;
410 } 473 }
411 474
412 for(f=0;f<ACTION_COUNT;f++) 475 for(f=0;f<ACTION_COUNT;f++)
ui/00default.xml
@@ -33,13 +33,13 @@ @@ -33,13 +33,13 @@
33 <menubar name='topmenu' topmenu='yes'> 33 <menubar name='topmenu' topmenu='yes'>
34 34
35 <menu name='FileMenu' label='_File' > 35 <menu name='FileMenu' label='_File' >
36 - <menuitem action='SaveScreen' group='online' label='Save screen' />  
37 - <menuitem action='SaveSelected' group='selection' label='Save selected' />  
38 - <menuitem action='SaveClipboard' group='clipboard' label='Save copy' /> 36 + <menuitem action='save' src='all' group='online' label='Save screen' />
  37 + <menuitem action='save' src='selected' group='selection' label='Save selected' />
  38 + <menuitem action='save' src='copy' group='clipboard' label='Save copy' />
39 <separator/> 39 <separator/>
40 - <menuitem action='PrintScreen' key='Print' icon='print' group='online' label='Print' />  
41 - <menuitem action='PrintSelected' group='selection' label='Print selected' />  
42 - <menuitem action='PrintClipboard' group='clipboard' label='Print copy' /> 40 + <menuitem action='print' src='all' key='Print' icon='print' group='online' label='Print' />
  41 + <menuitem action='print' src='selected' group='selection' label='Print selected' />
  42 + <menuitem action='print' src='copy' group='clipboard' label='Print copy' />
43 <separator/> 43 <separator/>
44 <menu name='FTMenu' group='filetransfer' label='Send/Receive' > 44 <menu name='FTMenu' group='filetransfer' label='Send/Receive' >
45 <menuitem action='Download' key='<alt>d' group='filetransfer' label='Receive file' /> 45 <menuitem action='Download' key='<alt>d' group='filetransfer' label='Receive file' />
@@ -53,9 +53,9 @@ @@ -53,9 +53,9 @@
53 <menuitem action='CopyAsTable' key='<ctrl><alt>c' group='selection' label='Copy as table' /> 53 <menuitem action='CopyAsTable' key='<ctrl><alt>c' group='selection' label='Copy as table' />
54 <menuitem action='CopyAsImage' group='selection' label='Copy as image' /> 54 <menuitem action='CopyAsImage' group='selection' label='Copy as image' />
55 <menuitem action='Append' key='<shift><ctrl>c' group='selection' label='Add to copy' /> 55 <menuitem action='Append' key='<shift><ctrl>c' group='selection' label='Add to copy' />
56 - <menuitem action='Paste' key='<ctrl>v' icon='paste' group='paste' label='Paste' />  
57 - <menuitem action='PasteNext' key='<shift><ctrl>v' label='Paste next' />  
58 - <menuitem action='PasteTextFile' group='online' label='Paste text file' /> 56 + <menuitem action='paste' src='clipboard' key='<ctrl>v' icon='paste' group='paste' label='Paste' />
  57 + <menuitem action='paste' src='next' key='<shift><ctrl>v' label='Paste next' />
  58 + <menuitem action='paste' src='file' group='online' label='Paste text file' />
59 59
60 <separator/> 60 <separator/>
61 <menuitem action='selectall' key='<ctrl>a' icon='select-all' group='online' label='Select all' /> 61 <menuitem action='selectall' key='<ctrl>a' icon='select-all' group='online' label='Select all' />
@@ -125,7 +125,7 @@ @@ -125,7 +125,7 @@
125 <toolbar name='toolbar.default' label='Toolbar' key='<alt>t' > 125 <toolbar name='toolbar.default' label='Toolbar' key='<alt>t' >
126 <toolitem action='selectall' /> 126 <toolitem action='selectall' />
127 <toolitem action='Copy' /> 127 <toolitem action='Copy' />
128 - <toolitem action='Paste' /> 128 + <toolitem action='paste' src='clipboard' />
129 <toolitem action='EraseInput' /> 129 <toolitem action='EraseInput' />
130 130
131 <separator/> 131 <separator/>
@@ -136,7 +136,7 @@ @@ -136,7 +136,7 @@
136 <toolitem action='set' toggle='fullscreen' icon='fullscreen' label='Full Screen' /> 136 <toolitem action='set' toggle='fullscreen' icon='fullscreen' label='Full Screen' />
137 <toolitem action='reset' toggle='fullscreen' icon='leave-fullscreen' label='Window' /> 137 <toolitem action='reset' toggle='fullscreen' icon='leave-fullscreen' label='Window' />
138 <toolitem action='SelectColors' /> 138 <toolitem action='SelectColors' />
139 - <toolitem action='PrintScreen' /> 139 + <toolitem action='print' src='all' />
140 <toolitem action='Quit' /> 140 <toolitem action='Quit' />
141 </toolbar> 141 </toolbar>
142 142
@@ -147,20 +147,20 @@ @@ -147,20 +147,20 @@
147 <menuitem action='selectall'/> 147 <menuitem action='selectall'/>
148 148
149 <separator /> 149 <separator />
150 - <menuitem action='PrintScreen'/>  
151 - <menuitem action='PrintSelected'/>  
152 - <menuitem action='PrintClipboard'/> 150 + <menuitem action='print' src='all'/>
  151 + <menuitem action='print' src='selected'/>
  152 + <menuitem action='print' src='copy'/>
153 153
154 <separator /> 154 <separator />
155 <menuitem action='Quit'/> 155 <menuitem action='Quit'/>
156 </popup> 156 </popup>
157 157
158 <popup name='defaultpopup' type='default'> 158 <popup name='defaultpopup' type='default'>
159 - <menuitem action='Paste'/>  
160 - <menuitem action='PasteNext'/> 159 + <menuitem action='paste' src='clipboard'/>
  160 + <menuitem action='paste' src='next'/>
161 <menuitem action='selectall'/> 161 <menuitem action='selectall'/>
162 - <menuitem action='PrintScreen'/>  
163 - <menuitem action='PrintClipboard'/> 162 + <menuitem action='print' src='all'/>
  163 + <menuitem action='print' src='copy'/>
164 164
165 <separator /> 165 <separator />
166 <menuitem action='backtab' label='Previous field' /> 166 <menuitem action='backtab' label='Previous field' />