DBusConnection *system_bus;
};
+typedef struct timerData {
+ GtkWidget *vBox;
+ GtkWidget *label;
+ GtkWidget *labelHour;
+ GtkWidget *labelMinute;
+ GtkWidget *labelSecond;
+};
+
static AppData appdata;
-static GtkWidget *timerLabel = NULL;
+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 );
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,
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 );
- // stop watch area
vBox0 = gtk_vbox_new( FALSE, 5 );
- // main timer
- timerLabel = gtk_label_new( NULL );
- gtk_label_set_markup( GTK_LABEL( timerLabel ),
- "<span font_family=\"monospace\" "
- "size=\"70000\" weight=\"ultrabold\">"
- "00:00:00.0</span>" );
- gtk_widget_set_size_request( timerLabel, 700, -1 );
- gtk_label_set_line_wrap( GTK_LABEL( timerLabel ), TRUE );
- gtk_label_set_line_wrap_mode( GTK_LABEL( timerLabel ), PANGO_WRAP_CHAR );
- gtk_misc_set_alignment( GTK_MISC( timerLabel ), 1.0f, 0.5f );
- gtk_container_add( GTK_CONTAINER( vBox0 ), timerLabel );
+ // 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 );
}
+static void main_menu( GtkWindow *window )
+{
+ GtkWidget *menu, *radio;
+
+ menu = hildon_app_menu_new( );
+
+ // 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 );
+ 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 );
+ hildon_app_menu_add_filter( menu, GTK_BUTTON( radio ) );
+
+ // default to minute
+ gtk_toggle_button_set_active( radio, TRUE );
+
+ gtk_widget_show_all( menu );
+
+ hildon_window_set_app_menu( HILDON_WINDOW( window ), menu );
+}
+
+
+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 ),
+ "<span font_family=\"monospace\" "
+ "size=\"70000\" weight=\"ultrabold\">"
+ "00:00.0</span>" );
+ else
+ gtk_label_set_markup( GTK_LABEL( timerdata.label ),
+ "<span font_family=\"monospace\" "
+ "size=\"70000\" weight=\"ultrabold\">"
+ "00:00:00.0</span>" );
+ 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 ),
+ "<span font_family=\"monospace\" "
+ "size=\"80000\" weight=\"ultrabold\">"
+ "00</span>" );
+ 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 ),
+ "<span font_family=\"monospace\" "
+ "size=\"80000\" weight=\"ultrabold\">"
+ "00</span>" );
+ 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 ),
+ "<span font_family=\"monospace\" "
+ "size=\"80000\" weight=\"ultrabold\">"
+ "00.0</span>" );
+ 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, "<span font_family=\"monospace\" "
+ "size=\"70000\" weight=\"ultrabold\">"
+ "%s</span>", 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, "<span font_family=\"monospace\" "
+ "size=\"80000\" weight=\"ultrabold\">"
+ "%s</span>", 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, "<span font_family=\"monospace\" "
+ "size=\"80000\" weight=\"ultrabold\">"
+ "%s</span>", 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, "<span font_family=\"monospace\" "
+ "size=\"80000\" weight=\"ultrabold\">"
+ "%s</span>", 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 ) {
gtk_button_set_label( button, "Pause" );
stopishMode = STOPISH_MODE_PAUSE;
stopish_set_time_start( stopish_current_time( ) );
- timerHandle = g_timeout_add( 100, stopish_timeout_cb, timerLabel );
+ 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, stopish_timeout_cb, timerLabel );
+ timerHandle = g_timeout_add( 100, timeout_cb, NULL );
}
else {
// pause timer, remove timeout
// set label text and remove timer handle
gtk_button_set_label( GTK_BUTTON( data ), "Start" );
stopishMode = STOPISH_MODE_START;
- gtk_label_set_markup( GTK_LABEL( timerLabel ),
- "<span font_family=\"monospace\" "
- "size=\"70000\" weight=\"ultrabold\">"
- "00:00:00.0</span>" );
+ if ( stopish_timer_get_precision( ) == TIMER_PRECISION_MINUTE )
+ gtk_label_set_markup( GTK_LABEL( timerdata.label ),
+ "<span font_family=\"monospace\" "
+ "size=\"70000\" weight=\"ultrabold\">"
+ "00:00.0</span>" );
+ else
+ gtk_label_set_markup( GTK_LABEL( timerdata.label ),
+ "<span font_family=\"monospace\" "
+ "size=\"70000\" weight=\"ultrabold\">"
+ "00:00:00.0</span>" );
g_source_remove( timerHandle );
// add current time to history
}
+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,
if ( !strcmp( rotation, MCE_ORIENTATION_PORTRAIT ) ) {
hildon_gtk_window_set_portrait_flags( GTK_WINDOW( appdata.main_window ),
HILDON_PORTRAIT_MODE_REQUEST );
- gtk_widget_set_size_request( timerLabel, 400, -1 );
+ label_timer_portrait( );
+ stopishOrientation = STOPISH_PORTRAIT;
}
else {
hildon_gtk_window_set_portrait_flags( GTK_WINDOW( appdata.main_window ),
~HILDON_PORTRAIT_MODE_REQUEST );
- gtk_widget_set_size_request( timerLabel, 700, -1 );
+ label_timer_landscape( );
+ stopishOrientation = STOPISH_LANDSCAPE;
}
}
else