Commit a9dc88399878c72da637cc47251f0f4961b5a2c5

Authored by perry.werneck@gmail.com
1 parent 891467e0

Montando novos diálogos para transferência de arquivos

src/pw3270/ft/ftprogress.c
@@ -40,10 +40,22 @@ @@ -40,10 +40,22 @@
40 TEXT_COUNT 40 TEXT_COUNT
41 }; 41 };
42 42
  43 + enum _value
  44 + {
  45 + VALUE_TOTAL,
  46 + VALUE_CURRENT,
  47 + VALUE_SPEED,
  48 + VALUE_ETA,
  49 +
  50 + VALUE_COUNT
  51 + };
  52 +
43 struct _v3270FTProgress 53 struct _v3270FTProgress
44 { 54 {
45 - GtkBin parent;  
46 - GtkWidget * text[TEXT_COUNT]; 55 + GtkBin parent;
  56 + GtkLabel * text[TEXT_COUNT];
  57 + GtkLabel * value[VALUE_COUNT];
  58 + GtkProgressBar * progress;
47 }; 59 };
48 60
49 struct _v3270FTProgressClass 61 struct _v3270FTProgressClass
@@ -73,15 +85,24 @@ static void v3270FTProgress_class_init(v3270FTProgressClass *klass) @@ -73,15 +85,24 @@ static void v3270FTProgress_class_init(v3270FTProgressClass *klass)
73 85
74 static void v3270FTProgress_init(v3270FTProgress *widget) 86 static void v3270FTProgress_init(v3270FTProgress *widget)
75 { 87 {
76 - int f; 88 + GtkWidget * frame;
  89 + GtkGrid * grid;
  90 + int f;
  91 + GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,3);
  92 +
  93 + gtk_container_set_border_width(GTK_CONTAINER(box),3);
77 94
78 // Create From/to fields 95 // Create From/to fields
79 static const gchar * label[TEXT_COUNT] = { N_("From"), N_("To"), N_("Status") }; 96 static const gchar * label[TEXT_COUNT] = { N_("From"), N_("To"), N_("Status") };
80 - GtkWidget * frame = gtk_frame_new( _( "Informations" ) );  
81 - GtkGrid * grid = GTK_GRID(gtk_grid_new());  
82 97
  98 + frame = gtk_frame_new( _( "Informations" ) );
  99 + grid = GTK_GRID(gtk_grid_new());
  100 +
  101 + gtk_container_set_border_width(GTK_CONTAINER(grid),3);
83 gtk_grid_set_column_spacing(grid,5); 102 gtk_grid_set_column_spacing(grid,5);
84 gtk_grid_set_row_spacing(grid,5); 103 gtk_grid_set_row_spacing(grid,5);
  104 + gtk_widget_set_hexpand(GTK_WIDGET(grid),TRUE);
  105 +
85 106
86 for(f=0;f<TEXT_COUNT;f++) 107 for(f=0;f<TEXT_COUNT;f++)
87 { 108 {
@@ -94,12 +115,62 @@ static void v3270FTProgress_init(v3270FTProgress *widget) @@ -94,12 +115,62 @@ static void v3270FTProgress_init(v3270FTProgress *widget)
94 115
95 gtk_grid_attach(grid,l,0,f,1,1); 116 gtk_grid_attach(grid,l,0,f,1,1);
96 117
  118 + widget->text[f] = GTK_LABEL(gtk_label_new("-"));
  119 + gtk_label_set_ellipsize(widget->text[f],PANGO_ELLIPSIZE_START);
  120 + gtk_label_set_width_chars(widget->text[f],50);
  121 + gtk_misc_set_alignment(GTK_MISC(widget->text[f]),0,0);
  122 + gtk_widget_set_hexpand(GTK_WIDGET(widget->text[f]),TRUE);
  123 +
  124 + gtk_grid_attach(grid,GTK_WIDGET(widget->text[f]),1,f,1,1);
  125 +
  126 +
97 } 127 }
98 gtk_container_add(GTK_CONTAINER(frame),GTK_WIDGET(grid)); 128 gtk_container_add(GTK_CONTAINER(frame),GTK_WIDGET(grid));
  129 + gtk_container_add(GTK_CONTAINER(box),GTK_WIDGET(frame));
  130 +
  131 + // Progress info
  132 + static const gchar *progressLabel[VALUE_COUNT] = { N_( "Total" ), N_( "Current" ), N_( "Speed" ), N_( "ETA" ) };
  133 +
  134 + frame = gtk_frame_new( _( "Progress" ) );
  135 + grid = GTK_GRID(gtk_grid_new());
  136 +
  137 + gtk_container_set_border_width(GTK_CONTAINER(grid),3);
  138 + gtk_grid_set_column_spacing(grid,5);
  139 + gtk_grid_set_row_spacing(grid,5);
  140 + gtk_widget_set_hexpand(GTK_WIDGET(grid),TRUE);
  141 + gtk_grid_set_column_homogeneous(grid,TRUE);
  142 +
  143 + for(f=0;f<VALUE_COUNT;f++)
  144 + {
  145 + GtkWidget * l = gtk_label_new(_("N/A"));
  146 + int r = f/2;
  147 + int c = (f&1)*2;
  148 + gchar * ptr = g_strdup_printf("<b>%s:</b>",gettext(progressLabel[f]));
  149 +
  150 + gtk_label_set_markup(GTK_LABEL(l),ptr);
  151 + gtk_misc_set_alignment(GTK_MISC(l),0,0);
  152 + g_free(ptr);
  153 +
  154 + gtk_grid_attach(grid,l,c,r,1,1);
  155 +
  156 + widget->value[f] = GTK_LABEL(gtk_label_new(_("N/A")));
  157 + gtk_misc_set_alignment(GTK_MISC(widget->value[f]),1,0);
  158 + gtk_widget_set_hexpand(GTK_WIDGET(widget->value[f]),TRUE);
  159 +
  160 + gtk_grid_attach(grid,GTK_WIDGET(widget->value[f]),c+1,r,1,1);
  161 +
  162 +
  163 + }
99 164
  165 + widget->progress = GTK_PROGRESS_BAR(gtk_progress_bar_new());
  166 + gtk_widget_set_hexpand(GTK_WIDGET(widget->progress),TRUE);
  167 + gtk_grid_attach(grid,GTK_WIDGET(widget->progress),0,2,4,1);
100 168
  169 + gtk_container_add(GTK_CONTAINER(frame),GTK_WIDGET(grid));
  170 + gtk_container_add(GTK_CONTAINER(box),GTK_WIDGET(frame));
101 171
102 - gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(frame)); 172 + // Add box on parent widget
  173 + gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(box));
