src/log-player.h File Reference

Header for functions related to the log player's GUI. More...

#include <gtk/gtk.h>
Include dependency graph for log-player.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void player_set_status_label (guint64, const gchar *)
 Sets the player's status label according to the parameters.
void player_on_stop_button_pressed (GtkButton *, gpointer)
 Called when the stop button of the log player is pressed.
guint64 player_date_to_timestamp (GDate *, guint, guint)
 Calculates a timestamp from a date and time.
void player_update_values_from_dbus ()
void player_setup_widgets ()
 Setups the log player's widgets (connects handlers, etc).

Detailed Description

Header for functions related to the log player's GUI.

Author:
Steve Dodier <sidnioulz@gmail.com>

This file contains the signature of functions used by the log player's GUI.

Definition in file log-player.h.


Function Documentation

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.

Parameters:
[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.

00104 {
00105     struct tm   tmbuffer    = {0};
00106 
00107     g_date_to_struct_tm (date, &tmbuffer);
00108     tmbuffer.tm_hour = hours;
00109     tmbuffer.tm_min = mins;
00110     tmbuffer.tm_sec = 0;
00111 
00112     return mktime (&tmbuffer);
00113 }

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.

Parameters:
[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.

Parameters:
[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

Todo:
if duration % week_secs == 0 is weeks if duration % day_secs == 0 is days ... if at end its neither week nor day nor hour nor min, then try to fetch the

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 }

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on Tue Jan 12 00:48:45 2010 for ENSIBSynema by  doxygen 1.6.1