Commit 4b6f991ff2d6151b14c87977402249845f49612e

Authored by perry.werneck@gmail.com
1 parent 60b030af

Implementando actions

@@ -62,6 +62,9 @@ @@ -62,6 +62,9 @@
62 <Unit filename="src\gtk\mainwindow.c"> 62 <Unit filename="src\gtk\mainwindow.c">
63 <Option compilerVar="CC" /> 63 <Option compilerVar="CC" />
64 </Unit> 64 </Unit>
  65 + <Unit filename="src\gtk\print.c">
  66 + <Option compilerVar="CC" />
  67 + </Unit>
65 <Unit filename="src\gtk\uiparser\Makefile.in" /> 68 <Unit filename="src\gtk\uiparser\Makefile.in" />
66 <Unit filename="src\gtk\uiparser\accelerator.c"> 69 <Unit filename="src\gtk\uiparser\accelerator.c">
67 <Option compilerVar="CC" /> 70 <Option compilerVar="CC" />
src/gtk/Makefile.in
@@ -50,7 +50,7 @@ include uiparser/sources.mak @@ -50,7 +50,7 @@ include uiparser/sources.mak
50 50
51 #---[ Targets ]---------------------------------------------------------------- 51 #---[ Targets ]----------------------------------------------------------------
52 52
53 -SOURCES=main.c mainwindow.c actions.c fonts.c dialog.c \ 53 +SOURCES=main.c mainwindow.c actions.c fonts.c dialog.c print.c \
54 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ 54 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
55 $(foreach SRC, $(COMMON_SRC), common/$(SRC)) \ 55 $(foreach SRC, $(COMMON_SRC), common/$(SRC)) \
56 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) 56 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC))
src/gtk/actions.c
@@ -275,6 +275,27 @@ static int id_from_array(const gchar *key, const gchar **array, GError **error) @@ -275,6 +275,27 @@ static int id_from_array(const gchar *key, const gchar **array, GError **error)
275 return -1; 275 return -1;
276 } 276 }
277 277
  278 +static int setup_block_action(const gchar *name, const gchar *attr, GError **error)
  279 +{
  280 + int id = -1;
  281 +
  282 + if(!attr)
  283 + {
  284 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs src attribute" ), name);
  285 + }
  286 + else
  287 + {
  288 + static const gchar * src[] = { "all", "selected", "copy", NULL };
  289 +
  290 + id = id_from_array(attr,src,error);
  291 + if(id < 0)
  292 + {
  293 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Unexpected or invalid src attribute: \"%s\"" ), attr);
  294 + }
  295 + }
  296 + return id;
  297 +}
  298 +
