Commit 4b6f991ff2d6151b14c87977402249845f49612e

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

Implementando actions

pw3270.cbp
... ... @@ -62,6 +62,9 @@
62 62 <Unit filename="src\gtk\mainwindow.c">
63 63 <Option compilerVar="CC" />
64 64 </Unit>
  65 + <Unit filename="src\gtk\print.c">
  66 + <Option compilerVar="CC" />
  67 + </Unit>
65 68 <Unit filename="src\gtk\uiparser\Makefile.in" />
66 69 <Unit filename="src\gtk\uiparser\accelerator.c">
67 70 <Option compilerVar="CC" />
... ...
src/gtk/Makefile.in
... ... @@ -50,7 +50,7 @@ include uiparser/sources.mak
50 50  
51 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 54 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
55 55 $(foreach SRC, $(COMMON_SRC), common/$(SRC)) \
56 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 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 299 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error)
279 300 {
280 301 static const gchar *actionname[ACTION_COUNT] = { "pastenext",
... ... @@ -376,11 +397,8 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
376 397 G_CALLBACK(paste_next_action),
377 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 402 id = id_from_array(attr,src,error);
385 403 if(id < 0)
386 404 return NULL;
... ... @@ -391,36 +409,35 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
391 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 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 442 else if(!g_strcasecmp(name,"set"))
426 443 {
... ...
src/gtk/dialog.c
... ... @@ -34,6 +34,50 @@
34 34  
35 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 81 void paste_file_action(GtkAction *action, GtkWidget *widget)
38 82 {
39 83 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
... ... @@ -114,6 +158,8 @@
114 158 {
115 159 case GTK_RESPONSE_ACCEPT:
116 160  
  161 + #warning Work in progress
  162 +
117 163 /*
118 164 gtk_widget_set_sensitive(dialog,FALSE);
119 165  
... ... @@ -126,8 +172,7 @@
126 172 strncat(buffer,":",1023);
127 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 177 // Connection OK
133 178 again = FALSE;
... ... @@ -148,3 +193,20 @@
148 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 59 // actions
60 60 void paste_file_action(GtkAction *action, GtkWidget *widget);
61 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 @@
  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 75 <!--- Special action - View menu will be populated with labeled toolbars, menubars and keypads --->
76 76 <menu name='View' label='_View' />
77 77  
  78 + <!---
78 79 <menu name='ScriptsMenu' label='Scripts' />
  80 + --->
79 81  
80 82 <menu name='NetworkMenu' label='_Network' >
81 83 <menuitem action='hostname' icon='home' group='offline' label='Set hostname' />
... ...