Commit ac72231fa19a0b8e24be90677b623e8b983b7433

Authored by Perry Werneck
1 parent 8faac591
Exists in master and in 1 other branch develop

Adding compatibility FT dialog.

src/dialogs/transfer.c 0 → 100644
@@ -0,0 +1,135 @@ @@ -0,0 +1,135 @@
  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., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - 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 + *
  28 + */
  29 +
  30 + #include <config.h>
  31 +
  32 + #define ENABLE_NLS
  33 + #define GETTEXT_PACKAGE PACKAGE_NAME
  34 +
  35 + #include <gtk/gtk.h>
  36 + #include <libintl.h>
  37 + #include <glib/gi18n.h>
  38 + #include <internals.h>
  39 +
  40 + #include <v3270.h>
  41 + #include <v3270/filetransfer.h>
  42 +
  43 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  44 +
  45 +static void header_on_state_changed(GtkWidget *worker, guint state, const gchar *msg, GtkDialog *dialog)
  46 +{
  47 + debug("%s(%s)",__FUNCTION__,msg);
  48 + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(dialog)),msg);
  49 +}
  50 +
  51 +static void transfer_success(GtkWidget *worker, const gchar *msg, const gchar *description, GtkDialog *dialog)
  52 +{
  53 + debug("%s(\"%s\",\"%s\")",__FUNCTION__,msg,description);
  54 +
  55 +}
  56 +
  57 +static void transfer_failed(GtkWidget *worker, const gchar *msg, const gchar *description, GtkDialog *dialog)
  58 +{
  59 + debug("%s(\"%s\",\"%s\")",__FUNCTION__,msg,description);
  60 +
  61 +}
  62 +
  63 +LIB3270_EXPORT gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft)
  64 +{
  65 + // Create activity
  66 + GObject * activity = v3270_ft_activity_new();
  67 +
  68 + v3270_ft_activity_set_local_filename(activity,local);
  69 + v3270_ft_activity_set_remote_filename(activity,remote);
  70 + v3270_ft_activity_set_options(activity,options);
  71 +
  72 + v3270_ft_activity_set_value(activity,LIB3270_FT_VALUE_LRECL, lrecl);
  73 + v3270_ft_activity_set_value(activity,LIB3270_FT_VALUE_BLKSIZE, blksize);
  74 + v3270_ft_activity_set_value(activity,LIB3270_FT_VALUE_PRIMSPACE, primspace);
  75 + v3270_ft_activity_set_value(activity,LIB3270_FT_VALUE_SECSPACE, secspace);
  76 + v3270_ft_activity_set_value(activity,LIB3270_FT_VALUE_DFT, dft);
  77 +
  78 + // Create worker
  79 + GtkWidget * worker = v3270_ft_worker_new();
  80 + v3270_ft_worker_set_session(worker,v3270_get_session(widget));
  81 + v3270_ft_worker_set_activity(worker,activity);
  82 +
  83 + // Create dialog
  84 +#if GTK_CHECK_VERSION(3,12,0)
  85 +
  86 + gboolean use_header;
  87 + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);
  88 +
  89 + GtkWidget * dialog =
  90 + GTK_WIDGET(g_object_new(
  91 + GTK_TYPE_DIALOG,
  92 + "use-header-bar", (use_header ? 1 : 0),
  93 + NULL
  94 + ));
  95 +
  96 + gtk_window_set_title(GTK_WINDOW(dialog),(options & LIB3270_FT_OPTION_RECEIVE) ? _( "Receiving file" ) : _( "Sending file" ));
  97 +
  98 + if(use_header)
  99 + {
  100 + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(dialog)),_("Starting transfer"));
  101 + g_signal_connect(worker,"ft-state-changed",G_CALLBACK(header_on_state_changed), dialog);
  102 + }
  103 +
  104 +#else
  105 +
  106 + GtkWidget * dialog = gtk_dialog_new_with_buttons(
  107 + (options & LIB3270_FT_OPTION_RECEIVE) ? _( "Receiving file" ) : _( "Sending file" ),
  108 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  109 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  110 + _( "_Close" ), GTK_RESPONSE_CANCEL,
  111 + NULL
  112 + );
  113 +
  114 +#endif // GTK(3,12,0)
  115 +
  116 + gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(widget)));
  117 + gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
  118 + gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
  119 +
  120 + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),18);
  121 +
  122 + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),worker,TRUE,TRUE,2);
  123 +
  124 + // Start transfer
  125 + g_signal_connect(worker,"failed",G_CALLBACK(transfer_failed), dialog);
  126 + g_signal_connect(worker,"success",G_CALLBACK(transfer_success), dialog);
  127 + v3270_ft_worker_start(worker);
  128 +
  129 + gtk_widget_show_all(dialog);
  130 + int rc = gtk_dialog_run(GTK_DIALOG(dialog));
  131 + gtk_widget_destroy(dialog);
  132 +
  133 + return rc;
  134 +}
  135 +
