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 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 81 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
82 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 96 static void connect_standard_action(GtkAction *action, GtkWidget *widget, const gchar *name)
86 97 {
87 98 #undef DECLARE_LIB3270_ACTION
... ... @@ -117,7 +128,6 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const
117 128 { "connect", connect_action },
118 129 { "copy", copy_action },
119 130 { "disconnect", disconnect_action },
120   - { "paste", paste_action },
121 131 };
122 132  
123 133 int f;
... ... @@ -229,6 +239,21 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget)
229 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 257 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error)
233 258 {
234 259 static const gchar *actionname[ACTION_COUNT] = { "pastenext",
... ... @@ -240,6 +265,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
240 265 GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions");
241 266 const gchar * direction = ui_get_attribute("direction",names,values);
242 267 unsigned short flags = 0;
  268 + const GCallback * callback = NULL;
243 269 const gchar * attr;
244 270 int id = 0;
245 271 gchar * nm = NULL;
... ... @@ -254,6 +280,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
254 280 ACTION_TYPE_PAKEY,
255 281 ACTION_TYPE_SET,
256 282 ACTION_TYPE_RESET,
  283 + ACTION_TYPE_TABLE,
257 284  
258 285 } action_type = ACTION_TYPE_DEFAULT;
259 286  
... ... @@ -302,6 +329,37 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
302 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 363 else if(!g_strcasecmp(name,"set"))
306 364 {
307 365 action_type = ACTION_TYPE_SET;
... ... @@ -407,6 +465,11 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
407 465 g_object_set_data(G_OBJECT(action),"toggle_id",(gpointer) id);
408 466 g_signal_connect(action,"activate",G_CALLBACK(action_reset_toggle),widget);
409 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 475 for(f=0;f<ACTION_COUNT;f++)
... ...
ui/00default.xml
... ... @@ -33,13 +33,13 @@
33 33 <menubar name='topmenu' topmenu='yes'>
34 34  
35 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 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 43 <separator/>
44 44 <menu name='FTMenu' group='filetransfer' label='Send/Receive' >
45 45 <menuitem action='Download' key='<alt>d' group='filetransfer' label='Receive file' />
... ... @@ -53,9 +53,9 @@
53 53 <menuitem action='CopyAsTable' key='<ctrl><alt>c' group='selection' label='Copy as table' />
54 54 <menuitem action='CopyAsImage' group='selection' label='Copy as image' />
55 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 60 <separator/>
61 61 <menuitem action='selectall' key='<ctrl>a' icon='select-all' group='online' label='Select all' />
... ... @@ -125,7 +125,7 @@
125 125 <toolbar name='toolbar.default' label='Toolbar' key='<alt>t' >
126 126 <toolitem action='selectall' />
127 127 <toolitem action='Copy' />
128   - <toolitem action='Paste' />
  128 + <toolitem action='paste' src='clipboard' />
129 129 <toolitem action='EraseInput' />
130 130  
131 131 <separator/>
... ... @@ -136,7 +136,7 @@
136 136 <toolitem action='set' toggle='fullscreen' icon='fullscreen' label='Full Screen' />
137 137 <toolitem action='reset' toggle='fullscreen' icon='leave-fullscreen' label='Window' />
138 138 <toolitem action='SelectColors' />
139   - <toolitem action='PrintScreen' />
  139 + <toolitem action='print' src='all' />
140 140 <toolitem action='Quit' />
141 141 </toolbar>
142 142  
... ... @@ -147,20 +147,20 @@
147 147 <menuitem action='selectall'/>
148 148  
149 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 154 <separator />
155 155 <menuitem action='Quit'/>
156 156 </popup>
157 157  
158 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 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 165 <separator />
166 166 <menuitem action='backtab' label='Previous field' />
... ...