Commit deb094c06c7a5bb97c450acc2173f4bcfd1b454e
1 parent
2ea451a5
Exists in
master
and in
1 other branch
Working on transfer widget.
Showing
2 changed files
with
69 additions
and
3 deletions
Show diff stats
src/filetransfer/marshal
src/filetransfer/worker.c
@@ -35,10 +35,22 @@ | @@ -35,10 +35,22 @@ | ||
35 | 35 | ||
36 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ | 36 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
37 | 37 | ||
38 | + enum _SIGNALS | ||
39 | + { | ||
40 | + V3270_WORKER_ACTIVITY_SIGNAL, ///< @brief Indicates if the list has an activity set. | ||
41 | + | ||
42 | + V3270_WORKER_LAST_SIGNAL | ||
43 | + }; | ||
44 | + | ||
38 | struct _V3270FTWorkerClass | 45 | struct _V3270FTWorkerClass |
39 | { | 46 | { |
40 | GtkGridClass parent_class; | 47 | GtkGridClass parent_class; |
41 | 48 | ||
49 | + struct | ||
50 | + { | ||
51 | + void (*activity)(GtkWidget *, GObject *); | ||
52 | + } signal; | ||
53 | + | ||
42 | }; | 54 | }; |
43 | 55 | ||
44 | struct _V3270FTWorker | 56 | struct _V3270FTWorker |
@@ -46,23 +58,52 @@ | @@ -46,23 +58,52 @@ | ||
46 | GtkGrid parent; | 58 | GtkGrid parent; |
47 | 59 | ||
48 | GtkProgressBar * pbar; ///< @brief Progress bar. | 60 | GtkProgressBar * pbar; ///< @brief Progress bar. |
49 | - GObject * activity; ///< @brief File transfer activity; | 61 | + GObject * activity; ///< @brief File transfer activity. |
62 | + GSource * pulse; ///< @brief Process pulse. | ||
50 | 63 | ||
51 | GtkEntry * field[PROGRESS_FIELD_COUNT]; ///< @brief Transfer information widgets. | 64 | GtkEntry * field[PROGRESS_FIELD_COUNT]; ///< @brief Transfer information widgets. |
52 | 65 | ||
53 | - | ||
54 | }; | 66 | }; |
55 | 67 | ||
56 | G_DEFINE_TYPE(V3270FTWorker, V3270FTWorker, GTK_TYPE_GRID); | 68 | G_DEFINE_TYPE(V3270FTWorker, V3270FTWorker, GTK_TYPE_GRID); |
57 | 69 | ||
70 | + static guint v3270_worker_signals[V3270_WORKER_LAST_SIGNAL] = { 0 }; | ||
71 | + | ||
58 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 72 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
59 | 73 | ||
74 | + static gboolean do_pulse(V3270FTWorker *worker) { | ||
75 | + gtk_progress_bar_pulse(worker->pbar); | ||
76 | + return TRUE; | ||
77 | + } | ||
78 | + | ||
79 | + static void pulse_start(V3270FTWorker *worker) | ||
80 | + { | ||
81 | + debug("%s(%p)",__FUNCTION__,worker->pulse); | ||
82 | + if(!worker->pulse) | ||
83 | + { | ||
84 | + worker->pulse = g_timeout_source_new(100); | ||
85 | + g_source_set_callback(worker->pulse,(GSourceFunc) do_pulse,worker,NULL); | ||
86 | + g_source_attach(worker->pulse,NULL); | ||
87 | + } | ||
88 | + } | ||
89 | + | ||
90 | + static void pulse_stop(V3270FTWorker *worker) | ||
91 | + { | ||
92 | + if(worker->pulse) | ||
93 | + { | ||
94 | + g_source_destroy(worker->pulse); | ||
95 | + worker->pulse = NULL; | ||
96 | + } | ||
97 | + } | ||
98 | + | ||
60 | static void finalize(GObject *object) | 99 | static void finalize(GObject *object) |
61 | { | 100 | { |
62 | debug("%s",__FUNCTION__); | 101 | debug("%s",__FUNCTION__); |
63 | 102 | ||
64 | V3270FTWorker * worker = GTK_V3270_FT_WORKER(object); | 103 | V3270FTWorker * worker = GTK_V3270_FT_WORKER(object); |
65 | 104 | ||
105 | + pulse_stop(worker); | ||
106 | + | ||
66 | if(worker->activity) | 107 | if(worker->activity) |
67 | { | 108 | { |
68 | g_object_unref(worker->activity); | 109 | g_object_unref(worker->activity); |
@@ -73,9 +114,28 @@ | @@ -73,9 +114,28 @@ | ||
73 | 114 | ||
74 | } | 115 | } |
75 | 116 | ||
117 | + static void V3270FTWorker_activity(GtkWidget G_GNUC_UNUSED(*widget), GObject G_GNUC_UNUSED(*activity)) | ||
118 | + { | ||
119 | + debug("%s",__FUNCTION__); | ||
120 | + } | ||
121 | + | ||
76 | static void V3270FTWorker_class_init(G_GNUC_UNUSED V3270FTWorkerClass *klass) | 122 | static void V3270FTWorker_class_init(G_GNUC_UNUSED V3270FTWorkerClass *klass) |
77 | { | 123 | { |
78 | - G_OBJECT_CLASS(klass)->finalize = finalize; | 124 | + GObjectClass * gobject_class = G_OBJECT_CLASS(klass); |
125 | + | ||
126 | + gobject_class->finalize = finalize; | ||
127 | + | ||
128 | + klass->signal.activity = V3270FTWorker_activity; | ||
129 | + | ||
130 | + v3270_worker_signals[V3270_WORKER_ACTIVITY_SIGNAL] = | ||
131 | + g_signal_new( "activity", | ||
132 | + G_OBJECT_CLASS_TYPE (gobject_class), | ||
133 | + G_SIGNAL_RUN_FIRST, | ||
134 | + G_STRUCT_OFFSET (V3270FTWorkerClass, signal.activity), | ||
135 | + NULL, NULL, | ||
136 | + v3270ft_VOID__VOID_OBJECT, | ||
137 | + G_TYPE_NONE, 1, G_TYPE_OBJECT); | ||
138 | + | ||
79 | } | 139 | } |
80 | 140 | ||
81 | static GtkWidget * create_label(V3270FTWorker *widget, const gchar *text, gint left, gint top) | 141 | static GtkWidget * create_label(V3270FTWorker *widget, const gchar *text, gint left, gint top) |
@@ -206,5 +266,10 @@ | @@ -206,5 +266,10 @@ | ||
206 | gtk_entry_set_text(worker->field[ix],""); | 266 | gtk_entry_set_text(worker->field[ix],""); |
207 | } | 267 | } |
208 | 268 | ||
269 | + gtk_progress_bar_set_text(worker->pbar,_("Starting transfer")); | ||
270 | + pulse_start(worker); | ||
271 | + | ||
272 | + g_signal_emit(widget, v3270_worker_signals[V3270_WORKER_ACTIVITY_SIGNAL], 0, worker->activity); | ||
273 | + | ||
209 | } | 274 | } |
210 | 275 |