From 24378226940341b1a14ef3039042f8d643f570ec Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Thu, 18 Feb 2010 21:04:50 -0600 Subject: [PATCH] Separate stopwatch functionality into unique source file. --- src/Makefile.am | 2 +- src/stopish-stopwatch.c | 374 +++++++++++++++++++++++++++++++++++++++++++++ src/stopish.c | 388 +++-------------------------------------------- src/stopish.h | 11 ++ 4 files changed, 411 insertions(+), 364 deletions(-) create mode 100644 src/stopish-stopwatch.c diff --git a/src/Makefile.am b/src/Makefile.am index 4d70453..3b3cdeb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,7 +8,7 @@ bin_PROGRAMS = stopish -stopish_SOURCES = stopish.c stopish.h timer.c +stopish_SOURCES = stopish.c stopish.h stopish-stopwatch.c timer.c stopish_CFLAGS = $(GTK_CFLAGS) $(OSSO_CFLAGS) $(DESKTOP_CFLAGS) \ $(DBUS_CFLAGS) $(MCE_CFLAGS) diff --git a/src/stopish-stopwatch.c b/src/stopish-stopwatch.c new file mode 100644 index 0000000..5129c8d --- /dev/null +++ b/src/stopish-stopwatch.c @@ -0,0 +1,374 @@ +// stopish-stopwatch.c +// +// Copyright 2010 Michael Cronenworth +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +// MA 02110-1301, USA. + +#include +#include +#include + +#include "stopish.h" + +struct timerData { + GtkWidget *vBox; + GtkWidget *label; + GtkWidget *labelHour; + GtkWidget *labelMinute; + GtkWidget *labelSecond; +}; + +static struct timerData timerdata; +static GtkWidget *timerHistoryLabel1 = NULL; +static GtkWidget *timerHistoryLabel2 = NULL; +static GtkWidget *timerHistoryLabel3 = NULL; +static GtkWidget *timerHistoryLabel4 = NULL; +static GSList *historyList = NULL; +static int timerHandle = -1; + + +static gint timeout_cb( gpointer data ); +static void start_cb( GtkButton* button, gpointer data ); +static void reset_cb( GtkButton* button, gpointer data ); + + +GtkWindow *stopish_stopwatch_new( void ) +{ + GtkWidget *window, *button, *button0, *label; + GtkWidget *vBoxMain, *vBox0, *hBox0; + + window = hildon_stackable_window_new( ); + + gtk_container_set_border_width( GTK_CONTAINER( window ), 20 ); + + gtk_window_set_title( GTK_WINDOW( window ), "Stopish" ); + + vBoxMain = gtk_vbox_new( FALSE, 10 ); + + // separator + label = gtk_label_new( NULL ); + gtk_container_add( GTK_CONTAINER( vBoxMain ), label ); + + vBox0 = gtk_vbox_new( FALSE, 5 ); + + // stop watch area + timerdata.vBox = gtk_vbox_new( FALSE, 0 ); + gtk_container_add( GTK_CONTAINER( vBox0 ), timerdata.vBox ); + stopish_stopwatch_label_timer_landscape( ); + + // history area + timerHistoryLabel1 = gtk_label_new( NULL ); + gtk_label_set_markup( GTK_LABEL( timerHistoryLabel1 ), + " " ); + gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel1, FALSE, FALSE, 0 ); + timerHistoryLabel2 = gtk_label_new( NULL ); + gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel2, FALSE, FALSE, 0 ); + timerHistoryLabel3 = gtk_label_new( NULL ); + gtk_label_set_markup( GTK_LABEL( timerHistoryLabel3 ), + " " ); + gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel3, FALSE, FALSE, 0 ); + timerHistoryLabel4 = gtk_label_new( NULL ); + gtk_label_set_markup( GTK_LABEL( timerHistoryLabel4 ), + " " ); + gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel4, FALSE, FALSE, 0 ); + + gtk_container_add( GTK_CONTAINER( vBoxMain ), vBox0 ); + + // separator + label = gtk_label_new( NULL ); + gtk_container_add( GTK_CONTAINER( vBoxMain ), label ); + + // button area + hBox0 = gtk_hbox_new( FALSE, 15 ); + gtk_widget_set_size_request( hBox0, -1, 80 ); + + // start/pause stopwatch button + button = hildon_button_new_with_text( HILDON_SIZE_HALFSCREEN_WIDTH, + HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, + "Start", NULL ); + button0 = hildon_button_new_with_text( HILDON_SIZE_HALFSCREEN_WIDTH, + HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, + "Reset", NULL ); + g_signal_connect( G_OBJECT( button ), "clicked", + G_CALLBACK( start_cb ), button0 ); + gtk_container_add( GTK_CONTAINER( hBox0 ), button ); + + // reset button + gtk_widget_set_sensitive( button0, FALSE ); + g_signal_connect( G_OBJECT( button0 ), "clicked", + G_CALLBACK( reset_cb ), button ); + gtk_container_add( GTK_CONTAINER( hBox0 ), button0 ); + + gtk_box_pack_start( GTK_BOX( vBoxMain ), hBox0, FALSE, FALSE, 0 ); + + gtk_container_add( GTK_CONTAINER( window ), vBoxMain ); + + gtk_widget_show_all( window ); + + return GTK_WINDOW( window ); +} + + +void stopish_stopwatch_perf_timer_hour( GtkRadioButton* radio, GtkLabel *label ) +{ + stopish_timer_set_precision( TIMER_PRECISION_HOUR ); + if ( stopish_get_orientation( ) == STOPISH_LANDSCAPE ) + stopish_stopwatch_label_timer_landscape( ); + else + stopish_stopwatch_label_timer_portrait( ); +} + + +void stopish_stopwatch_perf_timer_minute( GtkRadioButton* radio, GtkLabel *label ) +{ + stopish_timer_set_precision( TIMER_PRECISION_MINUTE ); + if ( stopish_get_orientation( ) == STOPISH_LANDSCAPE ) + stopish_stopwatch_label_timer_landscape( ); + else + stopish_stopwatch_label_timer_portrait( ); +} + + +void stopish_stopwatch_label_timer_landscape( void ) +{ + gtk_widget_set_size_request( timerdata.vBox, 800, -1 ); + + gtk_widget_destroy( timerdata.label ); + timerdata.label = gtk_label_new( NULL ); + if ( stopish_timer_get_precision( ) == TIMER_PRECISION_MINUTE ) + gtk_label_set_markup( GTK_LABEL( timerdata.label ), + "" + "00:00.0" ); + else + gtk_label_set_markup( GTK_LABEL( timerdata.label ), + "" + "00:00:00.0" ); + gtk_misc_set_alignment( GTK_MISC( timerdata.label ), 0.5f, 0.5f ); + gtk_container_add( GTK_CONTAINER( timerdata.vBox ), timerdata.label ); + gtk_widget_show( timerdata.label ); +} + + +void stopish_stopwatch_label_timer_portrait( void ) +{ + GtkWidget *vBox, *hBox, *label; + + gtk_widget_set_size_request( timerdata.vBox, 480, -1 ); + + gtk_widget_destroy( timerdata.label ); + vBox = gtk_vbox_new( FALSE, 10 ); + + if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) { + hBox = gtk_hbox_new( FALSE, 10 ); + label = gtk_label_new( "Hours" ); + gtk_widget_set_size_request( label, 100, -1 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1.0f, 0.5f ); + gtk_container_add( GTK_CONTAINER( hBox ), label ); + timerdata.labelHour = gtk_label_new( NULL ); + gtk_widget_set_size_request( timerdata.labelHour, 350, -1 ); + gtk_misc_set_alignment( GTK_MISC( timerdata.labelHour ), 0.0f, 0.5f ); + gtk_label_set_markup( GTK_LABEL( timerdata.labelHour ), + "" + "00" ); + gtk_container_add( GTK_CONTAINER( hBox ), timerdata.labelHour ); + gtk_container_add( GTK_CONTAINER( vBox ), hBox ); + } + + hBox = gtk_hbox_new( FALSE, 10 ); + label = gtk_label_new( "Minutes" ); + gtk_widget_set_size_request( label, 100, -1 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1.0f, 0.5f ); + gtk_container_add( GTK_CONTAINER( hBox ), label ); + timerdata.labelMinute = gtk_label_new( NULL ); + gtk_widget_set_size_request( timerdata.labelMinute, 350, -1 ); + gtk_misc_set_alignment( GTK_MISC( timerdata.labelMinute ), 0.0f, 0.5f ); + gtk_label_set_markup( GTK_LABEL( timerdata.labelMinute ), + "" + "00" ); + gtk_container_add( GTK_CONTAINER( hBox ), timerdata.labelMinute ); + gtk_container_add( GTK_CONTAINER( vBox ), hBox ); + + hBox = gtk_hbox_new( FALSE, 10 ); + label = gtk_label_new( "Seconds" ); + gtk_widget_set_size_request( label, 100, -1 ); + gtk_misc_set_alignment( GTK_MISC( label ), 1.0f, 0.5f ); + gtk_container_add( GTK_CONTAINER( hBox ), label ); + timerdata.labelSecond = gtk_label_new( NULL ); + gtk_widget_set_size_request( timerdata.labelSecond, 350, -1 ); + gtk_misc_set_alignment( GTK_MISC( timerdata.labelSecond ), 0.0f, 0.5f ); + gtk_label_set_markup( GTK_LABEL( timerdata.labelSecond ), + "" + "00.0" ); + gtk_container_add( GTK_CONTAINER( hBox ), timerdata.labelSecond ); + gtk_container_add( GTK_CONTAINER( vBox ), hBox ); + + timerdata.label = vBox; + gtk_container_add( GTK_CONTAINER( timerdata.vBox ), vBox ); + gtk_widget_show_all( vBox ); +} + + + +// +// Timer callback +// +static gint timeout_cb( gpointer data ) +{ + char formatBuffer[128], tempBuffer[8]; + char *tempString; + + // print to screen + tempString = stopish_get_time_string( ); + if ( stopish_get_orientation( ) == STOPISH_LANDSCAPE ) { + sprintf( formatBuffer, "" + "%s", tempString ); + gtk_label_set_markup( GTK_LABEL( timerdata.label ), formatBuffer ); + } + else { + if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) { + sprintf( tempBuffer, "%.2s", tempString ); + sprintf( formatBuffer, "" + "%s", tempBuffer ); + gtk_label_set_markup( GTK_LABEL( timerdata.labelHour ), + formatBuffer ); + } + if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) + sprintf( tempBuffer, "%.2s", tempString + 3 ); + else + sprintf( tempBuffer, "%.2s", tempString ); + sprintf( formatBuffer, "" + "%s", tempBuffer ); + gtk_label_set_markup( GTK_LABEL( timerdata.labelMinute ), + formatBuffer ); + if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) + sprintf( tempBuffer, "%.4s", tempString + 6 ); + else + sprintf( tempBuffer, "%.4s", tempString + 3 ); + sprintf( formatBuffer, "" + "%s", tempBuffer ); + gtk_label_set_markup( GTK_LABEL( timerdata.labelSecond ), + formatBuffer ); + } + free( tempString ); + + return TRUE; +} + + +static void start_cb( GtkButton* button, gpointer data ) +{ + if ( stopish_get_mode( ) == STOPISH_MODE_START ) { + // set label text and add timer handle + gtk_button_set_label( button, "Pause" ); + stopish_set_mode( STOPISH_MODE_PAUSE ); + stopish_set_time_start( stopish_current_time( ) ); + timerHandle = g_timeout_add( 100, timeout_cb, NULL ); + } + else if ( stopish_get_mode( ) == STOPISH_MODE_RESUME ) { + // resume timer + gtk_button_set_label( button, "Pause" ); + stopish_set_mode( STOPISH_MODE_PAUSE ); + stopish_timer_resume( ); + timerHandle = g_timeout_add( 100, timeout_cb, NULL ); + } + else { + // pause timer, remove timeout + gtk_button_set_label( button, "Resume" ); + stopish_set_mode( STOPISH_MODE_RESUME ); + g_source_remove( timerHandle ); + stopish_timer_save( ); + } + + // allow user to reset timer + gtk_widget_set_sensitive( GTK_WIDGET( data ), TRUE ); +} + + +static void reset_cb( GtkButton* button, gpointer data ) +{ + GSList *tempList; + char *tempString; + char formatString[128]; + + if ( stopish_get_mode( ) == STOPISH_MODE_RESUME ) + stopish_timer_resume( ); + + // set label text and remove timer handle + gtk_button_set_label( GTK_BUTTON( data ), "Start" ); + stopish_set_mode( STOPISH_MODE_START ); + if ( stopish_timer_get_precision( ) == TIMER_PRECISION_MINUTE ) + gtk_label_set_markup( GTK_LABEL( timerdata.label ), + "" + "00:00.0" ); + else + gtk_label_set_markup( GTK_LABEL( timerdata.label ), + "" + "00:00:00.0" ); + g_source_remove( timerHandle ); + + // add current time to history + historyList = g_slist_prepend( historyList, + ( gpointer ) stopish_get_time_string( ) ); + sprintf( formatString, "%s", + ( char * ) historyList->data ); + gtk_label_set_markup( GTK_LABEL( timerHistoryLabel1 ), + formatString ); + tempList = historyList; + tempList = g_slist_next( tempList ); + if ( tempList ) { + gtk_label_set_text( GTK_LABEL( timerHistoryLabel2 ), + ( char * ) tempList->data ); + } + tempList = g_slist_next( tempList ); + if ( tempList ) { + sprintf( formatString, "%s", + ( char * ) tempList->data ); + gtk_label_set_markup( GTK_LABEL( timerHistoryLabel3 ), + formatString ); + } + tempList = g_slist_next( tempList ); + if ( tempList ) { + sprintf( formatString, "%s", + ( char * ) tempList->data ); + gtk_label_set_markup( GTK_LABEL( timerHistoryLabel4 ), + formatString ); + } + + // remove the history time after the 4th + tempList = g_slist_next( tempList ); + if ( tempList ) { + tempString = tempList->data; + historyList = g_slist_remove( historyList, tempList->data ); + free( tempString ); + } + + // reset start time + stopish_set_time_start( 0 ); + + // disallow user to reset timer + gtk_widget_set_sensitive( GTK_WIDGET( button ), FALSE ); +} diff --git a/src/stopish.c b/src/stopish.c index 8cafa5a..b8923ab 100644 --- a/src/stopish.c +++ b/src/stopish.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -40,43 +39,21 @@ struct _AppData { DBusConnection *system_bus; }; -typedef struct timerData { - GtkWidget *vBox; - GtkWidget *label; - GtkWidget *labelHour; - GtkWidget *labelMinute; - GtkWidget *labelSecond; -}; static AppData appdata; -static struct timerData timerdata; -static GtkWidget *timerHistoryLabel1 = NULL; -static GtkWidget *timerHistoryLabel2 = NULL; -static GtkWidget *timerHistoryLabel3 = NULL; -static GtkWidget *timerHistoryLabel4 = NULL; -static GSList *historyList = NULL; static int stopishMode = STOPISH_MODE_START; static int stopishOrientation = STOPISH_LANDSCAPE; -static int timerHandle = -1; //Prototypes gint dbus_callback( const gchar *interface, const gchar *method, GArray *arguments, gpointer data, osso_rpc_t *retval ); -static GtkWindow *stopish_new( void ); static void main_menu( GtkWindow *window ); -static void label_timer_landscape( void ); -static void label_timer_portrait( void ); -static gint timeout_cb( gpointer data ); -static void start_cb( GtkButton* button, gpointer data ); -static void reset_cb( GtkButton* button, gpointer data ); static void close_cb( GtkButton* button, gpointer data ); static gboolean focus_in_cb( GtkWidget *widget, GdkEventFocus *event, gpointer data ); static gboolean focus_out_cb( GtkWidget *widget, GdkEventFocus *event, gpointer data ); -static void preference_timer_hour( GtkRadioButton* radio, GtkLabel *label ); -static void preference_timer_minute( GtkRadioButton* radio, GtkLabel *label ); static void accelerometer_enable( void ); static void accelerometer_disable( void ); static DBusHandlerResult mce_filter_func( DBusConnection * connection, @@ -101,7 +78,19 @@ int main( int argc, char *argv[] ) program = hildon_program_get_instance( ); // create main window - appdata.main_window = stopish_new( ); + appdata.main_window = stopish_stopwatch_new( ); + + // attach signals to main window + g_signal_connect( G_OBJECT( appdata.main_window ), "destroy", + G_CALLBACK( close_cb ), appdata.main_window ); + g_signal_connect( G_OBJECT( appdata.main_window ), "focus-in-event", + G_CALLBACK( focus_in_cb ), NULL ); + g_signal_connect( G_OBJECT( appdata.main_window ), "focus-out-event", + G_CALLBACK( focus_out_cb ), NULL ); + + // setup main menu + main_menu( appdata.main_window ); + hildon_program_add_window( program, HILDON_WINDOW( appdata.main_window ) ); // Connect to session bus, add a match rule, install filter callback @@ -148,91 +137,15 @@ int stopish_get_mode( void ) } -static GtkWindow *stopish_new( void ) +void stopish_set_mode( int newMode ) { - GtkWidget *window, *button, *button0, *label; - GtkWidget *vBoxMain, *vBox0, *hBox0; - - window = hildon_stackable_window_new( ); - - gtk_container_set_border_width( GTK_CONTAINER( window ), 20 ); + stopishMode = newMode; +} - gtk_window_set_title( GTK_WINDOW( window ), "Stopish" ); - // attach signals to main window - g_signal_connect( G_OBJECT( window ), "destroy", - G_CALLBACK( close_cb ), window ); - g_signal_connect( G_OBJECT( window ), "focus-in-event", - G_CALLBACK( focus_in_cb ), NULL ); - g_signal_connect( G_OBJECT( window ), "focus-out-event", - G_CALLBACK( focus_out_cb ), NULL ); - - // setup main menu - main_menu( window ); - - vBoxMain = gtk_vbox_new( FALSE, 10 ); - - // separator - label = gtk_label_new( NULL ); - gtk_container_add( GTK_CONTAINER( vBoxMain ), label ); - - vBox0 = gtk_vbox_new( FALSE, 5 ); - - // stop watch area - timerdata.vBox = gtk_vbox_new( FALSE, 0 ); - gtk_container_add( GTK_CONTAINER( vBox0 ), timerdata.vBox ); - label_timer_landscape( ); - - // history area - timerHistoryLabel1 = gtk_label_new( NULL ); - gtk_label_set_markup( GTK_LABEL( timerHistoryLabel1 ), - " " ); - gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel1, FALSE, FALSE, 0 ); - timerHistoryLabel2 = gtk_label_new( NULL ); - gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel2, FALSE, FALSE, 0 ); - timerHistoryLabel3 = gtk_label_new( NULL ); - gtk_label_set_markup( GTK_LABEL( timerHistoryLabel3 ), - " " ); - gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel3, FALSE, FALSE, 0 ); - timerHistoryLabel4 = gtk_label_new( NULL ); - gtk_label_set_markup( GTK_LABEL( timerHistoryLabel4 ), - " " ); - gtk_box_pack_start( GTK_BOX( vBox0 ), timerHistoryLabel4, FALSE, FALSE, 0 ); - - gtk_container_add( GTK_CONTAINER( vBoxMain ), vBox0 ); - - // separator - label = gtk_label_new( NULL ); - gtk_container_add( GTK_CONTAINER( vBoxMain ), label ); - - // button area - hBox0 = gtk_hbox_new( FALSE, 15 ); - gtk_widget_set_size_request( hBox0, -1, 80 ); - - // start/pause stopwatch button - button = hildon_button_new_with_text( HILDON_SIZE_HALFSCREEN_WIDTH, - HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, - "Start", NULL ); - button0 = hildon_button_new_with_text( HILDON_SIZE_HALFSCREEN_WIDTH, - HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, - "Reset", NULL ); - g_signal_connect( G_OBJECT( button ), "clicked", - G_CALLBACK( start_cb ), button0 ); - gtk_container_add( GTK_CONTAINER( hBox0 ), button ); - - // reset button - gtk_widget_set_sensitive( button0, FALSE ); - g_signal_connect( G_OBJECT( button0 ), "clicked", - G_CALLBACK( reset_cb ), button ); - gtk_container_add( GTK_CONTAINER( hBox0 ), button0 ); - - gtk_box_pack_start( GTK_BOX( vBoxMain ), hBox0, FALSE, FALSE, 0 ); - - gtk_container_add( GTK_CONTAINER( window ), vBoxMain ); - - gtk_widget_show_all( window ); - - return GTK_WINDOW( window ); +int stopish_get_orientation( void ) +{ + return stopishOrientation; } @@ -245,15 +158,15 @@ static void main_menu( GtkWindow *window ) // Hour preference radio = gtk_radio_button_new_with_label( NULL, "Hour" ); gtk_toggle_button_set_mode( GTK_TOGGLE_BUTTON( radio ), FALSE ); - g_signal_connect_after( radio, "clicked", - G_CALLBACK( preference_timer_hour ), NULL ); + g_signal_connect_after( G_OBJECT( radio ), "clicked", + G_CALLBACK( stopish_stopwatch_perf_timer_hour ), NULL ); hildon_app_menu_add_filter( menu, GTK_BUTTON( radio ) ); // Minute preference radio = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON( radio ), "Minute" ); gtk_toggle_button_set_mode( GTK_TOGGLE_BUTTON ( radio ), FALSE ); - g_signal_connect_after( radio, "clicked", - G_CALLBACK( preference_timer_minute ), NULL ); + g_signal_connect_after( G_OBJECT( radio ), "clicked", + G_CALLBACK( stopish_stopwatch_perf_timer_minute ), NULL ); hildon_app_menu_add_filter( menu, GTK_BUTTON( radio ) ); // default to minute @@ -265,237 +178,6 @@ static void main_menu( GtkWindow *window ) } -static void label_timer_landscape( void ) -{ - gtk_widget_set_size_request( timerdata.vBox, 800, -1 ); - - gtk_widget_destroy( timerdata.label ); - timerdata.label = gtk_label_new( NULL ); - if ( stopish_timer_get_precision( ) == TIMER_PRECISION_MINUTE ) - gtk_label_set_markup( GTK_LABEL( timerdata.label ), - "" - "00:00.0" ); - else - gtk_label_set_markup( GTK_LABEL( timerdata.label ), - "" - "00:00:00.0" ); - gtk_misc_set_alignment( GTK_MISC( timerdata.label ), 0.5f, 0.5f ); - gtk_container_add( GTK_CONTAINER( timerdata.vBox ), timerdata.label ); - gtk_widget_show( timerdata.label ); -} - - -static void label_timer_portrait( void ) -{ - GtkWidget *vBox, *hBox, *label; - - gtk_widget_set_size_request( timerdata.vBox, 480, -1 ); - - gtk_widget_destroy( timerdata.label ); - vBox = gtk_vbox_new( FALSE, 10 ); - - if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) { - hBox = gtk_hbox_new( FALSE, 10 ); - label = gtk_label_new( "Hours" ); - gtk_widget_set_size_request( label, 100, -1 ); - gtk_misc_set_alignment( GTK_MISC( label ), 1.0f, 0.5f ); - gtk_container_add( GTK_CONTAINER( hBox ), label ); - timerdata.labelHour = gtk_label_new( NULL ); - gtk_widget_set_size_request( timerdata.labelHour, 350, -1 ); - gtk_misc_set_alignment( GTK_MISC( timerdata.labelHour ), 0.0f, 0.5f ); - gtk_label_set_markup( GTK_LABEL( timerdata.labelHour ), - "" - "00" ); - gtk_container_add( GTK_CONTAINER( hBox ), timerdata.labelHour ); - gtk_container_add( GTK_CONTAINER( vBox ), hBox ); - } - - hBox = gtk_hbox_new( FALSE, 10 ); - label = gtk_label_new( "Minutes" ); - gtk_widget_set_size_request( label, 100, -1 ); - gtk_misc_set_alignment( GTK_MISC( label ), 1.0f, 0.5f ); - gtk_container_add( GTK_CONTAINER( hBox ), label ); - timerdata.labelMinute = gtk_label_new( NULL ); - gtk_widget_set_size_request( timerdata.labelMinute, 350, -1 ); - gtk_misc_set_alignment( GTK_MISC( timerdata.labelMinute ), 0.0f, 0.5f ); - gtk_label_set_markup( GTK_LABEL( timerdata.labelMinute ), - "" - "00" ); - gtk_container_add( GTK_CONTAINER( hBox ), timerdata.labelMinute ); - gtk_container_add( GTK_CONTAINER( vBox ), hBox ); - - hBox = gtk_hbox_new( FALSE, 10 ); - label = gtk_label_new( "Seconds" ); - gtk_widget_set_size_request( label, 100, -1 ); - gtk_misc_set_alignment( GTK_MISC( label ), 1.0f, 0.5f ); - gtk_container_add( GTK_CONTAINER( hBox ), label ); - timerdata.labelSecond = gtk_label_new( NULL ); - gtk_widget_set_size_request( timerdata.labelSecond, 350, -1 ); - gtk_misc_set_alignment( GTK_MISC( timerdata.labelSecond ), 0.0f, 0.5f ); - gtk_label_set_markup( GTK_LABEL( timerdata.labelSecond ), - "" - "00.0" ); - gtk_container_add( GTK_CONTAINER( hBox ), timerdata.labelSecond ); - gtk_container_add( GTK_CONTAINER( vBox ), hBox ); - - timerdata.label = vBox; - gtk_container_add( GTK_CONTAINER( timerdata.vBox ), vBox ); - gtk_widget_show_all( vBox ); -} - - -// -// Timer callback -// -static gint timeout_cb( gpointer data ) -{ - char formatBuffer[128], tempBuffer[8]; - char *tempString; - - // print to screen - tempString = stopish_get_time_string( ); - if ( stopishOrientation == STOPISH_LANDSCAPE ) { - sprintf( formatBuffer, "" - "%s", tempString ); - gtk_label_set_markup( GTK_LABEL( timerdata.label ), formatBuffer ); - } - else { - if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) { - sprintf( tempBuffer, "%.2s", tempString ); - sprintf( formatBuffer, "" - "%s", tempBuffer ); - gtk_label_set_markup( GTK_LABEL( timerdata.labelHour ), - formatBuffer ); - } - if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) - sprintf( tempBuffer, "%.2s", tempString + 3 ); - else - sprintf( tempBuffer, "%.2s", tempString ); - sprintf( formatBuffer, "" - "%s", tempBuffer ); - gtk_label_set_markup( GTK_LABEL( timerdata.labelMinute ), - formatBuffer ); - if ( stopish_timer_get_precision( ) == TIMER_PRECISION_HOUR ) - sprintf( tempBuffer, "%.4s", tempString + 6 ); - else - sprintf( tempBuffer, "%.4s", tempString + 3 ); - sprintf( formatBuffer, "" - "%s", tempBuffer ); - gtk_label_set_markup( GTK_LABEL( timerdata.labelSecond ), - formatBuffer ); - } - free( tempString ); - - return TRUE; -} - - -static void start_cb( GtkButton* button, gpointer data ) -{ - if ( stopishMode == STOPISH_MODE_START ) { - // set label text and add timer handle - gtk_button_set_label( button, "Pause" ); - stopishMode = STOPISH_MODE_PAUSE; - stopish_set_time_start( stopish_current_time( ) ); - timerHandle = g_timeout_add( 100, timeout_cb, NULL ); - } - else if ( stopishMode == STOPISH_MODE_RESUME ) { - // resume timer - gtk_button_set_label( button, "Pause" ); - stopishMode = STOPISH_MODE_PAUSE; - stopish_timer_resume( ); - timerHandle = g_timeout_add( 100, timeout_cb, NULL ); - } - else { - // pause timer, remove timeout - gtk_button_set_label( button, "Resume" ); - stopishMode = STOPISH_MODE_RESUME; - g_source_remove( timerHandle ); - stopish_timer_save( ); - } - - // allow user to reset timer - gtk_widget_set_sensitive( GTK_WIDGET( data ), TRUE ); -} - - -static void reset_cb( GtkButton* button, gpointer data ) -{ - GSList *tempList; - char *tempString; - char formatString[128]; - - if ( stopishMode == STOPISH_MODE_RESUME ) - stopish_timer_resume( ); - - // set label text and remove timer handle - gtk_button_set_label( GTK_BUTTON( data ), "Start" ); - stopishMode = STOPISH_MODE_START; - if ( stopish_timer_get_precision( ) == TIMER_PRECISION_MINUTE ) - gtk_label_set_markup( GTK_LABEL( timerdata.label ), - "" - "00:00.0" ); - else - gtk_label_set_markup( GTK_LABEL( timerdata.label ), - "" - "00:00:00.0" ); - g_source_remove( timerHandle ); - - // add current time to history - historyList = g_slist_prepend( historyList, - ( gpointer ) stopish_get_time_string( ) ); - sprintf( formatString, "%s", - ( char * ) historyList->data ); - gtk_label_set_markup( GTK_LABEL( timerHistoryLabel1 ), - formatString ); - tempList = historyList; - tempList = g_slist_next( tempList ); - if ( tempList ) { - gtk_label_set_text( GTK_LABEL( timerHistoryLabel2 ), - ( char * ) tempList->data ); - } - tempList = g_slist_next( tempList ); - if ( tempList ) { - sprintf( formatString, "%s", - ( char * ) tempList->data ); - gtk_label_set_markup( GTK_LABEL( timerHistoryLabel3 ), - formatString ); - } - tempList = g_slist_next( tempList ); - if ( tempList ) { - sprintf( formatString, "%s", - ( char * ) tempList->data ); - gtk_label_set_markup( GTK_LABEL( timerHistoryLabel4 ), - formatString ); - } - - // remove the history time after the 4th - tempList = g_slist_next( tempList ); - if ( tempList ) { - tempString = tempList->data; - historyList = g_slist_remove( historyList, tempList->data ); - free( tempString ); - } - - // reset start time - stopish_set_time_start( 0 ); - - // disallow user to reset timer - gtk_widget_set_sensitive( GTK_WIDGET( button ), FALSE ); -} - - static void close_cb( GtkButton* button, gpointer data ) { // disable accelerometer for battery savings @@ -527,26 +209,6 @@ static gboolean focus_out_cb( GtkWidget *widget, GdkEventFocus *event, } -static void preference_timer_hour( GtkRadioButton* radio, GtkLabel *label ) -{ - stopish_timer_set_precision( TIMER_PRECISION_HOUR ); - if ( stopishOrientation == STOPISH_LANDSCAPE ) - label_timer_landscape( ); - else - label_timer_portrait( ); -} - - -static void preference_timer_minute( GtkRadioButton* radio, GtkLabel *label ) -{ - stopish_timer_set_precision( TIMER_PRECISION_MINUTE ); - if ( stopishOrientation == STOPISH_LANDSCAPE ) - label_timer_landscape( ); - else - label_timer_portrait( ); -} - - static void accelerometer_enable( void ) { if ( osso_rpc_run_system( appdata.osso_context, MCE_SERVICE, @@ -586,13 +248,13 @@ static DBusHandlerResult mce_filter_func( DBusConnection * connection, if ( !strcmp( rotation, MCE_ORIENTATION_PORTRAIT ) ) { hildon_gtk_window_set_portrait_flags( GTK_WINDOW( appdata.main_window ), HILDON_PORTRAIT_MODE_REQUEST ); - label_timer_portrait( ); + stopish_stopwatch_label_timer_portrait( ); stopishOrientation = STOPISH_PORTRAIT; } else { hildon_gtk_window_set_portrait_flags( GTK_WINDOW( appdata.main_window ), ~HILDON_PORTRAIT_MODE_REQUEST ); - label_timer_landscape( ); + stopish_stopwatch_label_timer_landscape( ); stopishOrientation = STOPISH_LANDSCAPE; } } diff --git a/src/stopish.h b/src/stopish.h index 151a5cf..1b87d87 100644 --- a/src/stopish.h +++ b/src/stopish.h @@ -21,6 +21,8 @@ #ifndef __STOPISH_H__ #define __STOPISH_H__ +#include + #define STOPISH_MODE_START 0 #define STOPISH_MODE_PAUSE 1 #define STOPISH_MODE_RESUME 2 @@ -35,6 +37,15 @@ gint dbus_callback( const gchar *interface, const gchar *method, GArray *arguments, gpointer data, osso_rpc_t *retval ); int stopish_get_mode( void ); +int stopish_get_orientation( void ); +void stopish_set_mode( int newMode ); + +// stopish-stopwatch.c +GtkWindow *stopish_stopwatch_new( void ); +void stopish_stopwatch_perf_timer_hour( GtkRadioButton* radio, GtkLabel *label ); +void stopish_stopwatch_perf_timer_minute( GtkRadioButton* radio, GtkLabel *label ); +void stopish_stopwatch_label_timer_landscape( void ); +void stopish_stopwatch_label_timer_portrait( void ); // timer.c char *stopish_get_time_string( void ); -- 1.7.9.5