1 /* gmpc-progress.c generated by valac 0.12.0, the Vala compiler
2  * generated from gmpc-progress.vala, do not modify */
3 
4 /* Gnome Music Player Client (GMPC)
5  * Copyright (C) 2004-2011 Qball Cow <qball@gmpclient.org>
6  * Project homepage: http://gmpclient.org/
7 
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12 
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17 
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22 
23 #include <glib.h>
24 #include <glib-object.h>
25 #include <gtk/gtk.h>
26 #include <gtktransition.h>
27 #include "gmpc-extras.h"
28 #include <gdk/gdk.h>
29 #include <stdlib.h>
30 #include <string.h>
31 #include <float.h>
32 #include <math.h>
33 
34 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
35 #define _g_free0(var) (var = (g_free (var), NULL))
36 
37 struct _GmpcProgressPrivate {
38 	guint total;
39 	guint current;
40 	gboolean do_countdown;
41 	GtkScale* scale;
42 	GtkLabel* label;
43 	gulong set_value_handler;
44 	GtkWindow* tooltip;
45 	GtkLabel* tooltip_label;
46 	gint press;
47 };
48 
49 
50 static gpointer gmpc_progress_parent_class = NULL;
51 
52 #define use_transition TRUE
53 #define GMPC_PROGRESS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GMPC_TYPE_PROGRESS, GmpcProgressPrivate))
54 enum  {
55 	GMPC_PROGRESS_DUMMY_PROPERTY,
56 	GMPC_PROGRESS_HIDE_TEXT
57 };
58 static gboolean gmpc_progress_tooltip_expose_event_callback (GmpcProgress* self, GtkWidget* tooltip, GdkEventExpose* event);
59 static gboolean gmpc_progress_enter_notify_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventCrossing* event);
60 static gboolean _gmpc_progress_tooltip_expose_event_callback_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self);
61 static gboolean gmpc_progress_motion_notify_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventMotion* event);
62 static void gmpc_progress_value_changed (GmpcProgress* self, GtkScale* range);
63 static gboolean gmpc_progress_button_release_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventButton* event);
64 static gboolean gmpc_progress_button_press_event_callback (GmpcProgress* self, GdkEventButton* event, GtkScale* scale);
65 static gboolean gmpc_progress_scroll_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventScroll* event);
66 static GObject * gmpc_progress_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
67 static gboolean _gmpc_progress_scroll_event_callback_gtk_widget_scroll_event (GtkWidget* _sender, GdkEventScroll* event, gpointer self);
68 static gboolean _gmpc_progress_button_release_event_callback_gtk_widget_button_release_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
69 static gboolean _gmpc_progress_motion_notify_event_callback_gtk_widget_motion_notify_event (GtkWidget* _sender, GdkEventMotion* event, gpointer self);
70 static gboolean _gmpc_progress_enter_notify_event_callback_gtk_widget_enter_notify_event (GtkWidget* _sender, GdkEventCrossing* event, gpointer self);
71 static gboolean _gmpc_progress_enter_notify_event_callback_gtk_widget_leave_notify_event (GtkWidget* _sender, GdkEventCrossing* event, gpointer self);
72 static void gmpc_progress_finalize (GObject* obj);
73 static void _vala_gmpc_progress_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
74 static void _vala_gmpc_progress_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
75 
76 
77 /**
78      * Paint a nice box around it
79      */
gmpc_progress_tooltip_expose_event_callback(GmpcProgress * self,GtkWidget * tooltip,GdkEventExpose * event)80 static gboolean gmpc_progress_tooltip_expose_event_callback (GmpcProgress* self, GtkWidget* tooltip, GdkEventExpose* event) {
81 	gboolean result = FALSE;
82 	GtkStyle* _tmp0_ = NULL;
83 	g_return_val_if_fail (self != NULL, FALSE);
84 	g_return_val_if_fail (tooltip != NULL, FALSE);
85 	_tmp0_ = gtk_widget_get_style (tooltip);
86 	gtk_paint_box (_tmp0_, (*event).window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, tooltip, "tooltip", 0, 0, tooltip->allocation.width, tooltip->allocation.height);
87 	result = FALSE;
88 	return result;
89 }
90 
91 
_gmpc_progress_tooltip_expose_event_callback_gtk_widget_expose_event(GtkWidget * _sender,GdkEventExpose * event,gpointer self)92 static gboolean _gmpc_progress_tooltip_expose_event_callback_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self) {
93 	gboolean result;
94 	result = gmpc_progress_tooltip_expose_event_callback (self, _sender, event);
95 	return result;
96 }
97 
98 
gmpc_progress_enter_notify_event_callback(GmpcProgress * self,GtkWidget * scale,GdkEventCrossing * event)99 static gboolean gmpc_progress_enter_notify_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventCrossing* event) {
100 	gboolean result = FALSE;
101 	g_return_val_if_fail (self != NULL, FALSE);
102 	g_return_val_if_fail (scale != NULL, FALSE);
103 	if ((*event).type == GDK_ENTER_NOTIFY) {
104 		GtkWindow* _tmp0_ = NULL;
105 		GtkLabel* _tmp1_ = NULL;
106 		if (self->priv->tooltip != NULL) {
107 			gtk_object_destroy ((GtkObject*) self->priv->tooltip);
108 		}
109 		_tmp0_ = (GtkWindow*) gtk_window_new (GTK_WINDOW_POPUP);
110 		_g_object_unref0 (self->priv->tooltip);
111 		self->priv->tooltip = g_object_ref_sink (_tmp0_);
112 		_tmp1_ = (GtkLabel*) gtk_label_new ("test");
113 		_g_object_unref0 (self->priv->tooltip_label);
114 		self->priv->tooltip_label = g_object_ref_sink (_tmp1_);
115 		gtk_container_add ((GtkContainer*) self->priv->tooltip, (GtkWidget*) self->priv->tooltip_label);
116 		gtk_container_set_border_width ((GtkContainer*) self->priv->tooltip, (guint) 4);
117 		gtk_widget_set_app_paintable ((GtkWidget*) self->priv->tooltip, TRUE);
118 		g_signal_connect_object ((GtkWidget*) self->priv->tooltip, "expose-event", (GCallback) _gmpc_progress_tooltip_expose_event_callback_gtk_widget_expose_event, self, 0);
119 	}
120 	if ((*event).type == GDK_LEAVE_NOTIFY) {
121 		if (self->priv->tooltip != NULL) {
122 			gtk_object_destroy ((GtkObject*) self->priv->tooltip);
123 			_g_object_unref0 (self->priv->tooltip);
124 			self->priv->tooltip = NULL;
125 		}
126 	}
127 	result = FALSE;
128 	return result;
129 }
130 
131 
gmpc_progress_motion_notify_event_callback(GmpcProgress * self,GtkWidget * scale,GdkEventMotion * event)132 static gboolean gmpc_progress_motion_notify_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventMotion* event) {
133 	gboolean result = FALSE;
134 	g_return_val_if_fail (self != NULL, FALSE);
135 	g_return_val_if_fail (scale != NULL, FALSE);
136 	if ((*event).type == GDK_MOTION_NOTIFY) {
137 		if (self->priv->tooltip != NULL) {
138 			gint e_hour = 0;
139 			gint e_minutes = 0;
140 			gint e_seconds = 0;
141 			gint t_hour;
142 			gint t_minutes;
143 			gint t_seconds;
144 			gchar* _tmp0_;
145 			gchar* a;
146 			GtkStyle* _tmp1_ = NULL;
147 			guint p;
148 			guint _tmp2_ = 0U;
149 			gchar* _tmp7_ = NULL;
150 			gchar* _tmp8_;
151 			gchar* _tmp9_;
152 			t_hour = ((gint) self->priv->total) / 3600;
153 			t_minutes = (((gint) self->priv->total) % 3600) / 60;
154 			t_seconds = ((gint) self->priv->total) % 60;
155 			_tmp0_ = g_strdup ("");
156 			a = _tmp0_;
157 			_tmp1_ = gtk_widget_get_style (scale);
158 			p = (guint) (self->priv->total * ((*event).x / ((gdouble) (scale->allocation.width - _tmp1_->xthickness))));
159 			if (p > self->priv->total) {
160 				_tmp2_ = self->priv->total;
161 			} else {
162 				_tmp2_ = p;
163 			}
164 			p = _tmp2_;
165 			if (self->priv->do_countdown) {
166 				gchar* _tmp3_;
167 				_tmp3_ = g_strconcat (a, "-", NULL);
168 				_g_free0 (a);
169 				a = _tmp3_;
170 				p = self->priv->total - p;
171 			}
172 			e_hour = ((gint) p) / 3600;
173 			e_minutes = ((gint) (p % 3600)) / 60;
174 			e_seconds = (gint) (p % 60);
175 			if (e_hour > 0) {
176 				gchar* _tmp4_ = NULL;
177 				gchar* _tmp5_;
178 				gchar* _tmp6_;
179 				_tmp4_ = g_strdup_printf ("%02i:", e_hour);
180 				_tmp5_ = _tmp4_;
181 				_tmp6_ = g_strconcat (a, _tmp5_, NULL);
182 				_g_free0 (a);
183 				a = _tmp6_;
184 				_g_free0 (_tmp5_);
185 			}
186 			_tmp7_ = g_strdup_printf ("%02i:%02i", e_minutes, e_seconds);
187 			_tmp8_ = _tmp7_;
188 			_tmp9_ = g_strconcat (a, _tmp8_, NULL);
189 			_g_free0 (a);
190 			a = _tmp9_;
191 			_g_free0 (_tmp8_);
192 			if (self->priv->total > 0) {
193 				gchar* _tmp10_;
194 				gchar* _tmp14_ = NULL;
195 				gchar* _tmp15_;
196 				gchar* _tmp16_;
197 				_tmp10_ = g_strconcat (a, " - ", NULL);
198 				_g_free0 (a);
199 				a = _tmp10_;
200 				if (t_hour > 0) {
201 					gchar* _tmp11_ = NULL;
202 					gchar* _tmp12_;
203 					gchar* _tmp13_;
204 					_tmp11_ = g_strdup_printf ("%02i:", t_hour);
205 					_tmp12_ = _tmp11_;
206 					_tmp13_ = g_strconcat (a, _tmp12_, NULL);
207 					_g_free0 (a);
208 					a = _tmp13_;
209 					_g_free0 (_tmp12_);
210 				}
211 				_tmp14_ = g_strdup_printf ("%02i:%02i", t_minutes, t_seconds);
212 				_tmp15_ = _tmp14_;
213 				_tmp16_ = g_strconcat (a, _tmp15_, NULL);
214 				_g_free0 (a);
215 				a = _tmp16_;
216 				_g_free0 (_tmp15_);
217 			}
218 			if (self->priv->do_countdown) {
219 				gint _tmp17_;
220 				_tmp17_ = strlen (a);
221 				gtk_label_set_width_chars (self->priv->tooltip_label, (gint) _tmp17_);
222 			} else {
223 				gint _tmp18_;
224 				_tmp18_ = strlen (a);
225 				gtk_label_set_width_chars (self->priv->tooltip_label, ((gint) _tmp18_) + 1);
226 			}
227 			gtk_label_set_text (self->priv->tooltip_label, a);
228 			gtk_widget_show_all ((GtkWidget*) self->priv->tooltip);
229 			gtk_widget_realize ((GtkWidget*) self->priv->tooltip);
230 			gtk_window_move (self->priv->tooltip, ((gint) (*event).x_root) - (((GtkWidget*) self->priv->tooltip)->allocation.width / 2), ((gint) (*event).y_root) + ((GtkWidget*) self->priv->tooltip)->allocation.height);
231 			_g_free0 (a);
232 		}
233 	}
234 	result = FALSE;
235 	return result;
236 }
237 
238 
gmpc_progress_value_changed(GmpcProgress * self,GtkScale * range)239 static void gmpc_progress_value_changed (GmpcProgress* self, GtkScale* range) {
240 	g_return_if_fail (self != NULL);
241 	g_return_if_fail (range != NULL);
242 	if (self->priv->total > 0) {
243 		gdouble _tmp0_;
244 		guint seconds;
245 		_tmp0_ = gtk_range_get_value ((GtkRange*) range);
246 		seconds = (guint) (self->priv->total * _tmp0_);
247 		if (seconds != self->priv->current) {
248 			g_signal_emit_by_name (self, "seek-event", seconds);
249 		}
250 	}
251 }
252 
253 
gmpc_progress_button_release_event_callback(GmpcProgress * self,GtkWidget * scale,GdkEventButton * event)254 static gboolean gmpc_progress_button_release_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventButton* event) {
255 	gboolean result = FALSE;
256 	g_return_val_if_fail (self != NULL, FALSE);
257 	g_return_val_if_fail (scale != NULL, FALSE);
258 	self->priv->press--;
259 	result = FALSE;
260 	return result;
261 }
262 
263 
gmpc_progress_button_press_event_callback(GmpcProgress * self,GdkEventButton * event,GtkScale * scale)264 static gboolean gmpc_progress_button_press_event_callback (GmpcProgress* self, GdkEventButton* event, GtkScale* scale) {
265 	gboolean result = FALSE;
266 	g_return_val_if_fail (self != NULL, FALSE);
267 	g_return_val_if_fail (scale != NULL, FALSE);
268 	self->priv->press++;
269 	if ((*event).type == GDK_BUTTON_PRESS) {
270 		gboolean _tmp0_ = FALSE;
271 		if ((*event).button == 3) {
272 			guint cur;
273 			guint tot;
274 			self->priv->do_countdown = !self->priv->do_countdown;
275 			cur = self->priv->current;
276 			tot = self->priv->total;
277 			self->priv->current = (guint) 0;
278 			self->priv->total = self->priv->current;
279 			gmpc_progress_set_time (self, tot, cur);
280 		}
281 		if ((*event).button == 2) {
282 			_tmp0_ = TRUE;
283 		} else {
284 			_tmp0_ = (*event).button == 1;
285 		}
286 		if (_tmp0_) {
287 			GtkStyle* _tmp1_ = NULL;
288 			guint p;
289 			guint _tmp2_ = 0U;
290 			_tmp1_ = gtk_widget_get_style ((GtkWidget*) scale);
291 			p = (guint) (self->priv->total * ((*event).x / ((gdouble) (((GtkWidget*) scale)->allocation.width - _tmp1_->xthickness))));
292 			if (p > self->priv->total) {
293 				_tmp2_ = self->priv->total;
294 			} else {
295 				_tmp2_ = p;
296 			}
297 			p = _tmp2_;
298 			g_signal_emit_by_name (self, "seek-event", p);
299 			result = TRUE;
300 			return result;
301 		}
302 	} else {
303 		if ((*event).type == GDK_2BUTTON_PRESS) {
304 			gboolean _tmp3_ = FALSE;
305 			if ((*event).button == 2) {
306 				_tmp3_ = TRUE;
307 			} else {
308 				_tmp3_ = (*event).button == 1;
309 			}
310 			if (_tmp3_) {
311 				GtkStyle* _tmp4_ = NULL;
312 				guint p;
313 				guint _tmp5_ = 0U;
314 				_tmp4_ = gtk_widget_get_style ((GtkWidget*) scale);
315 				p = (guint) (self->priv->total * ((*event).x / ((gdouble) (((GtkWidget*) scale)->allocation.width - _tmp4_->xthickness))));
316 				if (p > self->priv->total) {
317 					_tmp5_ = self->priv->total;
318 				} else {
319 					_tmp5_ = p;
320 				}
321 				p = _tmp5_;
322 				g_signal_emit_by_name (self, "seek-event", p);
323 				result = TRUE;
324 				return result;
325 			}
326 		}
327 	}
328 	result = FALSE;
329 	return result;
330 }
331 
332 
gmpc_progress_scroll_event_callback(GmpcProgress * self,GtkWidget * scale,GdkEventScroll * event)333 static gboolean gmpc_progress_scroll_event_callback (GmpcProgress* self, GtkWidget* scale, GdkEventScroll* event) {
334 	gboolean result = FALSE;
335 	g_return_val_if_fail (self != NULL, FALSE);
336 	g_return_val_if_fail (scale != NULL, FALSE);
337 	if ((*event).direction == GDK_SCROLL_UP) {
338 		g_signal_emit_by_name (self, "seek-event", self->priv->current + 5);
339 	} else {
340 		if ((*event).direction == GDK_SCROLL_DOWN) {
341 			g_signal_emit_by_name (self, "seek-event", self->priv->current - 5);
342 		}
343 	}
344 	result = FALSE;
345 	return result;
346 }
347 
348 
gmpc_progress_set_time(GmpcProgress * self,guint total,guint current)349 void gmpc_progress_set_time (GmpcProgress* self, guint total, guint current) {
350 	gboolean _tmp0_ = FALSE;
351 	g_return_if_fail (self != NULL);
352 	if (self->priv->press > 0) {
353 		return;
354 	}
355 	if (self->priv->total != total) {
356 		gtk_widget_set_sensitive ((GtkWidget*) self->priv->scale, total > 0);
357 	}
358 	if (self->priv->total != total) {
359 		_tmp0_ = TRUE;
360 	} else {
361 		_tmp0_ = self->priv->current != current;
362 	}
363 	if (_tmp0_) {
364 		gboolean _tmp1_;
365 		self->priv->total = total;
366 		self->priv->current = current;
367 		g_signal_handler_block (self->priv->scale, self->priv->set_value_handler);
368 		if (self->priv->total > 0) {
369 			gtk_range_set_value ((GtkRange*) self->priv->scale, self->priv->current / ((gdouble) self->priv->total));
370 		} else {
371 			gtk_range_set_value ((GtkRange*) self->priv->scale, 0.0);
372 		}
373 		g_signal_handler_unblock (self->priv->scale, self->priv->set_value_handler);
374 		_tmp1_ = gmpc_progress_get_hide_text (self);
375 		if (_tmp1_ == FALSE) {
376 			gint e_hour = 0;
377 			gint e_minutes = 0;
378 			gint e_seconds = 0;
379 			gint t_hour;
380 			gint t_minutes;
381 			gint t_seconds;
382 			gchar* _tmp2_;
383 			gchar* a;
384 			guint p;
385 			gchar* _tmp7_ = NULL;
386 			gchar* _tmp8_;
387 			gchar* _tmp9_;
388 			t_hour = ((gint) self->priv->total) / 3600;
389 			t_minutes = (((gint) self->priv->total) % 3600) / 60;
390 			t_seconds = ((gint) self->priv->total) % 60;
391 			_tmp2_ = g_strdup ("");
392 			a = _tmp2_;
393 			p = self->priv->current;
394 			if (self->priv->do_countdown) {
395 				gchar* _tmp3_;
396 				p = self->priv->total - self->priv->current;
397 				_tmp3_ = g_strconcat (a, "-", NULL);
398 				_g_free0 (a);
399 				a = _tmp3_;
400 			}
401 			e_hour = ((gint) p) / 3600;
402 			e_minutes = ((gint) (p % 3600)) / 60;
403 			e_seconds = (gint) (p % 60);
404 			if (e_hour > 0) {
405 				gchar* _tmp4_ = NULL;
406 				gchar* _tmp5_;
407 				gchar* _tmp6_;
408 				_tmp4_ = g_strdup_printf ("%02i:", e_hour);
409 				_tmp5_ = _tmp4_;
410 				_tmp6_ = g_strconcat (a, _tmp5_, NULL);
411 				_g_free0 (a);
412 				a = _tmp6_;
413 				_g_free0 (_tmp5_);
414 			}
415 			_tmp7_ = g_strdup_printf ("%02i:%02i", e_minutes, e_seconds);
416 			_tmp8_ = _tmp7_;
417 			_tmp9_ = g_strconcat (a, _tmp8_, NULL);
418 			_g_free0 (a);
419 			a = _tmp9_;
420 			_g_free0 (_tmp8_);
421 			if (self->priv->total > 0) {
422 				gchar* _tmp10_;
423 				gchar* _tmp14_ = NULL;
424 				gchar* _tmp15_;
425 				gchar* _tmp16_;
426 				_tmp10_ = g_strconcat (a, " - ", NULL);
427 				_g_free0 (a);
428 				a = _tmp10_;
429 				if (t_hour > 0) {
430 					gchar* _tmp11_ = NULL;
431 					gchar* _tmp12_;
432 					gchar* _tmp13_;
433 					_tmp11_ = g_strdup_printf ("%02i:", t_hour);
434 					_tmp12_ = _tmp11_;
435 					_tmp13_ = g_strconcat (a, _tmp12_, NULL);
436 					_g_free0 (a);
437 					a = _tmp13_;
438 					_g_free0 (_tmp12_);
439 				}
440 				_tmp14_ = g_strdup_printf ("%02i:%02i", t_minutes, t_seconds);
441 				_tmp15_ = _tmp14_;
442 				_tmp16_ = g_strconcat (a, _tmp15_, NULL);
443 				_g_free0 (a);
444 				a = _tmp16_;
445 				_g_free0 (_tmp15_);
446 			}
447 			if (self->priv->do_countdown) {
448 				gint _tmp17_;
449 				_tmp17_ = strlen (a);
450 				gtk_label_set_width_chars (self->priv->label, (gint) _tmp17_);
451 			} else {
452 				gint _tmp18_;
453 				_tmp18_ = strlen (a);
454 				gtk_label_set_width_chars (self->priv->label, ((gint) _tmp18_) + 1);
455 			}
456 			gtk_label_set_text (self->priv->label, a);
457 			_g_free0 (a);
458 		}
459 	}
460 }
461 
462 
gmpc_progress_construct(GType object_type)463 GmpcProgress* gmpc_progress_construct (GType object_type) {
464 	GmpcProgress * self = NULL;
465 	self = (GmpcProgress*) g_object_new (object_type, NULL);
466 	return self;
467 }
468 
469 
gmpc_progress_new(void)470 GmpcProgress* gmpc_progress_new (void) {
471 	return gmpc_progress_construct (GMPC_TYPE_PROGRESS);
472 }
473 
474 
gmpc_progress_get_hide_text(GmpcProgress * self)475 gboolean gmpc_progress_get_hide_text (GmpcProgress* self) {
476 	gboolean result;
477 	g_return_val_if_fail (self != NULL, FALSE);
478 	result = self->_hide_text;
479 	return result;
480 }
481 
482 
gmpc_progress_set_hide_text(GmpcProgress * self,gboolean value)483 void gmpc_progress_set_hide_text (GmpcProgress* self, gboolean value) {
484 	g_return_if_fail (self != NULL);
485 	self->_hide_text = value;
486 	if (self->_hide_text) {
487 		gtk_widget_hide ((GtkWidget*) self->priv->label);
488 	} else {
489 		gtk_widget_show ((GtkWidget*) self->priv->label);
490 	}
491 	g_object_notify ((GObject *) self, "hide-text");
492 }
493 
494 
_gmpc_progress_scroll_event_callback_gtk_widget_scroll_event(GtkWidget * _sender,GdkEventScroll * event,gpointer self)495 static gboolean _gmpc_progress_scroll_event_callback_gtk_widget_scroll_event (GtkWidget* _sender, GdkEventScroll* event, gpointer self) {
496 	gboolean result;
497 	result = gmpc_progress_scroll_event_callback (self, _sender, event);
498 	return result;
499 }
500 
501 
_gmpc_progress_button_release_event_callback_gtk_widget_button_release_event(GtkWidget * _sender,GdkEventButton * event,gpointer self)502 static gboolean _gmpc_progress_button_release_event_callback_gtk_widget_button_release_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
503 	gboolean result;
504 	result = gmpc_progress_button_release_event_callback (self, _sender, event);
505 	return result;
506 }
507 
508 
_gmpc_progress_motion_notify_event_callback_gtk_widget_motion_notify_event(GtkWidget * _sender,GdkEventMotion * event,gpointer self)509 static gboolean _gmpc_progress_motion_notify_event_callback_gtk_widget_motion_notify_event (GtkWidget* _sender, GdkEventMotion* event, gpointer self) {
510 	gboolean result;
511 	result = gmpc_progress_motion_notify_event_callback (self, _sender, event);
512 	return result;
513 }
514 
515 
_gmpc_progress_enter_notify_event_callback_gtk_widget_enter_notify_event(GtkWidget * _sender,GdkEventCrossing * event,gpointer self)516 static gboolean _gmpc_progress_enter_notify_event_callback_gtk_widget_enter_notify_event (GtkWidget* _sender, GdkEventCrossing* event, gpointer self) {
517 	gboolean result;
518 	result = gmpc_progress_enter_notify_event_callback (self, _sender, event);
519 	return result;
520 }
521 
522 
_gmpc_progress_enter_notify_event_callback_gtk_widget_leave_notify_event(GtkWidget * _sender,GdkEventCrossing * event,gpointer self)523 static gboolean _gmpc_progress_enter_notify_event_callback_gtk_widget_leave_notify_event (GtkWidget* _sender, GdkEventCrossing* event, gpointer self) {
524 	gboolean result;
525 	result = gmpc_progress_enter_notify_event_callback (self, _sender, event);
526 	return result;
527 }
528 
529 
gmpc_progress_constructor(GType type,guint n_construct_properties,GObjectConstructParam * construct_properties)530 static GObject * gmpc_progress_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
531 	GObject * obj;
532 	GObjectClass * parent_class;
533 	GmpcProgress * self;
534 	GtkHScale* _tmp0_ = NULL;
535 	gulong _tmp1_;
536 	GtkLabel* _tmp2_ = NULL;
537 	parent_class = G_OBJECT_CLASS (gmpc_progress_parent_class);
538 	obj = parent_class->constructor (type, n_construct_properties, construct_properties);
539 	self = GMPC_PROGRESS (obj);
540 	_tmp0_ = (GtkHScale*) gtk_hscale_new (NULL);
541 	_g_object_unref0 (self->priv->scale);
542 	self->priv->scale = (GtkScale*) g_object_ref_sink (_tmp0_);
543 	gtk_range_set_range ((GtkRange*) self->priv->scale, 0.0, 1.0);
544 	gtk_scale_set_draw_value (self->priv->scale, FALSE);
545 	_tmp1_ = g_signal_connect_swapped (self->priv->scale, "value_changed", (GCallback) gmpc_progress_value_changed, self);
546 	self->priv->set_value_handler = _tmp1_;
547 	gtk_range_set_update_policy ((GtkRange*) self->priv->scale, GTK_UPDATE_DISCONTINUOUS);
548 	gtk_widget_set_sensitive ((GtkWidget*) self->priv->scale, FALSE);
549 	gtk_box_set_spacing ((GtkBox*) self, 0);
550 	gtk_widget_add_events ((GtkWidget*) self->priv->scale, (gint) GDK_SCROLL_MASK);
551 	gtk_widget_add_events ((GtkWidget*) self->priv->scale, (gint) GDK_POINTER_MOTION_MASK);
552 	gtk_widget_add_events ((GtkWidget*) self->priv->scale, (gint) GDK_ENTER_NOTIFY_MASK);
553 	gtk_widget_add_events ((GtkWidget*) self->priv->scale, (gint) GDK_LEAVE_NOTIFY_MASK);
554 	g_signal_connect_object ((GtkWidget*) self->priv->scale, "scroll-event", (GCallback) _gmpc_progress_scroll_event_callback_gtk_widget_scroll_event, self, 0);
555 	g_signal_connect_object (self->priv->scale, "button-press-event", (GCallback) gmpc_progress_button_press_event_callback, (GObject*) self, G_CONNECT_SWAPPED | G_CONNECT_AFTER);
556 	g_signal_connect_object ((GtkWidget*) self->priv->scale, "button-release-event", (GCallback) _gmpc_progress_button_release_event_callback_gtk_widget_button_release_event, self, 0);
557 	g_signal_connect_object ((GtkWidget*) self->priv->scale, "motion-notify-event", (GCallback) _gmpc_progress_motion_notify_event_callback_gtk_widget_motion_notify_event, self, 0);
558 	g_signal_connect_object ((GtkWidget*) self->priv->scale, "enter-notify-event", (GCallback) _gmpc_progress_enter_notify_event_callback_gtk_widget_enter_notify_event, self, 0);
559 	g_signal_connect_object ((GtkWidget*) self->priv->scale, "leave-notify-event", (GCallback) _gmpc_progress_enter_notify_event_callback_gtk_widget_leave_notify_event, self, 0);
560 	_tmp2_ = (GtkLabel*) gtk_label_new ("");
561 	_g_object_unref0 (self->priv->label);
562 	self->priv->label = g_object_ref_sink (_tmp2_);
563 	gtk_misc_set_alignment ((GtkMisc*) self->priv->label, 0.5f, 0.5f);
564 	gtk_widget_set_no_show_all ((GtkWidget*) self->priv->label, TRUE);
565 	gtk_box_pack_start ((GtkBox*) self, (GtkWidget*) self->priv->scale, TRUE, TRUE, (guint) 0);
566 	gtk_box_pack_end ((GtkBox*) self, (GtkWidget*) self->priv->label, FALSE, FALSE, (guint) 0);
567 	gtk_widget_show ((GtkWidget*) self->priv->scale);
568 	gtk_widget_show ((GtkWidget*) self->priv->label);
569 	gtk_widget_show ((GtkWidget*) self);
570 	return obj;
571 }
572 
573 
gmpc_progress_class_init(GmpcProgressClass * klass)574 static void gmpc_progress_class_init (GmpcProgressClass * klass) {
575 	gmpc_progress_parent_class = g_type_class_peek_parent (klass);
576 	g_type_class_add_private (klass, sizeof (GmpcProgressPrivate));
577 	G_OBJECT_CLASS (klass)->get_property = _vala_gmpc_progress_get_property;
578 	G_OBJECT_CLASS (klass)->set_property = _vala_gmpc_progress_set_property;
579 	G_OBJECT_CLASS (klass)->constructor = gmpc_progress_constructor;
580 	G_OBJECT_CLASS (klass)->finalize = gmpc_progress_finalize;
581 	g_object_class_install_property (G_OBJECT_CLASS (klass), GMPC_PROGRESS_HIDE_TEXT, g_param_spec_boolean ("hide-text", "hide-text", "hide-text", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
582 	g_signal_new ("seek_event", GMPC_TYPE_PROGRESS, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT);
583 }
584 
585 
gmpc_progress_instance_init(GmpcProgress * self)586 static void gmpc_progress_instance_init (GmpcProgress * self) {
587 	self->priv = GMPC_PROGRESS_GET_PRIVATE (self);
588 	self->priv->total = (guint) 0;
589 	self->priv->current = (guint) 0;
590 	self->priv->do_countdown = FALSE;
591 	self->_hide_text = FALSE;
592 	self->priv->scale = NULL;
593 	self->priv->label = NULL;
594 	self->priv->set_value_handler = (gulong) 0;
595 	self->priv->tooltip = NULL;
596 	self->priv->tooltip_label = NULL;
597 	self->priv->press = 0;
598 }
599 
600 
gmpc_progress_finalize(GObject * obj)601 static void gmpc_progress_finalize (GObject* obj) {
602 	GmpcProgress * self;
603 	self = GMPC_PROGRESS (obj);
604 	if (self->priv->tooltip != NULL) {
605 		gtk_object_destroy ((GtkObject*) self->priv->tooltip);
606 		_g_object_unref0 (self->priv->tooltip);
607 		self->priv->tooltip = NULL;
608 	}
609 	_g_object_unref0 (self->priv->scale);
610 	_g_object_unref0 (self->priv->label);
611 	_g_object_unref0 (self->priv->tooltip);
612 	_g_object_unref0 (self->priv->tooltip_label);
613 	G_OBJECT_CLASS (gmpc_progress_parent_class)->finalize (obj);
614 }
615 
616 
gmpc_progress_get_type(void)617 GType gmpc_progress_get_type (void) {
618 	static volatile gsize gmpc_progress_type_id__volatile = 0;
619 	if (g_once_init_enter (&gmpc_progress_type_id__volatile)) {
620 		static const GTypeInfo g_define_type_info = { sizeof (GmpcProgressClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gmpc_progress_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GmpcProgress), 0, (GInstanceInitFunc) gmpc_progress_instance_init, NULL };
621 		GType gmpc_progress_type_id;
622 		gmpc_progress_type_id = g_type_register_static (GTK_TYPE_VBOX, "GmpcProgress", &g_define_type_info, 0);
623 		g_once_init_leave (&gmpc_progress_type_id__volatile, gmpc_progress_type_id);
624 	}
625 	return gmpc_progress_type_id__volatile;
626 }
627 
628 
_vala_gmpc_progress_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)629 static void _vala_gmpc_progress_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
630 	GmpcProgress * self;
631 	self = GMPC_PROGRESS (object);
632 	switch (property_id) {
633 		case GMPC_PROGRESS_HIDE_TEXT:
634 		g_value_set_boolean (value, gmpc_progress_get_hide_text (self));
635 		break;
636 		default:
637 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
638 		break;
639 	}
640 }
641 
642 
_vala_gmpc_progress_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)643 static void _vala_gmpc_progress_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
644 	GmpcProgress * self;
645 	self = GMPC_PROGRESS (object);
646 	switch (property_id) {
647 		case GMPC_PROGRESS_HIDE_TEXT:
648 		gmpc_progress_set_hide_text (self, g_value_get_boolean (value));
649 		break;
650 		default:
651 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
652 		break;
653 	}
654 }
655 
656 
657 
658