278 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error) 299 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error)
279 { 300 {
280 static const gchar *actionname[ACTION_COUNT] = { "pastenext", 301 static const gchar *actionname[ACTION_COUNT] = { "pastenext",
@@ -376,11 +397,8 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -376,11 +397,8 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
376 G_CALLBACK(paste_next_action), 397 G_CALLBACK(paste_next_action),
377 G_CALLBACK(paste_file_action) 398 G_CALLBACK(paste_file_action)
378 }; 399 };
379 - static const gchar * src[] = { "clipboard",  
380 - "next",  
381 - "file",  
382 - NULL  
383 - }; 400 + static const gchar * src[] = { "clipboard", "next", "file", NULL };
  401 +
384 id = id_from_array(attr,src,error); 402 id = id_from_array(attr,src,error);
385 if(id < 0) 403 if(id < 0)
386 return NULL; 404 return NULL;
@@ -391,36 +409,35 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -391,36 +409,35 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
391 nm = g_strconcat(name,attr, NULL); 409 nm = g_strconcat(name,attr, NULL);
392 410
393 } 411 }
394 - else if(!(g_strcasecmp(name,"save") && g_strcasecmp(name,"print"))) 412 + else if(!g_strcasecmp(name,"save"))
395 { 413 {
396 - action_type = ACTION_TYPE_TABLE;  
397 - attr = ui_get_attribute("src",names,values); 414 + static const GCallback cbk[] = { G_CALLBACK(save_all_action),
  415 + G_CALLBACK(save_selected_action),
  416 + G_CALLBACK(save_copy_action)
  417 + };
398 418
399 - if(!attr)  
400 - {  
401 - *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs src attribute" ), name); 419 + callback = cbk;
  420 + action_type = ACTION_TYPE_TABLE;
  421 + attr = ui_get_attribute("src",names,values);
  422 + id = setup_block_action(name,attr,error);
  423 + if(*error)
402 return NULL; 424 return NULL;
403 - }  
404 - else  
405 - {  
406 - static const GCallback cbk[] = { G_CALLBACK(nop_action),  
407 - G_CALLBACK(nop_action),  
408 - G_CALLBACK(nop_action) 425 + nm = g_strconcat(name,attr,NULL);
  426 + }
  427 + else if(!g_strcasecmp(name,"print"))
  428 + {
  429 + static const GCallback cbk[] = { G_CALLBACK(nop_action),
  430 + G_CALLBACK(nop_action),
  431 + G_CALLBACK(nop_action)
409 }; 432 };
410 - static const gchar * src[] = { "all",  
411 - "selected",  
412 - "copy",  
413 - NULL  
414 - };  
415 - id = id_from_array(attr,src,error);  
416 - if(id < 0)  
417 - return NULL;  
418 -  
419 - callback = cbk;  
420 - }  
421 -  
422 - nm = g_strconcat(name,attr, NULL);  
423 433
  434 + callback = cbk;
  435 + action_type = ACTION_TYPE_TABLE;
  436 + attr = ui_get_attribute("src",names,values);
  437 + id = setup_block_action(name,attr,error);
  438 + if(*error)
  439 + return NULL;
  440 + nm = g_strconcat(name,attr,NULL);
424 } 441 }
425 else if(!g_strcasecmp(name,"set")) 442 else if(!g_strcasecmp(name,"set"))
426 { 443 {
src/gtk/dialog.c
@@ -34,6 +34,50 @@ @@ -34,6 +34,50 @@
34 34
35 /*--[ Implement ]------------------------------------------------------------------------------------*/ 35 /*--[ Implement ]------------------------------------------------------------------------------------*/
36 36
  37 + static int save_dialog(GtkAction *action, GtkWidget *widget, const gchar *title, const gchar *errmsg, gchar *text)
  38 + {
  39 + GtkWindow * toplevel = GTK_WINDOW(gtk_widget_get_toplevel(widget));
  40 + const gchar * user_title = g_object_get_data(G_OBJECT(action),"title");
  41 +
  42 + GtkWidget *dialog = gtk_file_chooser_dialog_new( gettext(user_title ? user_title : title),
  43 + toplevel,
  44 + GTK_FILE_CHOOSER_ACTION_SAVE,
  45 + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
  46 + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
  47 + NULL );
  48 +
  49 +
  50 + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
  51 + {
  52 + GError *error = NULL;
  53 + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
  54 +
  55 + if(!g_file_set_contents(filename,text,-1,&error))
  56 + {
  57 + GtkWidget *popup = gtk_message_dialog_new_with_markup(
  58 + toplevel,
  59 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  60 + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
  61 + gettext(errmsg),filename);
  62 +
  63 + gtk_window_set_title(GTK_WINDOW(popup),_("Can´t save file"));
  64 +
  65 + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",error->message);
  66 + g_error_free(error);
  67 +
  68 + gtk_dialog_run(GTK_DIALOG(popup));
  69 + gtk_widget_destroy(popup);
  70 +
  71 + }
  72 +
  73 + g_free(filename);
  74 + }
  75 +
  76 + gtk_widget_destroy(dialog);
  77 + return 0;
  78 + }
  79 +
  80 +
37 void paste_file_action(GtkAction *action, GtkWidget *widget) 81 void paste_file_action(GtkAction *action, GtkWidget *widget)
38 { 82 {
39 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); 83 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
@@ -114,6 +158,8 @@ @@ -114,6 +158,8 @@
114 { 158 {
115 case GTK_RESPONSE_ACCEPT: 159 case GTK_RESPONSE_ACCEPT:
116 160
  161 + #warning Work in progress
  162 +
117 /* 163 /*
118 gtk_widget_set_sensitive(dialog,FALSE); 164 gtk_widget_set_sensitive(dialog,FALSE);
119 165
@@ -126,8 +172,7 @@ @@ -126,8 +172,7 @@
126 strncat(buffer,":",1023); 172 strncat(buffer,":",1023);
127 strncat(buffer,gtk_entry_get_text(port),1023); 173 strncat(buffer,gtk_entry_get_text(port),1023);
128 174
129 - #warning Need more work  
130 - if(!host_connect(buffer,1)) 175 + if(!lib3270_connect(GTK_V3270(widget)->host,host,1))
131 { 176 {
132 // Connection OK 177 // Connection OK
133 again = FALSE; 178 again = FALSE;
@@ -148,3 +193,20 @@ @@ -148,3 +193,20 @@
148 g_free(cfghost); 193 g_free(cfghost);
149 } 194 }
150 195
  196 + void save_all_action(GtkAction *action, GtkWidget *widget)
  197 + {
  198 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  199 +
  200 + }
  201 +
  202 + void save_selected_action(GtkAction *action, GtkWidget *widget)
  203 + {
  204 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  205 +
  206 + }
  207 +
  208 + void save_copy_action(GtkAction *action, GtkWidget *widget)
  209 + {
  210 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  211 +
  212 + }
src/gtk/globals.h
@@ -59,4 +59,10 @@ @@ -59,4 +59,10 @@
59 // actions 59 // actions
60 void paste_file_action(GtkAction *action, GtkWidget *widget); 60 void paste_file_action(GtkAction *action, GtkWidget *widget);
61 void hostname_action(GtkAction *action, GtkWidget *widget); 61 void hostname_action(GtkAction *action, GtkWidget *widget);
  62 + void save_all_action(GtkAction *action, GtkWidget *widget);
  63 + void save_selected_action(GtkAction *action, GtkWidget *widget);
  64 + void save_copy_action(GtkAction *action, GtkWidget *widget);
  65 + void print_all_action(GtkAction *action, GtkWidget *widget);
  66 + void print_selected_action(GtkAction *action, GtkWidget *widget);
  67 + void print_copy_action(GtkAction *action, GtkWidget *widget);
62 68
src/gtk/print.c 0 → 100644
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como dialog.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 + #include "globals.h"
  33 + #include "v3270/v3270.h"
  34 +
  35 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  36 +
  37 + void print_all_action(GtkAction *action, GtkWidget *widget)
  38 + {
  39 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  40 +
  41 + }
  42 +
  43 + void print_selected_action(GtkAction *action, GtkWidget *widget)
  44 + {
  45 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  46 +
  47 + }
  48 +
  49 + void print_copy_action(GtkAction *action, GtkWidget *widget)
  50 + {
  51 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  52 +
  53 + }
  54 +
ui/00default.xml
@@ -75,7 +75,9 @@ @@ -75,7 +75,9 @@
75 <!--- Special action - View menu will be populated with labeled toolbars, menubars and keypads ---> 75 <!--- Special action - View menu will be populated with labeled toolbars, menubars and keypads --->
76 <menu name='View' label='_View' /> 76 <menu name='View' label='_View' />
77 77
  78 + <!---
78 <menu name='ScriptsMenu' label='Scripts' /> 79 <menu name='ScriptsMenu' label='Scripts' />
  80 + --->
79 81
80 <menu name='NetworkMenu' label='_Network' > 82 <menu name='NetworkMenu' label='_Network' >
81 <menuitem action='hostname' icon='home' group='offline' label='Set hostname' /> 83 <menuitem action='hostname' icon='home' group='offline' label='Set hostname' />