103 174
104 } 175 }
105 176
@@ -107,3 +178,55 @@ GtkWidget * v3270_ft_progress_new(void) @@ -107,3 +178,55 @@ GtkWidget * v3270_ft_progress_new(void)
107 { 178 {
108 return g_object_new(GTK_TYPE_V3270FTProgress, NULL); 179 return g_object_new(GTK_TYPE_V3270FTProgress, NULL);
109 } 180 }
  181 +
  182 +void v3270_ft_progress_update(GtkWidget *widget, unsigned long current, unsigned long total, double kbytes_sec)
  183 +{
  184 + g_return_if_fail(GTK_IS_V3270FTProgress(widget));
  185 +
  186 + v3270FTProgress *obj = GTK_V3270FTProcess(widget);
  187 +
  188 + if(current)
  189 + {
  190 + gchar *str = g_strdup_printf("%ld",current);
  191 + gtk_label_set_text(obj->value[VALUE_CURRENT],str);
  192 + g_free(str);
  193 + }
  194 +
  195 + if(total)
  196 + {
  197 + gchar *str = g_strdup_printf("%ld",total);
  198 + gtk_label_set_text(obj->value[VALUE_TOTAL],str);
  199 + g_free(str);
  200 + }
  201 +
  202 + if(kbytes_sec)
  203 + {
  204 + gchar *str = g_strdup_printf("%ld KB/s",(unsigned long) kbytes_sec);
  205 + gtk_label_set_text(obj->value[VALUE_SPEED],str);
  206 + g_free(str);
  207 + }
  208 +
  209 + if(total && current)
  210 + gtk_progress_bar_set_fraction(obj->progress,((gdouble) current) / ((gdouble) total));
  211 + else
  212 + gtk_progress_bar_pulse(obj->progress);
  213 +
  214 +}
  215 +
  216 +void v3270_ft_progress_set_message(GtkWidget *widget, const gchar *msg)
  217 +{
  218 + g_return_if_fail(GTK_IS_V3270FTProgress(widget));
  219 + gtk_label_set_text(GTK_V3270FTProcess(widget)->text[TEXT_STATUS],msg);
  220 +}
  221 +
  222 +void v3270_ft_progress_set_host_filename(GtkWidget *widget, const gchar *name)
  223 +{
  224 + g_return_if_fail(GTK_IS_V3270FTProgress(widget));
  225 + gtk_label_set_text(GTK_V3270FTProcess(widget)->text[TEXT_HOSTFILE],name);
  226 +}
  227 +
  228 +void v3270_ft_progress_set_local_filename(GtkWidget *widget, const gchar *name)
  229 +{
  230 + g_return_if_fail(GTK_IS_V3270FTProgress(widget));
  231 + gtk_label_set_text(GTK_V3270FTProcess(widget)->text[TEXT_LOCALFILE],name);
  232 +}
src/pw3270/ft/v3270ft.h
@@ -81,6 +81,11 @@ @@ -81,6 +81,11 @@
81 LIB3270_EXPORT void v3270_ft_dialog_set_tso(GtkWidget *widget,gboolean flag); 81 LIB3270_EXPORT void v3270_ft_dialog_set_tso(GtkWidget *widget,gboolean flag);
82 82
83 LIB3270_EXPORT GtkWidget * v3270_ft_progress_new(void); 83 LIB3270_EXPORT GtkWidget * v3270_ft_progress_new(void);
  84 + LIB3270_EXPORT void v3270_ft_progress_update(GtkWidget *widget, unsigned long current, unsigned long total, double kbytes_sec);
  85 + LIB3270_EXPORT void v3270_ft_progress_set_message(GtkWidget *widget, const gchar *msg);
  86 + LIB3270_EXPORT void v3270_ft_progress_set_host_filename(GtkWidget *widget, const gchar *name);
  87 + LIB3270_EXPORT void v3270_ft_progress_set_local_filename(GtkWidget *widget, const gchar *name);
  88 +
84 89
85 90
86 G_END_DECLS 91 G_END_DECLS