Commit 1e84a9ded2c31632b58a568d7ff463ef68c0e1d7

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

Creating file transfer worker widget.

src/filetransfer/private.h
@@ -104,10 +104,30 @@ @@ -104,10 +104,30 @@
104 const gchar * value; 104 const gchar * value;
105 }; 105 };
106 106
107 - G_GNUC_INTERNAL extern const struct v3270ft_option ft_option[];  
108 - G_GNUC_INTERNAL extern const struct v3270ft_type ft_type[];  
109 - G_GNUC_INTERNAL extern const struct v3270ft_value ft_value[];  
110 - G_GNUC_INTERNAL extern const struct v3270_activity_list_option v3270_activity_list_options[]; 107 + struct v3270_ft_worker_field
  108 + {
  109 + const gchar *label;
  110 + const gchar *tooltip;
  111 + };
  112 +
  113 + typedef enum progress_field {
  114 +
  115 + PROGRESS_FIELD_LOCAL,
  116 + PROGRESS_FIELD_REMOTE,
  117 + PROGRESS_FIELD_TOTAL,
  118 + PROGRESS_FIELD_CURRENT,
  119 + PROGRESS_FIELD_SPEED,
  120 + PROGRESS_FIELD_ETA,
  121 +
  122 + PROGRESS_FIELD_COUNT
  123 +
  124 + } PROGRESS_FIELD;
  125 +
  126 + G_GNUC_INTERNAL extern const struct v3270ft_option ft_option[];
  127 + G_GNUC_INTERNAL extern const struct v3270ft_type ft_type[];
  128 + G_GNUC_INTERNAL extern const struct v3270ft_value ft_value[];
  129 + G_GNUC_INTERNAL extern const struct v3270_activity_list_option v3270_activity_list_options[];
  130 + G_GNUC_INTERNAL extern const struct v3270_ft_worker_field v3270_ft_worker_fields[PROGRESS_FIELD_COUNT];
111 131
112 #define ENTRY_FILENAME_LENGTH FILENAME_MAX 132 #define ENTRY_FILENAME_LENGTH FILENAME_MAX
113 struct v3270ft_entry { 133 struct v3270ft_entry {
@@ -136,19 +156,6 @@ @@ -136,19 +156,6 @@
136 156
137 }; 157 };
138 158
139 - typedef enum progress_field {  
140 -  
141 - PROGRESS_FIELD_LOCAL,  
142 - PROGRESS_FIELD_REMOTE,  
143 - PROGRESS_FIELD_TOTAL,  
144 - PROGRESS_FIELD_CURRENT,  
145 - PROGRESS_FIELD_SPEED,  
146 - PROGRESS_FIELD_ETA,  
147 -  
148 - PROGRESS_FIELD_COUNT  
149 -  
150 - } PROGRESS_FIELD;  
151 -  
152 enum V3270FTPROGRESS_SIGNAL { 159 enum V3270FTPROGRESS_SIGNAL {
153 160
154 V3270FTPROGRESS_SIGNAL_SUCCESS, 161 V3270FTPROGRESS_SIGNAL_SUCCESS,
src/filetransfer/settings.c
@@ -64,7 +64,6 @@ @@ -64,7 +64,6 @@
64 GtkEntry * remote; 64 GtkEntry * remote;
65 } file; 65 } file;
66 66
67 -  
68 struct 67 struct
69 { 68 {
70 LIB3270_FT_OPTION options; 69 LIB3270_FT_OPTION options;
src/filetransfer/tables.c
@@ -214,3 +214,12 @@ const struct v3270_activity_list_option v3270_activity_list_options[] = @@ -214,3 +214,12 @@ const struct v3270_activity_list_option v3270_activity_list_options[] =
214 { 0, NULL, NULL } 214 { 0, NULL, NULL }
215 }; 215 };
216 216
  217 +const struct v3270_ft_worker_field v3270_ft_worker_fields[PROGRESS_FIELD_COUNT] =
  218 +{
  219 + { N_("Local:"), N_("Path and name of the local file") },
  220 + { N_("Remote:"), N_("The name of the file in the host") },
  221 + { N_("Total:"), N_("Total bytes to transfer") },
  222 + { N_("Current:"), N_("Current transfer position") },
  223 + { N_("Speed:"), N_("Transfer speed") },
  224 + { N_("ETA:"), N_("Estimated transfer arrival") }
  225 +};
