diff --git a/pw3270.cbp b/pw3270.cbp
index e9cc58b..ea4057a 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -62,6 +62,9 @@
+
+
+
diff --git a/src/gtk/Makefile.in b/src/gtk/Makefile.in
index 1b52d8f..77729e6 100644
--- a/src/gtk/Makefile.in
+++ b/src/gtk/Makefile.in
@@ -50,7 +50,7 @@ include uiparser/sources.mak
#---[ Targets ]----------------------------------------------------------------
-SOURCES=main.c mainwindow.c actions.c fonts.c dialog.c \
+SOURCES=main.c mainwindow.c actions.c fonts.c dialog.c print.c \
$(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
$(foreach SRC, $(COMMON_SRC), common/$(SRC)) \
$(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC))
diff --git a/src/gtk/actions.c b/src/gtk/actions.c
index 5ef0130..befa242 100644
--- a/src/gtk/actions.c
+++ b/src/gtk/actions.c
@@ -275,6 +275,27 @@ static int id_from_array(const gchar *key, const gchar **array, GError **error)
return -1;
}
+static int setup_block_action(const gchar *name, const gchar *attr, GError **error)
+{
+ int id = -1;
+
+ if(!attr)
+ {
+ *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs src attribute" ), name);
+ }
+ else
+ {
+ static const gchar * src[] = { "all", "selected", "copy", NULL };
+
+ id = id_from_array(attr,src,error);
+ if(id < 0)
+ {
+ *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Unexpected or invalid src attribute: \"%s\"" ), attr);
+ }
+ }
+ return id;
+}
+
GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error)
{
static const gchar *actionname[ACTION_COUNT] = { "pastenext",
@@ -376,11 +397,8 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
G_CALLBACK(paste_next_action),
G_CALLBACK(paste_file_action)
};
- static const gchar * src[] = { "clipboard",
- "next",
- "file",
- NULL
- };
+ static const gchar * src[] = { "clipboard", "next", "file", NULL };
+
id = id_from_array(attr,src,error);
if(id < 0)
return NULL;
@@ -391,36 +409,35 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
nm = g_strconcat(name,attr, NULL);
}
- else if(!(g_strcasecmp(name,"save") && g_strcasecmp(name,"print")))
+ else if(!g_strcasecmp(name,"save"))
{
- action_type = ACTION_TYPE_TABLE;
- attr = ui_get_attribute("src",names,values);
+ static const GCallback cbk[] = { G_CALLBACK(save_all_action),
+ G_CALLBACK(save_selected_action),
+ G_CALLBACK(save_copy_action)
+ };
- if(!attr)
- {
- *error = g_error_new(ERROR_DOMAIN,EINVAL,_("%s action needs src attribute" ), name);
+ callback = cbk;
+ action_type = ACTION_TYPE_TABLE;
+ attr = ui_get_attribute("src",names,values);
+ id = setup_block_action(name,attr,error);
+ if(*error)
return NULL;
- }
- else
- {
- static const GCallback cbk[] = { G_CALLBACK(nop_action),
- G_CALLBACK(nop_action),
- G_CALLBACK(nop_action)
+ nm = g_strconcat(name,attr,NULL);
+ }
+ else if(!g_strcasecmp(name,"print"))
+ {
+ static const GCallback cbk[] = { G_CALLBACK(nop_action),
+ G_CALLBACK(nop_action),
+ G_CALLBACK(nop_action)
};
- static const gchar * src[] = { "all",
- "selected",
- "copy",
- NULL
- };
- id = id_from_array(attr,src,error);
- if(id < 0)
- return NULL;
-
- callback = cbk;
- }
-
- nm = g_strconcat(name,attr, NULL);
+ callback = cbk;
+ action_type = ACTION_TYPE_TABLE;
+ attr = ui_get_attribute("src",names,values);
+ id = setup_block_action(name,attr,error);
+ if(*error)
+ return NULL;
+ nm = g_strconcat(name,attr,NULL);
}
else if(!g_strcasecmp(name,"set"))
{
diff --git a/src/gtk/dialog.c b/src/gtk/dialog.c
index c0b55bd..1a5d041 100644
--- a/src/gtk/dialog.c
+++ b/src/gtk/dialog.c
@@ -34,6 +34,50 @@
/*--[ Implement ]------------------------------------------------------------------------------------*/
+ static int save_dialog(GtkAction *action, GtkWidget *widget, const gchar *title, const gchar *errmsg, gchar *text)
+ {
+ GtkWindow * toplevel = GTK_WINDOW(gtk_widget_get_toplevel(widget));
+ const gchar * user_title = g_object_get_data(G_OBJECT(action),"title");
+
+ GtkWidget *dialog = gtk_file_chooser_dialog_new( gettext(user_title ? user_title : title),
+ toplevel,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL );
+
+
+ if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ GError *error = NULL;
+ gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+
+ if(!g_file_set_contents(filename,text,-1,&error))
+ {
+ GtkWidget *popup = gtk_message_dialog_new_with_markup(
+ toplevel,
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,
+ gettext(errmsg),filename);
+
+ gtk_window_set_title(GTK_WINDOW(popup),_("Can´t save file"));
+
+ gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",error->message);
+ g_error_free(error);
+
+ gtk_dialog_run(GTK_DIALOG(popup));
+ gtk_widget_destroy(popup);
+
+ }
+
+ g_free(filename);
+ }
+
+ gtk_widget_destroy(dialog);
+ return 0;
+ }
+
+
void paste_file_action(GtkAction *action, GtkWidget *widget)
{
trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
@@ -114,6 +158,8 @@
{
case GTK_RESPONSE_ACCEPT:
+ #warning Work in progress
+
/*
gtk_widget_set_sensitive(dialog,FALSE);
@@ -126,8 +172,7 @@
strncat(buffer,":",1023);
strncat(buffer,gtk_entry_get_text(port),1023);
- #warning Need more work
- if(!host_connect(buffer,1))
+ if(!lib3270_connect(GTK_V3270(widget)->host,host,1))
{
// Connection OK
again = FALSE;
@@ -148,3 +193,20 @@
g_free(cfghost);
}
+ void save_all_action(GtkAction *action, GtkWidget *widget)
+ {
+ trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+ }
+
+ void save_selected_action(GtkAction *action, GtkWidget *widget)
+ {
+ trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+ }
+
+ void save_copy_action(GtkAction *action, GtkWidget *widget)
+ {
+ trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+ }
diff --git a/src/gtk/globals.h b/src/gtk/globals.h
index 2ab2567..9edf68b 100644
--- a/src/gtk/globals.h
+++ b/src/gtk/globals.h
@@ -59,4 +59,10 @@
// actions
void paste_file_action(GtkAction *action, GtkWidget *widget);
void hostname_action(GtkAction *action, GtkWidget *widget);
+ void save_all_action(GtkAction *action, GtkWidget *widget);
+ void save_selected_action(GtkAction *action, GtkWidget *widget);
+ void save_copy_action(GtkAction *action, GtkWidget *widget);
+ void print_all_action(GtkAction *action, GtkWidget *widget);
+ void print_selected_action(GtkAction *action, GtkWidget *widget);
+ void print_copy_action(GtkAction *action, GtkWidget *widget);
diff --git a/src/gtk/print.c b/src/gtk/print.c
new file mode 100644
index 0000000..22c6d80
--- /dev/null
+++ b/src/gtk/print.c
@@ -0,0 +1,54 @@
+/*
+ * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
+ * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
+ * aplicativos mainframe. Registro no INPI sob o nome G3270.
+ *
+ * Copyright (C) <2008>
+ *
+ * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
+ * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
+ * Free Software Foundation.
+ *
+ * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
+ * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
+ * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
+ * obter mais detalhes.
+ *
+ * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
+ * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA, 02111-1307, USA
+ *
+ * Este programa está nomeado como dialog.c e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ * licinio@bb.com.br (Licínio Luis Branco)
+ * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
+ *
+ */
+
+ #include "globals.h"
+ #include "v3270/v3270.h"
+
+/*--[ Implement ]------------------------------------------------------------------------------------*/
+
+ void print_all_action(GtkAction *action, GtkWidget *widget)
+ {
+ trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+ }
+
+ void print_selected_action(GtkAction *action, GtkWidget *widget)
+ {
+ trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+ }
+
+ void print_copy_action(GtkAction *action, GtkWidget *widget)
+ {
+ trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
+
+ }
+
diff --git a/ui/00default.xml b/ui/00default.xml
index 4826421..95ce747 100644
--- a/ui/00default.xml
+++ b/ui/00default.xml
@@ -75,7 +75,9 @@
+