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 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 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 61 struct _v3270FTProgressClass
... ... @@ -73,15 +85,24 @@ static void v3270FTProgress_class_init(v3270FTProgressClass *klass)
73 85  
74 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 95 // Create From/to fields
79 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 102 gtk_grid_set_column_spacing(grid,5);
84 103 gtk_grid_set_row_spacing(grid,5);
  104 + gtk_widget_set_hexpand(GTK_WIDGET(grid),TRUE);
  105 +
85 106  
86 107 for(f=0;f<TEXT_COUNT;f++)
87 108 {
... ... @@ -94,12 +115,62 @@ static void v3270FTProgress_init(v3270FTProgress *widget)
94 115  
95 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 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 178 {
108 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 81 LIB3270_EXPORT void v3270_ft_dialog_set_tso(GtkWidget *widget,gboolean flag);
82 82  
83 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 91 G_END_DECLS
... ...