Source code for functions related to the log player's GUI. More...
#include <gtk/gtk.h>
#include <time.h>
#include "application-data.h"
#include "log-player.h"
#include "log-player-dbus.h"
#include "time-period.h"
Go to the source code of this file.
Functions | |
void | player_set_status_label (guint64 timestamp, const gchar *prefix) |
Sets the player's status label according to the parameters. | |
guint64 | player_date_to_timestamp (GDate *date, guint hours, guint mins) |
Calculates a timestamp from a date and time. | |
void | player_on_stop_button_pressed (GtkButton *button, gpointer user_data) |
Called when the stop button of the log player is pressed. | |
void | player_update_values_from_dbus () |
void | player_setup_widgets () |
Setups the log player's widgets (connects handlers, etc). |
Source code for functions related to the log player's GUI.
This file contains the declaration of functions used by the log player's GUI.
Definition in file log-player.c.
guint64 player_date_to_timestamp | ( | GDate * | date, | |
guint | hours, | |||
guint | mins | |||
) |
Calculates a timestamp from a date and time.
This function calculates a timestamp from a GDate, using a struct tm. It then sets the hour and minute flags of the struct tm before using mktime to get a timestamp.
[in] | date | the GDate containing the date |
[in] | hours | the number of hours in the time |
[in] | mins | the number of minutes in the time |
Definition at line 103 of file log-player.c.
void player_on_stop_button_pressed | ( | GtkButton * | button, | |
gpointer | user_data | |||
) |
Called when the stop button of the log player is pressed.
This function sets the player status to STOPPED and restores the sensitivity of the log player GUI's widgets. It calls the log player to tell it to stop if user_data is set to something different than 0. Use GINT_TO_POINTER to set user_data.
[in] | button | the stop button that was pressed |
[in] | user_data | an int indicating if the app should tell the player to stop (if != 0) |
Definition at line 227 of file log-player.c.
00228 { 00229 synema_instance_t *inst = synema_instance (); 00230 gboolean change_gui = TRUE; 00231 00232 if (GPOINTER_TO_INT (user_data)) { 00233 change_gui = player_dbus_stop (); 00234 if (!change_gui) 00235 g_warning ("player_on_stop_button_pressed: Could not stop the player (DBus error)"); 00236 } 00237 00238 if (change_gui) { 00239 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_button_date"), TRUE); 00240 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_hour"), TRUE); 00241 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_label_date_double_dot"), TRUE); 00242 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_min"), TRUE); 00243 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_playtime"), TRUE); 00244 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_combo_playtime"), TRUE); 00245 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_label_date"), TRUE); 00246 gtk_widget_set_sensitive ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_label_stopafter"), TRUE); 00247 00248 gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); 00249 gtk_image_set_from_stock (GTK_IMAGE (gtk_builder_get_object (inst->builder, "player_button_playpause_image")), 00250 GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_BUTTON); 00251 gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (inst->builder, "player_status")), "Player not running"); 00252 00253 inst->player_status = PLAYER_STOPPED; 00254 } 00255 }
void player_set_status_label | ( | guint64 | timestamp, | |
const gchar * | prefix | |||
) |
Sets the player's status label according to the parameters.
This function changes the log player's status label to something of the form "<prefix>\n<date> at <time>", date and time being calculated from the given timestamp.
[in] | timestamp | the time stamp of the date and time to display |
[in] | prefix | the string to put on the first line of the label |
Definition at line 34 of file log-player.c.
00035 { 00036 synema_instance_t *inst = synema_instance (); 00037 gchar *buffer = g_malloc (sizeof (char) * PLAYER_DATE_BUTTON_BUFFER_LEN); 00038 gchar *finalbuffer = NULL; 00039 GDate *date = g_date_new (); 00040 gint hours,mins; 00041 GTimeVal timeval = {timestamp, 0}; 00042 GtkWidget *label = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_status"); 00043 guint64 tmptime = 0; 00044 00045 g_date_set_time_val (date, &timeval); 00046 g_date_strftime (buffer, PLAYER_DATE_BUTTON_BUFFER_LEN, "%x", date); 00047 00048 tmptime = player_date_to_timestamp (date, 0, 0); 00049 tmptime = timestamp - tmptime; 00050 hours = tmptime / 3600; 00051 mins = (tmptime - 3600*hours) / 60; 00052 00053 finalbuffer = g_strdup_printf ("%s\n%s at %02d:%02d", prefix, buffer, hours, mins); 00054 gtk_label_set_text (GTK_LABEL (label), finalbuffer); 00055 00056 g_free (buffer); 00057 g_free (finalbuffer); 00058 g_date_free (date); 00059 }
void player_setup_widgets | ( | ) |
Setups the log player's widgets (connects handlers, etc).
This function connects the log player panel's gtk widgets to their respective handlers.
Definition at line 585 of file log-player.c.
00586 { 00587 synema_instance_t *inst = synema_instance (); 00588 GtkCellRenderer *renderer = NULL; 00589 GtkWidget *datebutton = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_button_date"); 00590 GtkWidget *hourspin = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_hour"); 00591 GtkWidget *minspin = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_min"); 00592 GtkWidget *scale = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_speed_scale"); 00593 GtkWidget *stopaftercombo = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_combo_playtime"); 00594 GtkWidget *stopafterspin = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_playtime"); 00595 00596 00597 // Setting up the date button and time spin buttons 00598 g_signal_connect (datebutton, "clicked", G_CALLBACK (player_show_date_calendar), NULL); 00599 g_signal_connect (hourspin, "wrapped", G_CALLBACK (player_on_spin_hour_wrapped), datebutton); 00600 g_signal_connect (minspin, "wrapped", G_CALLBACK (player_on_spin_minute_wrapped), hourspin); 00601 00602 00603 // Connecting the "stop playing after" spin button to it's handler 00604 g_signal_connect (stopafterspin, "value-changed", G_CALLBACK (player_populate_stopafter_combo), stopaftercombo); 00605 00606 00607 // Setting up the "stop playing after" combo box 00608 renderer = gtk_cell_renderer_text_new (); 00609 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (stopaftercombo), renderer, FALSE); 00610 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (stopaftercombo), renderer, "text", 0, NULL); 00611 player_populate_stopafter_combo (GTK_SPIN_BUTTON (stopafterspin), stopaftercombo); 00612 00613 00614 // Setting up the speed scale 00615 g_signal_connect ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_speed_minus"), 00616 "clicked", G_CALLBACK (player_decrement_speed_scale), scale); 00617 g_signal_connect ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_speed_plus"), 00618 "clicked", G_CALLBACK (player_increment_speed_scale), scale); 00619 g_signal_connect (scale, "value-changed", G_CALLBACK (player_on_speed_scale_value_change), GINT_TO_POINTER (1)); 00620 00621 00622 // Setting the play and stop buttons on 00623 g_signal_connect ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_button_playpause"), 00624 "clicked", G_CALLBACK (player_on_play_button_pressed), GINT_TO_POINTER (1)); 00625 g_signal_connect ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_button_stop"), 00626 "clicked", G_CALLBACK (player_on_stop_button_pressed), GINT_TO_POINTER (1)); 00627 00628 00629 // Connecting the button to loop for the log player's DBus server 00630 g_signal_connect ((GtkWidget *) gtk_builder_get_object (inst->builder, "player_lookup_button"), 00631 "clicked", G_CALLBACK (player_on_lookup_button_clicked), NULL); 00632 00633 00634 // Set the value of the widgets and check for the player at the same time 00635 player_update_values_from_dbus (); 00636 }
void player_update_values_from_dbus | ( | ) |
TODO
take date (store in a), add duration, get date (in b), compare timestamp (a) - timestamp (b) == duration, if == then is months/years, so calc difference else is seconds
Definition at line 505 of file log-player.c.
00506 { 00507 if (!player_dbus_try_ping (FALSE)) 00508 return; 00509 00510 synema_instance_t *inst = synema_instance (); 00511 gboolean started = FALSE; 00512 gboolean paused = FALSE; 00513 GDate *date = g_date_new (); 00514 gdouble speed = 0; 00515 GtkWidget *datebutton = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_button_date"); 00516 GtkWidget *hourspin = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_hour"); 00517 GtkWidget *minspin = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_spinbutton_min"); 00518 GtkWidget *scale = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_speed_scale"); 00519 GtkWidget *stopaftercombo = (GtkWidget *) gtk_builder_get_object (inst->builder, "player_combo_playtime"); 00520 guint64 duration; 00521 guint64 start_date; 00522 time_t tt; 00523 struct tm tm; 00524 00525 00526 player_dbus_get_state (&started, &paused); 00527 if (started) { 00528 // Emulate a press of the play button, without DBus call 00529 inst->player_status = PLAYER_STOPPED; 00530 player_on_play_button_pressed (GTK_BUTTON (gtk_builder_get_object (inst->builder, "player_button_playpause")), GINT_TO_POINTER (0)); 00531 00532 // Now status is playing, if we call the play button again it emulates a pause 00533 if (paused) 00534 player_on_play_button_pressed (GTK_BUTTON (gtk_builder_get_object (inst->builder, "player_button_playpause")), GINT_TO_POINTER (0)); 00535 00536 if (player_dbus_get_start_date (&start_date)) 00537 tt = start_date; 00538 else 00539 tt = time (NULL); 00540 } else { 00541 // Emulate a stop button press 00542 player_on_stop_button_pressed (GTK_BUTTON (gtk_builder_get_object (inst->builder, "player_button_stop")), GINT_TO_POINTER (0)); 00543 00544 tt = time (NULL); 00545 } 00546 00547 00548 // Set the start date widgets 00549 localtime_r (&tt, &tm); 00550 g_date_set_time_t (date, tt); 00551 date_button_set_label (GTK_BUTTON (datebutton), date); 00552 gtk_spin_button_set_value (GTK_SPIN_BUTTON (hourspin), tm.tm_hour); 00553 gtk_spin_button_set_value (GTK_SPIN_BUTTON (minspin), tm.tm_min); 00554 g_date_free (date); 00555 00556 00557 // Set the stop after widgets 00558 if (started && player_dbus_get_duration (&duration)) { 00570 g_warning ("player_update_values_from_dbus: Playback duration fetching not implemented"); 00571 } 00572 gtk_combo_box_set_active (GTK_COMBO_BOX (stopaftercombo), 0); 00573 00574 00575 // Set the speed scale 00576 gtk_range_set_value (GTK_RANGE (scale), 00577 player_dbus_get_speed (&speed) ? 00578 player_get_scale_index_from_speed (speed) : 00579 PLAYER_SPEED_SCALE_INDEX_NORMAL); 00580 player_on_speed_scale_value_change (GTK_SCALE (scale), GINT_TO_POINTER (0)); 00581 }