aboutsummaryrefslogtreecommitdiff
path: root/gstopwatch.c
blob: d3381f8a10396e0d3316dc4b4aada1e5c00a9594 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <glib.h>

gboolean running;
GtkWidget *hbox;
GtkWidget *timer_display;
GtkWidget *window;
GTimer *timer;

gboolean update_progress_bar () {
  gulong gulong;
  gdouble time_elapsed = g_timer_elapsed (timer, &gulong);
  char *output;

  sprintf(output, "%.2f", time_elapsed);

  gtk_label_set_text(GTK_LABEL(timer_display), output);
  return TRUE;
}

gboolean keypress (GtkWidget *widget, GdkEventKey *event) {

  guint(g) = event->keyval;

  if((g == GDK_KEY_space)) {
    if(running == FALSE) {
      g_timer_start(timer);
      running = TRUE;
      return TRUE;
    }
    else {
      g_timer_stop(timer);
      running = FALSE;
      return TRUE;
    }
  }
  return FALSE; 
}

int main (int argc, char *argv[]) {

  gtk_init (&argc, &argv);

  timer_display = gtk_label_new("");

  hbox = gtk_hbox_new(FALSE, 0);
  gtk_box_pack_start(GTK_BOX (hbox), timer_display, FALSE, FALSE, 5);


  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_add (GTK_CONTAINER (window), hbox);
  gtk_widget_show_all (window);

  timer = g_timer_new ();
  g_timer_stop(timer);

  g_timeout_add_full(G_PRIORITY_HIGH, 50, (GSourceFunc) update_progress_bar, NULL, NULL);
  g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
  g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(keypress), window);

  gtk_main ();
}