src/filetransfer/v3270ftprogress.c
@@ -48,45 +48,6 @@ @@ -48,45 +48,6 @@
48 48
49 guint v3270ftprogress_signal[V3270FTPROGRESS_SIGNAL_COUNT] = { 0 }; 49 guint v3270ftprogress_signal[V3270FTPROGRESS_SIGNAL_COUNT] = { 0 };
50 50
51 -static const struct _field {  
52 -  
53 - const gchar *label;  
54 - const gchar *tooltip;  
55 -  
56 -} field[PROGRESS_FIELD_COUNT] = {  
57 -  
58 - {  
59 - N_("Local:"),  
60 - N_("Path and name of the local file")  
61 - },  
62 -  
63 - {  
64 - N_("Remote:"),  
65 - N_("The name of the file in the host")  
66 - },  
67 -  
68 - {  
69 - N_("Total:"),  
70 - N_("Total bytes to transfer")  
71 - },  
72 -  
73 - {  
74 - N_("Current:"),  
75 - N_("Current transfer position")  
76 - },  
77 -  
78 - {  
79 - N_("Speed:"),  
80 - N_("Transfer speed")  
81 - },  
82 -  
83 - {  
84 - N_("ETA:"),  
85 - N_("Estimated transfer arrival")  
86 - },  
87 -  
88 -};  
89 -  
90 // http://www3.rocketsoftware.com/bluezone/help/v42/en/bz/DISPLAY/IND$FILE/IND$FILE_Technical_Reference.htm 51 // http://www3.rocketsoftware.com/bluezone/help/v42/en/bz/DISPLAY/IND$FILE/IND$FILE_Technical_Reference.htm
91 52
92 static const struct _ftmsg { 53 static const struct _ftmsg {
@@ -390,10 +351,10 @@ static GtkWidget * create_text(guint width) { @@ -390,10 +351,10 @@ static GtkWidget * create_text(guint width) {
390 351
391 static GtkWidget * create_label(int id, GtkWidget *entry) { 352 static GtkWidget * create_label(int id, GtkWidget *entry) {
392 353
393 - GtkWidget * widget = gtk_label_new(gettext(field[id].label)); 354 + GtkWidget * widget = gtk_label_new(gettext(v3270_ft_worker_fields[id].label));
394 355
395 - gtk_widget_set_tooltip_markup(widget,field[id].tooltip);  
396 - gtk_widget_set_tooltip_markup(entry,field[id].tooltip); 356 + gtk_widget_set_tooltip_markup(widget,v3270_ft_worker_fields[id].tooltip);
  357 + gtk_widget_set_tooltip_markup(entry,v3270_ft_worker_fields[id].tooltip);
397 358
398 gtk_widget_set_halign(widget,GTK_ALIGN_START); 359 gtk_widget_set_halign(widget,GTK_ALIGN_START);
399 gtk_widget_set_valign(widget,GTK_ALIGN_CENTER); 360 gtk_widget_set_valign(widget,GTK_ALIGN_CENTER);
src/filetransfer/worker.c 0 → 100644
@@ -0,0 +1,170 @@ @@ -0,0 +1,170 @@
  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 <string.h>
  31 + #include <internals.h>
  32 + #include "private.h"
  33 + #include "marshal.h"
  34 + #include <v3270/filetransfer.h>
  35 +
  36 +/*--[ Widget definition ]----------------------------------------------------------------------------*/
  37 +
  38 + struct _V3270FTWorkerClass
  39 + {
  40 + GtkGridClass parent_class;
  41 +
  42 + };
  43 +
  44 + struct _V3270FTWorker
  45 + {
  46 + GtkGrid parent;
  47 +
  48 + GtkProgressBar * pbar; ///< @brief Progress bar.
  49 +
  50 + GtkEntry * field[PROGRESS_FIELD_COUNT]; ///< @brief Transfer information widgets.
  51 +
  52 +
  53 + };
  54 +
  55 + G_DEFINE_TYPE(V3270FTWorker, V3270FTWorker, GTK_TYPE_GRID);
  56 +
  57 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  58 +
  59 + static void finalize(GObject *object)
  60 + {
  61 + debug("%s",__FUNCTION__);
  62 +
  63 + // V3270FTWorker * worker = GTK_V3270_FT_WORKER(object);
  64 +
  65 +
  66 + G_OBJECT_CLASS(V3270FTWorker_parent_class)->finalize(object);
  67 +
  68 + }
  69 +
  70 + static void V3270FTWorker_class_init(G_GNUC_UNUSED V3270FTWorkerClass *klass)
  71 + {
  72 + G_OBJECT_CLASS(klass)->finalize = finalize;
  73 + }
  74 +
  75 + static GtkWidget * create_label(V3270FTWorker *widget, const gchar *text, gint left, gint top)
  76 + {
  77 + GtkWidget * label = gtk_label_new(text);
  78 + gtk_widget_set_halign(GTK_WIDGET(label),GTK_ALIGN_END);
  79 + gtk_grid_attach(GTK_GRID(widget),label,left,top,1,1);
  80 + return label;
  81 + }
  82 +
  83 + static GtkWidget * create_entry(V3270FTWorker *widget, const gchar *text, GtkWidget *entry, gint left, gint top, gint width)
  84 + {
  85 + GtkWidget * label = create_label(widget,text,left,top);
  86 + gtk_grid_attach(GTK_GRID(widget),entry,left+1,top,width,1);
  87 + gtk_label_set_mnemonic_widget(GTK_LABEL(label),entry);
  88 + gtk_widget_set_hexpand(entry,TRUE);
  89 + return entry;
  90 + }
  91 +
  92 + static void create_field(V3270FTWorker *widget, PROGRESS_FIELD id, GtkWidget *grid, gint top)
  93 + {
  94 + GtkWidget * label = gtk_label_new(gettext(v3270_ft_worker_fields[id].label));
  95 + gtk_widget_set_halign(GTK_WIDGET(label),GTK_ALIGN_END);
  96 + gtk_grid_attach(GTK_GRID(grid),label,0,top,1,1);
  97 +
  98 + widget->field[id] = GTK_ENTRY(gtk_entry_new());
  99 +
  100 + gtk_grid_attach(GTK_GRID(grid),GTK_WIDGET(widget->field[id]),1,top,1,1);
  101 +
  102 + }
  103 +
  104 + static void V3270FTWorker_init(V3270FTWorker *widget)
  105 + {
  106 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  107 + gtk_grid_set_row_spacing(GTK_GRID(widget),6);
  108 + gtk_grid_set_column_spacing(GTK_GRID(widget),12);
  109 +
  110 + widget->field[PROGRESS_FIELD_LOCAL] = GTK_ENTRY(create_entry(widget,gettext(v3270_ft_worker_fields[PROGRESS_FIELD_LOCAL].label),gtk_entry_new(),0,0,9));
  111 + widget->field[PROGRESS_FIELD_REMOTE] = GTK_ENTRY(create_entry(widget,gettext(v3270_ft_worker_fields[PROGRESS_FIELD_REMOTE].label),gtk_entry_new(),0,1,9));
  112 +
  113 + // Create status elements
  114 + GtkWidget * views = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  115 + gtk_box_set_homogeneous(GTK_BOX(views),TRUE);
  116 + gtk_grid_attach(GTK_GRID(widget),views,0,2,10,1);
  117 + g_object_set(G_OBJECT(views),"margin-top",8,NULL);
  118 + g_object_set(G_OBJECT(views),"margin-botton",8,NULL);
  119 +
  120 + {
  121 + // Left options
  122 + GtkWidget * grid = v3270_box_pack_start(views,v3270_dialog_create_grid(GTK_ALIGN_START),TRUE,TRUE,0);
  123 +
  124 + create_field(widget, PROGRESS_FIELD_TOTAL, grid,0);
  125 + create_field(widget, PROGRESS_FIELD_SPEED, grid,1);
  126 + }
  127 +
  128 + {
  129 + // Right options
  130 + GtkWidget * grid = v3270_box_pack_start(views,v3270_dialog_create_grid(GTK_ALIGN_END),TRUE,TRUE,0);
  131 +
  132 + create_field(widget, PROGRESS_FIELD_CURRENT, grid,0);
  133 + create_field(widget, PROGRESS_FIELD_ETA, grid,1);
  134 +
  135 + }
  136 +
  137 + {
  138 + // Setup fields tooltips
  139 + size_t id;
  140 +
  141 + for(id = 0; id < PROGRESS_FIELD_COUNT; id++)
  142 + {
  143 + gtk_widget_set_tooltip_markup(GTK_WIDGET(widget->field[id]),v3270_ft_worker_fields[id].tooltip);
  144 + gtk_widget_set_can_focus(GTK_WIDGET(widget->field[id]),FALSE);
  145 + gtk_editable_set_editable(GTK_EDITABLE(widget->field[id]),FALSE);
  146 + }
  147 +
  148 + for(id = PROGRESS_FIELD_TOTAL; id < PROGRESS_FIELD_COUNT; id++)
  149 + {
  150 + gtk_entry_set_width_chars(widget->field[id],15);
  151 + }
  152 +
  153 + }
  154 +
  155 + // Create progress bar
  156 + widget->pbar = GTK_PROGRESS_BAR(gtk_progress_bar_new());
  157 + gtk_progress_bar_set_show_text(widget->pbar,TRUE);
  158 + gtk_progress_bar_set_text(widget->pbar,_("No transfer"));
  159 +
  160 + g_object_set(G_OBJECT(widget->pbar),"margin-top",8,NULL);
  161 +
  162 + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->pbar),0,3,10,1);
  163 +
  164 + }
  165 +
  166 + LIB3270_EXPORT GtkWidget * v3270_ft_worker_new()
  167 + {
  168 + return GTK_WIDGET(g_object_new(GTK_TYPE_V3270_FT_WORKER, NULL));
  169 + }
  170 +
src/include/v3270/filetransfer.h
@@ -146,4 +146,17 @@ @@ -146,4 +146,17 @@
146 146
147 G_END_DECLS 147 G_END_DECLS
148 148
  149 + // File transfer widget
  150 + #define GTK_TYPE_V3270_FT_WORKER (V3270FTWorker_get_type ())
  151 + #define GTK_V3270_FT_WORKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_FT_WORKER, V3270FTWorker))
  152 + #define GTK_V3270_FT_WORKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_FT_WORKER, V3270FTWorkerClass))
  153 + #define GTK_IS_V3270_FT_WORKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_FT_WORKER))
  154 + #define GTK_IS_V3270_FT_WORKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270_FT_WORKER))
  155 + #define GTK_V3270_FT_WORKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270_FT_WORKER, V3270FTWorkerClass))
  156 +
  157 + typedef struct _V3270FTWorker V3270FTWorker;
  158 + typedef struct _V3270FTWorkerClass V3270FTWorkerClass;
  159 +
  160 + LIB3270_EXPORT GtkWidget * v3270_ft_worker_new();
  161 +
149 #endif // V3270FT_H_INCLUDED 162 #endif // V3270FT_H_INCLUDED
src/testprogram/testprogram.c
@@ -149,7 +149,12 @@ static void disconnect_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *term @@ -149,7 +149,12 @@ static void disconnect_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *term
149 149
150 static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) 150 static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
151 { 151 {
152 - GtkWidget * dialog = v3270_ft_dialog_new(terminal); 152 + GtkWidget * dialog = v3270_dialog_new(terminal, _("test"), _("test"));
  153 + GtkWidget * worker = v3270_ft_worker_new();
  154 + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),worker,TRUE,TRUE,2);
  155 +
  156 + // GtkWidget * dialog = v3270ftprogress_new();
  157 + // GtkWidget * dialog = v3270_ft_dialog_new(terminal);
153 158
154 gtk_widget_show_all(dialog); 159 gtk_widget_show_all(dialog);
155 gtk_dialog_run(GTK_DIALOG(dialog)); 160 gtk_dialog_run(GTK_DIALOG(dialog));