#! /usr/bin/env pike #pragma strict_types constant stopwstyle = #"style \"stopwstyle\" {fg[NORMAL]={1.0,1.0,0.0} bg[NORMAL]={0.0,0.0,0.5} font=\"-*-*-bold-r-normal-*-24-*-*-*-m-*-iso8859-*\"} widget \"*timelabel\" style \"stopwstyle\""; int main(int argc, array(string) argv) { #if constant(Gnome.init) Gnome.init("PiGTK Stopwatch", "0.001", argv); #else GTK.setup_gtk(argv); #endif GTK.parse_rc(stopwstyle); Stopwatch stopwatch = Stopwatch(); GTK.Window mainwindow = GTK.Window(GTK.WindowToplevel) -> set_policy(0,0,1); mainwindow-> signal_connect("destroy", exit, 0); mainwindow-> set_title("Stopwatch") -> add(stopwatch) -> show_all(); return -1; } class Stopwatch { inherit GTK.Vbox; static { GTK.Clock timelabel; GTK.Hbox buttonpad; GTK.Button startstopb; GTK.Button resetb; int(0..1) running = 0; } int(0..1) is_running() { return running; } void create() { timelabel = GTK.Clock(GTK.ClockIncreasing) ->set_justify(GTK.JustifyCenter) ->set_padding(5,5) ->set_name("timelabel"); startstopb = GTK.Button()->add(GTK.Label("Start")); startstopb->signal_connect("clicked", startstop); resetb = GTK.Button("Reset"); resetb->signal_connect("clicked", reset); buttonpad = GTK.Hbox(1,0) ->add(startstopb) ->add(resetb) /*->set_layout(GTK.BUTTONBOX_EDGE) ->set_border_width(5)*/; ::create(0,0); add(GTK.Frame()->add(GTK.EventBox()->set_name("timelabel")->add(timelabel))); add(buttonpad); } void startstop() { if(running) { timelabel->stop()->set_cursor(GDK.LeftPtr); startstopb->child()->set_text("Start"); running = 0; } else { timelabel->start()->set_cursor(GDK.Watch); startstopb->child()->set_text("Stop"); running = 1; } } void reset() { if(running) startstop(); timelabel->set_seconds(0); } }