if {0} {

by Michael Jacobson

iLogWatch is my updates to RS's A little stopwatch application. With the following additions (while maintaining the small codebase ~ 73 lines of code):

  • added hours (HH:MM:SS.MS)
  • take a split time
  • comment field
  • logging window
  • ability to save the log
  • file/clear menu
  • colored buttons
  • larger fonts (easier to press on my pda)

This application was developed for my PocketPC but the current port of the TclTk does not work well enough to run this application (hopefully some day it will).}

entry .e1
eval [concat font create Time "[font actual [.e1 cget -font]] -size 12 -weight bold"]
destroy .e1
#----- button and Time
frame .b
button .b.start -text Start -command {eval \[.b.start cget -text\]} -bg green -width 5 -font Time
label  .b.time -textvar time -width 12 -bg black -fg green -font Time
set time 00:00:00.00
button .b.split -text Split -command Split -state disable -bg SystemButtonFace -width 5 -font Time
pack .b.start .b.time .b.split -side left -fill y
pack .b -side top -fill y -expand 1
#----- Comment label and entry
frame .c
label .c.comm -text Comments -width 9 
entry .c.mess -width 30 -textvariable Mess
pack .c.comm .c.mess -side left -fill y -expand 1
pack .c -side top -fill y -expand 1
bind .c.mess  <KeyPress-Return> Comment 
focus .c.mess
#----- Log window
frame .a
scrollbar .a.y -command ".a.t yview"
text .a.t -yscrollc ".a.y set" -wrap word -font {Tahoma 8} -padx 2 -pady 3 -borderwidth 0 -takefocus 0
pack .a.y -side right -fill y
pack .a.t -side right -fill both -expand 1
pack .a -side bottom
#----- procedures
proc every {ms body} {eval $body; after $ms [namespace code [info level 0]]}
proc Time {} {
    set m [expr {[clock clicks -milliseconds] - $::time0}]
    return [format %2.2d:%2.2d:%2.2d.%2.2d \
      [expr {$m/360000}] [expr {$m/60000}] [expr {($m/1000)%60}] [expr {$m%1000/10}]]
proc Start {} {
    if {$::time=="00:00:00.00"} {
        set ::time0 [clock clicks -milliseconds]
        .a.t insert 1.0  "Start : [clock format [clock seconds] -format %T_%D]\n"
        .b.start configure -text Stop -bg red
        .b.split configure -state normal -bg green
    every 10 {
        set ::time [Time]
proc Stop {} {
    if {[llength [after info]]} { after cancel [after info] }
    .b.start configure -text Reset -bg yellow
    .b.split configure -state disable -bg SystemButtonFace
    .a.t insert 1.0  "Stop : [Time]\n"
proc Reset {} {
    set ::time 00:00:00.00
    .b.start configure -text Start -bg green
proc Split {} {
    .a.t insert 1.0  "Split : [Time]\n"
proc Save {} {
    set filetime [clock format [clock seconds] -format %y-%m-%d_%H^%M^%S]
    set name [tk_getSaveFile -initialfile iLogWatch-$filetime.txt \
       -filetypes [list "{Logs} .txt" {All *.*}]]
    if {$name != ""} {
set fp [open $name w]
puts $fp [.a.t get 1.0 end-1c]
close $fp
proc Comment {} {
    .a.t insert 1.0  "Comment : $::Mess \n"; set ::Mess ""
#----- Size and Menu for PocketPC
wm geometry . 240x268+0+0
. config -menu [menu .m]
.m add casc -label File -menu [menu .m.file -tearoff 0]
.m.file add comm -label Save -comm Save
.m.file add comm -label Exit -comm exit
.m add casc -label Log -menu [menu .m.log -tearoff 0]
.m.log add comm -label Clear -comm  [list .a.t delete 0.0 end]