Commit 4b6f991ff2d6151b14c87977402249845f49612e
1 parent
60b030af
Exists in
master
and in
5 other branches
Implementando actions
Showing
7 changed files
with
177 additions
and
33 deletions
Show diff stats
pw3270.cbp
| @@ -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 |
| @@ -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' /> |