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 |