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 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 132 #define ENTRY_FILENAME_LENGTH FILENAME_MAX
113 133 struct v3270ft_entry {
... ... @@ -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 159 enum V3270FTPROGRESS_SIGNAL {
153 160  
154 161 V3270FTPROGRESS_SIGNAL_SUCCESS,
... ...
src/filetransfer/settings.c
... ... @@ -64,7 +64,6 @@
64 64 GtkEntry * remote;
65 65 } file;
66 66  
67   -
68 67 struct
69 68 {
70 69 LIB3270_FT_OPTION options;
... ...
src/filetransfer/tables.c
... ... @@ -214,3 +214,12 @@ const struct v3270_activity_list_option v3270_activity_list_options[] =
214 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 48  
49 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 51 // http://www3.rocketsoftware.com/bluezone/help/v42/en/bz/DISPLAY/IND$FILE/IND$FILE_Technical_Reference.htm
91 52  
92 53 static const struct _ftmsg {
... ... @@ -390,10 +351,10 @@ static GtkWidget * create_text(guint width) {
390 351  
391 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 359 gtk_widget_set_halign(widget,GTK_ALIGN_START);
399 360 gtk_widget_set_valign(widget,GTK_ALIGN_CENTER);
... ...
src/filetransfer/worker.c 0 → 100644
... ... @@ -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 146  
147 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 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 149  
150 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 159 gtk_widget_show_all(dialog);
155 160 gtk_dialog_run(GTK_DIALOG(dialog));
... ...