src/filetransfer/worker.c
@@ -165,6 +165,17 @@ @@ -165,6 +165,17 @@
165 G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER 165 G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER
166 ); 166 );
167 167
  168 + v3270_worker_signals[V3270_WORKER_TRANSFER_SUCCESS_SIGNAL] =
  169 + g_signal_new(
  170 + "success",
  171 + G_OBJECT_CLASS_TYPE (gobject_class),
  172 + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
  173 + 0,
  174 + NULL, NULL,
  175 + v3270ft_VOID__POINTER_POINTER,
  176 + G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER
  177 + );
  178 +
168 v3270_worker_signals[V3270_WORKER_TRANSFER_STATE_SIGNAL] = 179 v3270_worker_signals[V3270_WORKER_TRANSFER_STATE_SIGNAL] =
169 g_signal_new( 180 g_signal_new(
170 "ft-state-changed", 181 "ft-state-changed",
src/include/v3270.h
@@ -255,9 +255,6 @@ @@ -255,9 +255,6 @@
255 LIB3270_EXPORT GtkWidget * v3270_security_dialog_new(GtkWidget *widget); 255 LIB3270_EXPORT GtkWidget * v3270_security_dialog_new(GtkWidget *widget);
256 LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget); 256 LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget);
257 257
258 - // File transfer  
259 - LIB3270_EXPORT gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft);  
260 -  
261 // Auxiliary widgets 258 // Auxiliary widgets
262 LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget); 259 LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget);
263 LIB3270_EXPORT void v3270_select_host(GtkWidget *widget); 260 LIB3270_EXPORT void v3270_select_host(GtkWidget *widget);
src/include/v3270/filetransfer.h
@@ -162,4 +162,9 @@ @@ -162,4 +162,9 @@
162 LIB3270_EXPORT void v3270_ft_worker_set_session(GtkWidget *widget, H3270 *hSession); 162 LIB3270_EXPORT void v3270_ft_worker_set_session(GtkWidget *widget, H3270 *hSession);
163 LIB3270_EXPORT int v3270_ft_worker_start(GtkWidget *widget); 163 LIB3270_EXPORT int v3270_ft_worker_start(GtkWidget *widget);
164 164
  165 +
  166 + // File transfer compatibility.
  167 + LIB3270_EXPORT gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft);
  168 +
  169 +
165 #endif // V3270FT_H_INCLUDED 170 #endif // V3270FT_H_INCLUDED
src/testprogram/testprogram.c
@@ -157,6 +157,22 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) @@ -157,6 +157,22 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
157 */ 157 */
158 158
159 // 159 //
  160 + // Test transfer dialog.
  161 + //
  162 + v3270_transfer_file(
  163 + terminal,
  164 + LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_REMAP,
  165 + "/tmp/test.txt",
  166 + "remote_file",
  167 + 0,
  168 + 0,
  169 + 0,
  170 + 0,
  171 + 4096
  172 + );
  173 +
  174 + /*
  175 + //
160 // Test activity 176 // Test activity
161 // 177 //
162 GObject * activity = v3270_ft_activity_new(); 178 GObject * activity = v3270_ft_activity_new();
@@ -164,6 +180,7 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) @@ -164,6 +180,7 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
164 v3270_ft_activity_set_local_filename(activity,"/tmp/test.txt"); 180 v3270_ft_activity_set_local_filename(activity,"/tmp/test.txt");
165 v3270_ft_activity_set_remote_filename(activity,"remote_file"); 181 v3270_ft_activity_set_remote_filename(activity,"remote_file");
166 v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_REMAP); 182 v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_REMAP);
  183 + */
167 184
168 /* 185 /*
169 // 186 //
@@ -173,6 +190,7 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) @@ -173,6 +190,7 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
173 v3270_ft_settings_dialog_append_activity(dialog,activity,NULL); 190 v3270_ft_settings_dialog_append_activity(dialog,activity,NULL);
174 */ 191 */
175 192
  193 + /*
176 // 194 //
177 // Test worker widget 195 // Test worker widget
178 // 196 //
@@ -186,6 +204,8 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) @@ -186,6 +204,8 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
186 gtk_widget_show_all(dialog); 204 gtk_widget_show_all(dialog);
187 gtk_dialog_run(GTK_DIALOG(dialog)); 205 gtk_dialog_run(GTK_DIALOG(dialog));
188 gtk_widget_destroy(dialog); 206 gtk_widget_destroy(dialog);
  207 + */
  208 +
189 } 209 }
190 210
191 static void color_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) 211 static void color_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
@@ -81,6 +81,9 @@ @@ -81,6 +81,9 @@
81 <Unit filename="src/dialogs/tools.c"> 81 <Unit filename="src/dialogs/tools.c">
82 <Option compilerVar="CC" /> 82 <Option compilerVar="CC" />
83 </Unit> 83 </Unit>
  84 + <Unit filename="src/dialogs/transfer.c">
  85 + <Option compilerVar="CC" />
  86 + </Unit>
84 <Unit filename="src/filetransfer/activity.c"> 87 <Unit filename="src/filetransfer/activity.c">
85 <Option compilerVar="CC" /> 88 <Option compilerVar="CC" />
86 </Unit> 89 </Unit>